discord-easy-dashboard
Version:
💻 Complete framework to facilitate the creation of dashboard using discord.js and express
91 lines (74 loc) • 2.91 kB
JavaScript
const { Router } = require('express');
const CheckAuth = (req, res, next) =>
req.session.user ? next() : res.status(401).redirect('/auth/login');
const Server = Router()
.get('/:guildID', CheckAuth, async (req, res) => {
const guild = req.client.guilds.cache.get(req.params.guildID);
if (!guild) return res.redirect('/selector');
const member = await guild.members.fetch(req.user.id);
if (!member) return res.redirect('/selector');
const permissions = req.deserializePermissions(member.permissions);
const hasPermissions = req.dashboardConfig.permissions.every((p) => permissions[p] === true);
if (!hasPermissions) return res.redirect('/selector');
const file = req.dashboardConfig.theme.guild || 'guild.ejs';
return await res.render(
file,
{
bot: req.client,
user: req.user,
is_logged: Boolean(req.session.user),
guild,
alert: null,
errors: false,
dashboardDetails: req.dashboardDetails,
dashboardConfig: req.dashboardConfig,
settings: req.dashboardSettings,
},
(err, html) => {
if (err) {
res.status(500).send(err.message);
return console.error(err);
}
res.status(200).send(html);
},
);
})
.post('/:guildID', CheckAuth, async (req, res) => {
const guild = req.client.guilds.cache.get(req.params.guildID);
if (!guild) return res.redirect('/selector');
const member = await guild.members.fetch(req.user.id);
if (!member) return res.redirect('/selector');
const permissions = req.deserializePermissions(member.permissions);
const hasPermissions = req.dashboardConfig.permissions.every((p) => permissions[p] === true);
if (!hasPermissions) return res.redirect('/selector');
const errors = [];
Object.keys(req.body).forEach((item) => {
const setting = req.dashboardSettings.find((x) => x.name === item);
if (!setting) return;
if (setting.validator && !setting.validator(req.body[item])) return errors.push(item);
if (setting.type === 'boolean input') req.body[item] = !!Array.isArray(req.body[item]);
setting.set(req.client, guild, req.body[item]);
});
const file = req.dashboardConfig.theme.guild || 'guild.ejs';
return await res.render(
file,
{
bot: req.client,
user: req.user,
is_logged: Boolean(req.session.user),
guild,
alert:
errors.length > 0 ? `The following items are invalid and have not been saved: ${errors.join(', ')}.` : 'Your settings have been saved.',
errors: errors.length > 0,
dashboardDetails: req.dashboardDetails,
dashboardConfig: req.dashboardConfig,
settings: req.dashboardSettings,
},
(_err, html) => res.status(200).send(html),
);
})
.get('/', CheckAuth, (_req, res) => {
res.redirect('/selector');
});
module.exports.Router = Server;
module.exports.name = '/manage';