UNPKG

discord-easy-dashboard

Version:

💻 Complete framework to facilitate the creation of dashboard using discord.js and express

91 lines (74 loc) • 2.91 kB
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';