aboutsummaryrefslogtreecommitdiff
path: root/src/commands/admin
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-31 18:45:38 -0400
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-31 18:45:38 -0400
commitf850b708da87e56f2a1469b65560f8342e2c0f2b (patch)
tree7f1135f1ecbff3bb1ea467ac2ec500582006dbad /src/commands/admin
parenta47ef150fd38fff3666faccd6f976f660fdbf9f3 (diff)
downloadtanzanite-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.ts86
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()
+ });
+ }
+ }
+}