From f850b708da87e56f2a1469b65560f8342e2c0f2b Mon Sep 17 00:00:00 2001
From: IRONM00N <64110067+IRONM00N@users.noreply.github.com>
Date: Tue, 31 Aug 2021 18:45:38 -0400
Subject: ported roleall and capes command

---
 src/commands/admin/roleAll.ts | 86 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 src/commands/admin/roleAll.ts

(limited to 'src/commands/admin')

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()
+			});
+		}
+	}
+}
-- 
cgit