aboutsummaryrefslogtreecommitdiff
path: root/src/commands/moderation/untimeout.ts
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-12-30 16:55:37 -0500
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-12-30 16:55:37 -0500
commit83db032fb91996c926a5d007a9e5fa4abed65871 (patch)
tree28081718636b6c41aea89018504f3f7e4f837903 /src/commands/moderation/untimeout.ts
parentf0a9f894575871d498447c5de2b5f0f826b117b7 (diff)
downloadtanzanite-83db032fb91996c926a5d007a9e5fa4abed65871.tar.gz
tanzanite-83db032fb91996c926a5d007a9e5fa4abed65871.tar.bz2
tanzanite-83db032fb91996c926a5d007a9e5fa4abed65871.zip
add timeout command and fix some other moderation commands
Diffstat (limited to 'src/commands/moderation/untimeout.ts')
-rw-r--r--src/commands/moderation/untimeout.ts100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/commands/moderation/untimeout.ts b/src/commands/moderation/untimeout.ts
new file mode 100644
index 0000000..b5ea5be
--- /dev/null
+++ b/src/commands/moderation/untimeout.ts
@@ -0,0 +1,100 @@
+import {
+ AllowedMentions,
+ BushCommand,
+ Moderation,
+ type ArgType,
+ type BushMessage,
+ type BushSlashMessage,
+ type OptionalArgType
+} from '#lib';
+import assert from 'assert';
+
+export default class UntimeoutCommand extends BushCommand {
+ public constructor() {
+ super('untimeout', {
+ aliases: ['untimeout', 'remove-timeout'],
+ category: 'moderation',
+ description: 'Removes a timeout from a user.',
+ usage: ['untimeout <user> [reason]'],
+ examples: ['untimeout 1 2'],
+ args: [
+ {
+ id: 'user',
+ description: 'The user to remove a timeout from.',
+ type: 'user',
+ prompt: 'What user would you like to untimeout?',
+ retry: '{error} Choose a valid user to untimeout.',
+ slashType: 'USER'
+ },
+ {
+ id: 'reason',
+ description: 'The reason for removing the timeout.',
+ type: 'string',
+ match: 'rest',
+ prompt: 'Why should this user have their timeout removed?',
+ retry: '{error} Choose a valid reason to remove the timeout.',
+ slashType: 'STRING',
+ optional: true
+ },
+ {
+ id: 'force',
+ description: 'Override permission checks.',
+ flag: '--force',
+ match: 'flag',
+ optional: true,
+ slashType: false,
+ only: 'text',
+ ownerOnly: true
+ }
+ ],
+ slash: true,
+ channel: 'guild',
+ clientPermissions: (m) => util.clientSendAndPermCheck(m, ['MODERATE_MEMBERS']),
+ userPermissions: ['MODERATE_MEMBERS']
+ });
+ }
+
+ public override async exec(
+ message: BushMessage | BushSlashMessage,
+ args: { user: ArgType<'user'>; reason: OptionalArgType<'string'>; force?: ArgType<'boolean'> }
+ ) {
+ assert(message.member);
+
+ const member = await message.guild!.members.fetch(args.user.id).catch(() => null);
+ if (!member)
+ return await message.util.reply(`${util.emojis.error} The user you selected is not in the server or is not a valid user.`);
+
+ if (!member.isCommunicationDisabled()) return message.util.reply(`${util.emojis.error} That user is not timed out.`);
+
+ const useForce = args.force && message.author.isOwner();
+ const canModerateResponse = await Moderation.permissionCheck(message.member, member, 'timeout', true, useForce);
+
+ if (canModerateResponse !== true) {
+ return message.util.reply(canModerateResponse);
+ }
+
+ const responseCode = await member.bushRemoveTimeout({
+ reason: args.reason ?? undefined,
+ moderator: message.member
+ });
+
+ const responseMessage = (): string => {
+ const victim = util.format.input(member.user.tag);
+ switch (responseCode) {
+ case 'missing permissions':
+ return `${util.emojis.error} Could not timeout ${victim} because I am missing the **Timeout Members** permission.`;
+ case 'duration too long':
+ return `${util.emojis.error} The duration you specified is too long, the longest you can timeout someone for is 28 days.`;
+ case 'error removing timeout':
+ return `${util.emojis.error} An unknown error occurred while trying to timeout ${victim}.`;
+ case 'error creating modlog entry':
+ return `${util.emojis.error} There was an error creating a modlog entry, please report this to my developers.`;
+ case 'failed to dm':
+ return `${util.emojis.warn} Timed out ${victim} however I could not send them a dm.`;
+ case 'success':
+ return `${util.emojis.success} Successfully timed out ${victim}.`;
+ }
+ };
+ return await message.util.reply({ content: responseMessage(), allowedMentions: AllowedMentions.none() });
+ }
+}