| 73 | } |
| 74 | |
| 75 | async remove(msg, [target = msg.member, ...roleName]) { |
| 76 | // Fail if there are no joinable roles |
| 77 | if (!msg.guild.settings.get('roles.joinable').length) return msg.reject(msg.language.get('COMMAND_ROLES_NONE_JOINABLE')); |
| 78 | if (!roleName.length) return msg.reject(msg.language.get('COMMAND_ROLES_NO_ROLE_NAME')); |
| 79 | |
| 80 | if (target.id !== msg.member.id) { |
| 81 | // Fail if user is not at least a moderator and is trying to add roles to other users |
| 82 | if (!msg.hasAtLeastPermissionLevel(5) || !msg.member.permissions.has('MANAGE_ROLES')) return msg.reject(msg.language.get('COMMAND_ROLES_NO_MODERATE')); |
| 83 | |
| 84 | const canMod = await msg.member.canMod(target.user); |
| 85 | |
| 86 | // Fail if user is trying to add roles to someone higher on the hierarchy than themself |
| 87 | if (!canMod) return msg.reject(msg.language.get('COMMAND_ROLES_NO_PERMS', target)); |
| 88 | } |
| 89 | |
| 90 | // Parsing the roleName array into a string |
| 91 | roleName = roleName.join(' '); |
| 92 | |
| 93 | // Fail if there is no role with this name |
| 94 | if (!msg.guild.roles.cache.find(role => role.name.toLowerCase() === roleName.toLowerCase())) return msg.reject(msg.language.get('COMMAND_ROLES_DOES_NOT_EXIST', roleName)); |
| 95 | |
| 96 | // Fetching role specified by the user |
| 97 | const targetRole = await msg.guild.roles.cache.find(role => role.name.toLowerCase() === roleName.toLowerCase()); |
| 98 | |
| 99 | // Fail if this role isn't joinable (or leavable) |
| 100 | if (!msg.guild.settings.get('roles.joinable').includes(targetRole.id)) return msg.reject(msg.language.get('COMMAND_ROLES_NOT_LEAVABLE', roleName)); |
| 101 | |
| 102 | // Fail if target does not have this role |
| 103 | if (!target.roles.cache.has(targetRole.id)) return msg.reject(msg.language.get('COMMAND_ROLES_DOES_NOT_HAVE', roleName, target)); |
| 104 | |
| 105 | // Remove the role from the target |
| 106 | await target.roles.remove(targetRole); |
| 107 | return msg.affirm(); |
| 108 | } |
| 109 | |
| 110 | async join(msg, params) { |
| 111 | return this.add(msg, params); |