diff --git a/app.js b/app.js index 4cee8e7..be4c9d8 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,7 @@ // Load configuration. require('dotenv').config(); -//load @bot hooks. +// load @bot hooks. require('./core/bootstrap'); // Load HTTP server for redirecting to auth URL. @@ -16,7 +16,7 @@ log('notify', `MONGO: [${process.env.MONGODB_URL}]`); loader.init(); // Simple HTTP server to redirect to Discord bot auth URL. -const [PORT] = process.env.PORT; +const { PORT } = process.env; const server = http.createServer((request, response) => { response.writeHead(302, { Location: process.env.DISCORD_REDIRECT_URL }); response.end('Redirecting...'); diff --git a/core/bootstrap.js b/core/bootstrap.js index 91bd8fc..fc7b32e 100644 --- a/core/bootstrap.js +++ b/core/bootstrap.js @@ -16,6 +16,10 @@ const database = require('./database'); core.hook('database', database); +const permissions = require('./permissions'); + +core.hook('permissions', permissions); + const commands = require('./commands'); core.hook('commands', commands); diff --git a/core/database.js b/core/database.js index cb27c57..6160f75 100644 --- a/core/database.js +++ b/core/database.js @@ -1,11 +1,12 @@ const { log } = require('@bot').logger; const mongoose = require('mongoose'); -const [Schema] = mongoose.Schema; +const { Schema } = mongoose; const database = mongoose.connection; mongoose.connect(process.env.MONGODB_URL, { useNewUrlParser: true }); +// eslint-disable-next-line no-console database.on('error', console.error.bind(console, 'connection error:')); database.once('open', () => { @@ -40,9 +41,8 @@ const ModeratorRole = mongoose.model('ModeratorRole', { const Permission = mongoose.model('Permission', { server: { type: Schema.Types.ObjectId, ref: 'Server' }, - module: String, + plugin: String, roleID: Number, - permission: String, }); module.exports = { diff --git a/core/logger.js b/core/logger.js index 8c243ad..668bac6 100644 --- a/core/logger.js +++ b/core/logger.js @@ -4,6 +4,7 @@ const path = require('path'); const date = new Date(); exports.log = (level, ...data) => { + // eslint-disable-next-line no-console console.log(`[${level}] ${data}`); if (level === 'store') { fs.appendFile(path.join(__dirname, 'logs', `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}.txt`), `${data}\n`, (err) => { diff --git a/core/permissions.js b/core/permissions.js index e69de29..68c421e 100644 --- a/core/permissions.js +++ b/core/permissions.js @@ -0,0 +1,27 @@ +const { Server, Permission } = require('@bot').database; + +module.exports.checkPermissions = async (serverID, roleID, plugin) => { + const server = await Server.findOne({ serverID }).exec(); + const rolePermissions = await Permission.find({ + server, + roleID, + plugin, + }); + + if (rolePermissions) { + console.log('Has Permission'); + } +}; + +module.exports.addPermission = async (serverID, roleID, plugin) => { + const server = await Server.findOne({ serverID }).exec(); + Permission.create({ + server, + roleID, + plugin, + }, (err, permission) => { + if (err) throw err; + return permission; + }); + return false; +}; diff --git a/core/plugin-loader.js b/core/plugin-loader.js index 9819a0c..a369537 100644 --- a/core/plugin-loader.js +++ b/core/plugin-loader.js @@ -15,7 +15,8 @@ const load = (path) => { if (stat.isDirectory()) { load(fPath); } else { - const mod = require(fPath); + // eslint-disable-next-line import/no-dynamic-require + const mod = require(fPath); // eslint-disable-line global-require loadedPlugins.push(mod); logger.log('notify', `Plugin: [${mod.name || 'ERROR'}] Version: [${mod.version || '0'}] Loaded.`); } @@ -31,6 +32,9 @@ exports.init = () => { exports.getPlugins = () => loadedPlugins; -exports.commandState = ({ command }) => loadedPlugins.filter(m => m.command === command && m.state === true).length > 0; +// eslint-disable-next-line arrow-body-style +exports.commandState = ({ command }) => { + return loadedPlugins.filter(m => m.command === command && m.state === true).length > 0; +}; exports.getPlugin = discrim => loadedPlugins.filter(m => m.discrim === discrim)[0]; diff --git a/plugins/core/install.js b/plugins/core/install.js index 09fe8e3..ee8bca6 100644 --- a/plugins/core/install.js +++ b/plugins/core/install.js @@ -3,6 +3,7 @@ const { Server, Configuration } = require('@bot').database; exports.command = 'setup'; +// eslint-disable-next-line arrow-body-style const roleReducer = (lastRole, curRole) => { return lastRole.permissions < curRole.permissions ? curRole : lastRole; }; diff --git a/plugins/core/permission-helper.js b/plugins/core/permission-helper.js new file mode 100644 index 0000000..15421a9 --- /dev/null +++ b/plugins/core/permission-helper.js @@ -0,0 +1,17 @@ +const { commands, loader, permissions } = require('@bot'); + +exports.command = 'permissions'; + +commands.register(this.command, 'add (.*) (.*)', 'Get a list of plugin discriminators', async (msg, extra) => { + const plugin = loader.getPlugin(extra[1]); + if (plugin) { + const role = msg.mentions.roles.first(); + if (role) { + const p = await permissions.addPermission(msg.guild.id, role.id, extra[1]); + console.log(p); + } + } +}); + +exports.name = 'Permission Helper'; +exports.state = true; diff --git a/plugins/core/plugin-helper.js b/plugins/core/plugin-helper.js index c75675a..ee51338 100644 --- a/plugins/core/plugin-helper.js +++ b/plugins/core/plugin-helper.js @@ -32,5 +32,5 @@ commands.register(this.command, '', 'Get a list of plugin discriminators', (msg) msg.reply(em); }); -exports.name = 'Module Loader'; +exports.name = 'Plugin Loader'; exports.state = true; diff --git a/plugins/customize.js b/plugins/customize.js index 96c57e8..d6614dc 100644 --- a/plugins/customize.js +++ b/plugins/customize.js @@ -7,9 +7,9 @@ commands.register(this.command, '', 'Customize Help', async (msg) => { const pluginCommands = commands.getCommands('customize'); const em = new discord.RichEmbed(); const prefix = await commands.getPrefix(); - em.setTitle(`Customize | Help`); - pluginCommands.forEach(c => { - em.addField(`${prefix}${c.command} ${c.params}`, `${c.description}`) + em.setTitle('Customize | Help'); + pluginCommands.forEach((c) => { + em.addField(`${prefix}${c.command} ${c.params}`, `${c.description}`); }); msg.channel.send(em); });