From 76b59c00c1468e9988713e1aee52742b41e3b7ec Mon Sep 17 00:00:00 2001 From: youngkidwarrior Date: Fri, 14 Aug 2020 16:22:37 -0700 Subject: [PATCH] add whitelisted roles list List of whitelisted roles provided to heroku. Just like whitelisted channels, * implies all roles are allowed. --- src/environment.js | 1 + src/index.js | 15 +++++++++++++++ src/parser/whitelistedRoles.js | 10 ++++++++++ 3 files changed, 26 insertions(+) create mode 100644 src/parser/whitelistedRoles.js diff --git a/src/environment.js b/src/environment.js index 8432d12..b932721 100644 --- a/src/environment.js +++ b/src/environment.js @@ -25,6 +25,7 @@ const ENV_VARS = { ], SENTRY_DSN: [process.env.SENTRY_DSN, '', false], WHITELISTED_CHANNELS: [process.env.WHITELISTED_CHANNELS, '*', false], + WHITELISTED_ROLES: [process.env.WHITELISTED_ROLES, '*', false] } function environment(name) { diff --git a/src/index.js b/src/index.js index e714915..d7ef7e8 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ const { const { environment } = require('./environment') const { error, log } = require('./utils') const parseWhitelistedChannels = require('./parser/whitelistedChannels') +const parseWhitelistedRoles = require('./parser/whitelistedRoles') // Load this as early as possible, to init all the environment variables that may be needed dotenv.config() @@ -26,6 +27,7 @@ client.on('message', message => { } try { const whitelistedChannels = parseWhitelistedChannels() + const whitelistedRoles = parseWhitelistedRoles() const messageWhitelisted = whitelistedChannels.reduce( (whitelisted, channel) => @@ -37,6 +39,19 @@ client.on('message', message => { return } + const roleWhitelisted = whitelistedRoles.reduce( + (whitelisted, role) => + message.member.roles.find('name', role) || role === '*' || whitelisted, + false, + ) + + if (!roleWhitelisted && whitelistedRoles) { + message.reply( + 'Your role level is not high enough to access this bot', + ) + return + } + const handler = detectHandler(message.content) handler(message) log( diff --git a/src/parser/whitelistedRoles.js b/src/parser/whitelistedRoles.js new file mode 100644 index 0000000..4ab3d6f --- /dev/null +++ b/src/parser/whitelistedRoles.js @@ -0,0 +1,10 @@ +const { environment } = require('../environment') + +module.exports = function parseWhitelistedRoles() { + const roles = environment('WHITELISTED_ROLES') + if (!roles) { + return ['*'] + } + + return roles.split(',') +}