From 210678c5f4391b4f5959bd2664d38a0222cbdbe3 Mon Sep 17 00:00:00 2001
From: IRONM00N <64110067+IRONM00N@users.noreply.github.com>
Date: Wed, 25 May 2022 17:06:02 -0400
Subject: feat: add command locking

---
 src/commands/admin/channelPermissions.ts |  3 ++-
 src/commands/admin/roleAll.ts            |  3 ++-
 src/commands/moderation/block.ts         |  3 ++-
 src/commands/moderation/lockdown.ts      |  3 ++-
 src/commands/moderation/massBan.ts       |  3 ++-
 src/listeners/commands/commandLocked.ts  | 17 +++++++++++++++++
 6 files changed, 27 insertions(+), 5 deletions(-)
 create mode 100644 src/listeners/commands/commandLocked.ts

(limited to 'src')

diff --git a/src/commands/admin/channelPermissions.ts b/src/commands/admin/channelPermissions.ts
index c06b5fa..dac7117 100644
--- a/src/commands/admin/channelPermissions.ts
+++ b/src/commands/admin/channelPermissions.ts
@@ -51,7 +51,8 @@ export default class ChannelPermissionsCommand extends BushCommand {
 			clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.ManageChannels]),
 			userPermissions: [PermissionFlagsBits.Administrator],
 			channel: 'guild',
-			slash: true
+			slash: true,
+			lock: 'guild'
 		});
 	}
 
diff --git a/src/commands/admin/roleAll.ts b/src/commands/admin/roleAll.ts
index cc5e7b4..fdf153a 100644
--- a/src/commands/admin/roleAll.ts
+++ b/src/commands/admin/roleAll.ts
@@ -33,7 +33,8 @@ export default class RoleAllCommand extends BushCommand {
 			clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.ManageRoles]),
 			userPermissions: [PermissionFlagsBits.Administrator],
 			typing: true,
-			slash: true
+			slash: true,
+			lock: 'guild'
 		});
 	}
 
diff --git a/src/commands/moderation/block.ts b/src/commands/moderation/block.ts
index e6f7849..554ef2b 100644
--- a/src/commands/moderation/block.ts
+++ b/src/commands/moderation/block.ts
@@ -52,7 +52,8 @@ export default class BlockCommand extends BushCommand {
 			slash: true,
 			channel: 'guild',
 			clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.ManageChannels]),
-			userPermissions: (m) => util.userGuildPermCheck(m, [PermissionFlagsBits.ManageMessages])
+			userPermissions: (m) => util.userGuildPermCheck(m, [PermissionFlagsBits.ManageMessages]),
+			lock: 'channel'
 		});
 	}
 
diff --git a/src/commands/moderation/lockdown.ts b/src/commands/moderation/lockdown.ts
index 3e4f05b..36f3240 100644
--- a/src/commands/moderation/lockdown.ts
+++ b/src/commands/moderation/lockdown.ts
@@ -59,7 +59,8 @@ export default class LockdownCommand extends BushCommand {
 			slash: true,
 			channel: 'guild',
 			clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.ManageChannels]),
-			userPermissions: [PermissionFlagsBits.ManageChannels]
+			userPermissions: [PermissionFlagsBits.ManageChannels],
+			lock: 'channel'
 		});
 	}
 
diff --git a/src/commands/moderation/massBan.ts b/src/commands/moderation/massBan.ts
index faea94b..568b6be 100644
--- a/src/commands/moderation/massBan.ts
+++ b/src/commands/moderation/massBan.ts
@@ -55,7 +55,8 @@ export default class MassBanCommand extends BushCommand {
 			slash: true,
 			channel: 'guild',
 			clientPermissions: (m) => util.clientSendAndPermCheck(m),
-			userPermissions: [PermissionFlagsBits.BanMembers]
+			userPermissions: [PermissionFlagsBits.BanMembers],
+			lock: 'user'
 		});
 	}
 
diff --git a/src/listeners/commands/commandLocked.ts b/src/listeners/commands/commandLocked.ts
new file mode 100644
index 0000000..285eb50
--- /dev/null
+++ b/src/listeners/commands/commandLocked.ts
@@ -0,0 +1,17 @@
+import { BushListener, type BushCommandHandlerEvents } from '#lib';
+
+export default class CommandLockedListener extends BushListener {
+	public constructor() {
+		super('commandLocked', {
+			emitter: 'commandHandler',
+			event: 'commandLocked',
+			category: 'commands'
+		});
+	}
+
+	public override async exec(...[message, command]: BushCommandHandlerEvents['commandLocked']) {
+		return message.util.reply(
+			`${util.emojis.error} You cannot use the ${util.format.input(command.id)} command because it is already in use.`
+		);
+	}
+}
-- 
cgit