From a10996143f340fed30327af979c8cce5ab51eea6 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Sun, 21 May 2017 03:42:16 +0000 Subject: [PATCH] Open Role, Add Role, Remove Role --- assets/json/clearsetting.json | 10 ++++++ commands/settings/addrole.js | 29 ++++++++++++++++++ commands/settings/clearsetting.js | 7 +++-- commands/settings/openroles.js | 51 +++++++++++++++++++++++++++++++ commands/settings/removerole.js | 29 ++++++++++++++++++ commands/settings/settinglist.js | 1 + package.json | 2 +- 7 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 assets/json/clearsetting.json create mode 100644 commands/settings/addrole.js create mode 100644 commands/settings/openroles.js create mode 100644 commands/settings/removerole.js diff --git a/assets/json/clearsetting.json b/assets/json/clearsetting.json new file mode 100644 index 00000000..257b6c6c --- /dev/null +++ b/assets/json/clearsetting.json @@ -0,0 +1,10 @@ +[ + "inviteGuard", + "modLog", + "memberLog", + "joinMsg", + "leaveMsg", + "staffRole", + "singleRole", + "openRoles" +] diff --git a/commands/settings/addrole.js b/commands/settings/addrole.js new file mode 100644 index 00000000..1d828654 --- /dev/null +++ b/commands/settings/addrole.js @@ -0,0 +1,29 @@ +const { Command } = require('discord.js-commando'); + +module.exports = class AddRoleCommand extends Command { + constructor(client) { + super(client, { + name: 'add-role', + group: 'settings', + memberName: 'add-role', + description: 'Joins you to one of the open roles.', + guildOnly: true, + args: [ + { + key: 'role', + prompt: 'Which role would you like to add?', + type: 'role' + } + ] + }); + } + + run(msg, args) { + const { role } = args; + const roles = msg.guild.settings.get('openRoles'); + if (!roles) return msg.say('No Roles are open to join.'); + if (!roles.has(role.id)) return msg.say('This role is not open.'); + msg.member.addRole(role); + return msg.say(`You have been given the ${role.name} role.`); + } +}; diff --git a/commands/settings/clearsetting.js b/commands/settings/clearsetting.js index c748a0c6..3a659568 100644 --- a/commands/settings/clearsetting.js +++ b/commands/settings/clearsetting.js @@ -1,4 +1,5 @@ const { Command } = require('discord.js-commando'); +const settings = require('../../assets/json/clearsetting'); module.exports = class ClearSettingCommand extends Command { constructor(client) { @@ -11,11 +12,11 @@ module.exports = class ClearSettingCommand extends Command { args: [ { key: 'setting', - prompt: 'What setting do you want to clear? `inviteGuard`, `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`?', + prompt: 'What setting do you want to clear?', type: 'string', validate: setting => { - if (['inviteGuard', 'modLog', 'memberLog', 'joinMsg', 'leaveMsg', 'staffRole', 'singleRole'].includes(setting)) return true; - return 'Please enter either `inviteGuard`, `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`.'; + if (settings.includes(setting)) return true; + return `Please enter one of the following: ${settings.join(', ')}.`; } } ] diff --git a/commands/settings/openroles.js b/commands/settings/openroles.js new file mode 100644 index 00000000..14006118 --- /dev/null +++ b/commands/settings/openroles.js @@ -0,0 +1,51 @@ +const { Command } = require('discord.js-commando'); + +module.exports = class OpenRolesCommand extends Command { + constructor(client) { + super(client, { + name: 'open-roles', + group: 'settings', + memberName: 'open-roles', + description: 'Lets you add or remove roles open for anyone to join.', + guildOnly: true, + args: [ + { + key: 'action', + prompt: 'Would you like to `add` or `remove` the role?', + type: 'string', + validate: action => { + if (['add', 'remove'].includes(action.toLowerCase())) return true; + return 'Please enter either `add` or `remove`.'; + }, + parse: action => action.toLowerCase() + }, + { + key: 'role', + prompt: 'Which role would you like to add/remove?', + type: 'role' + } + ] + }); + } + + hasPermission(msg) { + return msg.member.hasPermission('ADMINISTRATOR'); + } + + run(msg, args) { + const { action, role } = args; + const roles = msg.guild.settings.get('openRoles', new Set()); + if (action === 'add') { + if (roles.size > 5) return msg.say('Only 5 roles may be open.'); + if (roles.has(role.id)) return msg.say(`${role.name} is already set to open.`); + roles.add(role.id); + msg.guild.settings.set('openRoles', roles); + return msg.say(`${role.name} has been added to the open roles.`); + } else if (action === 'remove') { + if (!roles.has(role.id)) return msg.say(`${role.name} is not set to open.`); + roles.delete(role.id); + msg.guild.settings.set('openRoles', roles); + return msg.say(`${role.name} has been remove from the open roles.`); + } + } +}; diff --git a/commands/settings/removerole.js b/commands/settings/removerole.js new file mode 100644 index 00000000..fa849974 --- /dev/null +++ b/commands/settings/removerole.js @@ -0,0 +1,29 @@ +const { Command } = require('discord.js-commando'); + +module.exports = class RemoveRoleCommand extends Command { + constructor(client) { + super(client, { + name: 'remove-role', + group: 'settings', + memberName: 'remove-role', + description: 'Removes you from one of the open roles.', + guildOnly: true, + args: [ + { + key: 'role', + prompt: 'Which role would you like to remove?', + type: 'role' + } + ] + }); + } + + run(msg, args) { + const { role } = args; + const roles = msg.guild.settings.get('openRoles'); + if (!roles) return msg.say('No Roles are open to join.'); + if (!roles.has(role.id)) return msg.say('This role is not open.'); + msg.member.removeRole(role); + return msg.say(`You have been removed from the ${role.name} role.`); + } +}; diff --git a/commands/settings/settinglist.js b/commands/settings/settinglist.js index 458236a1..6b92819f 100644 --- a/commands/settings/settinglist.js +++ b/commands/settings/settinglist.js @@ -26,6 +26,7 @@ module.exports = class SettingListCommand extends Command { **Join Message:** ${msg.guild.settings.get('joinMsg', 'Welcome ! (Default)')} **Leave Message:** ${msg.guild.settings.get('leaveMsg', 'Bye ... (Default)')} **Single Role:** ${singleRole ? (msg.guild.roles.has(singleRole) ? msg.guild.roles.get(singleRole).name : 'Missing') : 'None'} + **Open Roles:** ${msg.guild.settings.get('openRoles').size} `); } }; diff --git a/package.json b/package.json index 0fa31af4..62b3db72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "19.10.2", + "version": "19.11.0", "description": "A Discord Bot", "main": "shardingmanager.js", "scripts": {