From 3ed2530d28eca784eabefeb4a30e9b915900759b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Estevam?= Date: Fri, 11 Oct 2019 00:45:51 -0300 Subject: [PATCH 1/5] wip: starting the feature --- package-lock.json | 2 +- src/commands/moderation/giverole.js | 21 +++++++++++++++++++++ src/locales/en-US/commands.json | 14 +++++++++++--- 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/commands/moderation/giverole.js diff --git a/package-lock.json b/package-lock.json index d5766b8df..0a5a1b77f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1753,7 +1753,7 @@ }, "erlpack": { "version": "0.1.0", - "resolved": "github:discordapp/erlpack#674ebfd3439ba4b7ce616709821d27630f7cdc61", + "resolved": "github:discordapp/erlpack#27cd243b7799a6cf3c0b6b4dcdb49084dc3e6479", "optional": true, "requires": { "bindings": "^1.2.1", diff --git a/src/commands/moderation/giverole.js b/src/commands/moderation/giverole.js new file mode 100644 index 000000000..f23e23d2c --- /dev/null +++ b/src/commands/moderation/giverole.js @@ -0,0 +1,21 @@ +const { Command, Constants, SwitchbladeEmbed } = require('../../') + +module.exports = class Giverole extends Command { + constructor(client) { + super(client, { + name: 'giverole', + category: 'moderation', + requirements: { guildOnly: true, botPermissions: ['MANAGE_ROLES'], permissions: ['MANAGE_ROLES'] }, + parameters: [{ + type: 'member', acceptBot: true, missingError: 'commands:giverole.missingUser' + }, { + type: 'role', full: true, missingError: 'errors:invalidRole' + }] + }) + } + + async run({ channel, author, role }, member) { + const embed = new SwitchbladeEmbed(author) + await member.addRole(role) + } +} diff --git a/src/locales/en-US/commands.json b/src/locales/en-US/commands.json index fd06bab57..0d4c58e19 100644 --- a/src/locales/en-US/commands.json +++ b/src/locales/en-US/commands.json @@ -1115,12 +1115,12 @@ "notFound": "User not found.", "noData": "Nothing found.", "title": "{{user}}'s {{top}} in {{period}}", - "top":{ + "top": { "tracks": "top tracks", "albums": "top albums", "artists": "top artists" }, - "period":{ + "period": { "overall": "all time", "7day": "a week", "1month": "a month", @@ -1412,5 +1412,13 @@ "crappydesign": { "commandDescription": "Shows a random image from r/CrappyDesign.", "title": "Here's your crappy design." + }, + "giverole": { + "commandDescription": "Gives a role to the target user", + "commandUsage": " ", + "missingUser": "You have to give me a member to this role!", + "noPermission": "I'm missing the **$t(permissions:MANAGE_ROLES)** permission give this role.", + "successTitle": "Role gived!", + "cantBan": "I can't give this role!" } -} +} \ No newline at end of file From 4d487d1e8f38820eed22ea5aed0d326fcd2d9bef Mon Sep 17 00:00:00 2001 From: Vinicius Estevam Date: Fri, 11 Oct 2019 13:01:37 -0300 Subject: [PATCH 2/5] added role hierarchy --- src/commands/moderation/giverole.js | 20 +++++++++++++++++--- src/locales/en-US/commands.json | 4 +++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/commands/moderation/giverole.js b/src/commands/moderation/giverole.js index f23e23d2c..015b5e0ff 100644 --- a/src/commands/moderation/giverole.js +++ b/src/commands/moderation/giverole.js @@ -1,7 +1,7 @@ const { Command, Constants, SwitchbladeEmbed } = require('../../') module.exports = class Giverole extends Command { - constructor(client) { + constructor (client) { super(client, { name: 'giverole', category: 'moderation', @@ -14,8 +14,22 @@ module.exports = class Giverole extends Command { }) } - async run({ channel, author, role }, member) { + async run({ channel, author, role, t }, member) { const embed = new SwitchbladeEmbed(author) - await member.addRole(role) + await member.addRole(role).then(modifiedMember => { + if(!author.hasPermision('MANAGE_ROLES', false, true, false)) { + if(author.highestRole.comparePositionTo(role) < 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) + if(author.highestRole.comparePositionTo(member.highestRole) < 0) throw new CommandError(t('commands:giverole.roleBelow')) + } + embed + .setTitle(t('commands:giverole.successTitle')) + .setDescription(`${modifiedMember} - \`${role}\``) + }).catch(err =>{ + embed + .setColor(Constants.ERROR_COLOR) + .setTitle(t('commands:giverole.cantGiverole')) + .setDescription(`\`${err}\``) + }) + channel.send(embed) } } diff --git a/src/locales/en-US/commands.json b/src/locales/en-US/commands.json index 0d4c58e19..e89d89a2f 100644 --- a/src/locales/en-US/commands.json +++ b/src/locales/en-US/commands.json @@ -1419,6 +1419,8 @@ "missingUser": "You have to give me a member to this role!", "noPermission": "I'm missing the **$t(permissions:MANAGE_ROLES)** permission give this role.", "successTitle": "Role gived!", - "cantBan": "I can't give this role!" + "cantGiverole": "I can't give this role!", + "roleBelow": "Your role is below this member's", + "roleAboveAuthors": "You have to give me a role below yours!" } } \ No newline at end of file From 53544ba16302894313ca6cdd7c18c0403aba1934 Mon Sep 17 00:00:00 2001 From: Vinicius Estevam Date: Fri, 11 Oct 2019 15:27:09 -0300 Subject: [PATCH 3/5] fix some bugs --- src/commands/moderation/giverole.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/commands/moderation/giverole.js b/src/commands/moderation/giverole.js index 015b5e0ff..08b1f5fdf 100644 --- a/src/commands/moderation/giverole.js +++ b/src/commands/moderation/giverole.js @@ -1,4 +1,4 @@ -const { Command, Constants, SwitchbladeEmbed } = require('../../') +const { Command, CommandError, Constants, SwitchbladeEmbed } = require('../../') module.exports = class Giverole extends Command { constructor (client) { @@ -14,16 +14,16 @@ module.exports = class Giverole extends Command { }) } - async run({ channel, author, role, t }, member) { + async run({ channel, member, author, t }, targetMember, role) { const embed = new SwitchbladeEmbed(author) - await member.addRole(role).then(modifiedMember => { - if(!author.hasPermision('MANAGE_ROLES', false, true, false)) { - if(author.highestRole.comparePositionTo(role) < 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) - if(author.highestRole.comparePositionTo(member.highestRole) < 0) throw new CommandError(t('commands:giverole.roleBelow')) + await targetMember.addRole(role).then(modifiedMember => { + if(!member.hasPermission('ADMINISTRATOR', false, true, false)) { + if(member.highestRole.comparePositionTo(role) <= 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) + if(member.highestRole.comparePositionTo(member.highestRole) <= 0) throw new CommandError(t('commands:giverole.roleBelow')) } embed .setTitle(t('commands:giverole.successTitle')) - .setDescription(`${modifiedMember} - \`${role}\``) + .setDescription(`${modifiedMember} - \`${role.name}\``) }).catch(err =>{ embed .setColor(Constants.ERROR_COLOR) From 69f4a8af230e1ea928cfcdc75dfc40b8b75bd2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Estevam?= Date: Fri, 11 Oct 2019 17:00:28 -0300 Subject: [PATCH 4/5] fix code style --- src/commands/moderation/giverole.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commands/moderation/giverole.js b/src/commands/moderation/giverole.js index 08b1f5fdf..5d3c67f7a 100644 --- a/src/commands/moderation/giverole.js +++ b/src/commands/moderation/giverole.js @@ -14,17 +14,17 @@ module.exports = class Giverole extends Command { }) } - async run({ channel, member, author, t }, targetMember, role) { + async run ({ channel, member, author, t }, targetMember, role) { const embed = new SwitchbladeEmbed(author) await targetMember.addRole(role).then(modifiedMember => { - if(!member.hasPermission('ADMINISTRATOR', false, true, false)) { - if(member.highestRole.comparePositionTo(role) <= 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) - if(member.highestRole.comparePositionTo(member.highestRole) <= 0) throw new CommandError(t('commands:giverole.roleBelow')) + if (!member.hasPermission('ADMINISTRATOR', false, true, false)) { + if (member.highestRole.comparePositionTo(role) <= 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) + if (member.highestRole.comparePositionTo(member.highestRole) <= 0) throw new CommandError(t('commands:giverole.roleBelow')) } embed .setTitle(t('commands:giverole.successTitle')) .setDescription(`${modifiedMember} - \`${role.name}\``) - }).catch(err =>{ + }).catch(err => { embed .setColor(Constants.ERROR_COLOR) .setTitle(t('commands:giverole.cantGiverole')) From 315f08dcb434485f3f5465673a2d2c66c609b3bf Mon Sep 17 00:00:00 2001 From: Aluno Date: Fri, 11 Oct 2019 21:23:34 -0300 Subject: [PATCH 5/5] promise handling with try/catch --- src/commands/moderation/giverole.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/commands/moderation/giverole.js b/src/commands/moderation/giverole.js index 5d3c67f7a..62b11cc85 100644 --- a/src/commands/moderation/giverole.js +++ b/src/commands/moderation/giverole.js @@ -16,20 +16,21 @@ module.exports = class Giverole extends Command { async run ({ channel, member, author, t }, targetMember, role) { const embed = new SwitchbladeEmbed(author) - await targetMember.addRole(role).then(modifiedMember => { + try { if (!member.hasPermission('ADMINISTRATOR', false, true, false)) { if (member.highestRole.comparePositionTo(role) <= 0) throw new CommandError(t('commands:giverole.roleAboveAuthors')) - if (member.highestRole.comparePositionTo(member.highestRole) <= 0) throw new CommandError(t('commands:giverole.roleBelow')) + if (member.highestRole.comparePositionTo(targetMember.highestRole) <= 0) throw new CommandError(t('commands:giverole.roleBelow')) } + await targetMember.addRole(role) embed .setTitle(t('commands:giverole.successTitle')) - .setDescription(`${modifiedMember} - \`${role.name}\``) - }).catch(err => { + .setDescription(`${targetMember} - \`${role.name}\``) + } catch (err) { embed .setColor(Constants.ERROR_COLOR) .setTitle(t('commands:giverole.cantGiverole')) .setDescription(`\`${err}\``) - }) + } channel.send(embed) } }