diff options
author | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2021-08-31 18:45:38 -0400 |
---|---|---|
committer | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2021-08-31 18:45:38 -0400 |
commit | f850b708da87e56f2a1469b65560f8342e2c0f2b (patch) | |
tree | 7f1135f1ecbff3bb1ea467ac2ec500582006dbad /src/commands/admin | |
parent | a47ef150fd38fff3666faccd6f976f660fdbf9f3 (diff) | |
download | tanzanite-f850b708da87e56f2a1469b65560f8342e2c0f2b.tar.gz tanzanite-f850b708da87e56f2a1469b65560f8342e2c0f2b.tar.bz2 tanzanite-f850b708da87e56f2a1469b65560f8342e2c0f2b.zip |
ported roleall and capes command
Diffstat (limited to 'src/commands/admin')
-rw-r--r-- | src/commands/admin/roleAll.ts | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/commands/admin/roleAll.ts b/src/commands/admin/roleAll.ts new file mode 100644 index 0000000..ec18060 --- /dev/null +++ b/src/commands/admin/roleAll.ts @@ -0,0 +1,86 @@ +import { GuildMember, Role } from 'discord.js'; +import { AllowedMentions, BushCommand, BushMessage } from '../../lib'; + +export default class RoleAllCommand extends BushCommand { + public constructor() { + super('roleAll', { + aliases: ['roleall', 'rall'], + category: 'Server Admin', + description: { + content: 'Give a role to every member on the server.', + usage: 'roleAll <role> [another role]... [--bots]', + examples: ['roleAll 783794633129197589 --bots'] + }, + args: [ + { + id: 'role', + type: 'role', + prompt: { + start: 'What role would you like to give to every member on the server?', + retry: '{error} Pick a valid role.' + } + }, + { + id: 'bots', + match: 'flag', + flag: '--bots', + default: false + } + ], + channel: 'guild', + clientPermissions: ['MANAGE_ROLES', 'SEND_MESSAGES'], + userPermissions: ['ADMINISTRATOR'], + typing: true + }); + } + + public override async exec(message: BushMessage, args: { role: Role; bot?: boolean }): Promise<unknown> { + if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a server.`); + if (!message.member!.permissions.has('ADMINISTRATOR')) + return await message.util.reply(`${this.client.util.emojis.error} You must have admin perms to use this command.`); + + if (args.role.comparePositionTo(message.guild.me!.roles.highest) >= 0 && !args.role) { + return await message.util.reply( + `${this.client.util.emojis.error} I cannot assign a role higher or equal to my highest role.` + ); + } + + let members = await message.guild.members.fetch(); + members = members.filter((member: GuildMember) => { + try { + if (member.user.bot && !args.bot) return false; + if (member.roles.cache.has(args.role.id)) return false; + } catch { + return false; + } + return true; + }); + + await message.util.reply(`${this.client.util.emojis.loading} adding roles to ${members.size} members`); + + const promises = members.map((member: GuildMember) => { + return member.roles.add(args.role, `RoleAll Command - triggered by ${message.author.tag} (${message.author.id})`); + }); + + const failed = (await Promise.allSettled(promises)).filter((val) => val.status === 'rejected'); + + if (!failed.length) { + await message.util.reply({ + content: `${this.client.util.emojis.success} Finished adding <@&${args.role.id}> to **${members.size}** member${ + members.size ? 's' : '' + }.`, + allowedMentions: AllowedMentions.none() + }); + } else { + const array = [...members.values()]; + await message.util.reply({ + content: `${this.client.util.emojis.warn} Finished adding <@&${args.role.id}> to **${ + members.size - failed.length + }** member${members.size - failed.length ? 's' : ''}! Failed members:\n${failed + .map((_, index) => `<@${array[index].id}>`) + .join(' ')}`, + allowedMentions: AllowedMentions.none() + }); + } + } +} |