From 2ab1e0cf77f3c8dafc6d62aa67db2deb140fc86a Mon Sep 17 00:00:00 2001 From: vesaber Date: Sat, 21 Mar 2026 11:01:22 +0100 Subject: [PATCH] fix: check bot permissions before running elevated commands --- utils/CommandHandler.ts | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/utils/CommandHandler.ts b/utils/CommandHandler.ts index de9950d..029449e 100644 --- a/utils/CommandHandler.ts +++ b/utils/CommandHandler.ts @@ -42,21 +42,41 @@ export async function CommandHandler(message: Message) { }); return; } - const member = await guild.fetchMember(message.author.id); - const perms = member.permissions.bitfield; - const missing = command.requireElevated.filter((p) => { + const [member, botMember] = await Promise.all([ + guild.fetchMember(message.author.id), + guild.fetchMember(message.client.user!.id), + ]); + + const userPerms = member.permissions.bitfield; + const botPerms = botMember.permissions.bitfield; + + const missingUser = command.requireElevated.filter((p) => { const bit = PERM_BITS[Permissions[p]]; - return bit !== undefined && (perms & bit) === 0n; + return bit !== undefined && (userPerms & bit) === 0n; }); - if (missing.length > 0) { + if (missingUser.length > 0) { await message.reply({ embeds: [ new EmbedBuilder() .setColor(0x2D8A4E) .setTitle("Permission denied") - .setDescription( - `You need: ${missing.map((p) => Permissions[p]).join(", ")}` - ), + .setDescription(`You need: ${missingUser.map((p) => Permissions[p]).join(", ")}`), + ], + }); + return; + } + + const missingBot = command.requireElevated.filter((p) => { + const bit = PERM_BITS[Permissions[p]]; + return bit !== undefined && (botPerms & bit) === 0n; + }); + if (missingBot.length > 0) { + await message.reply({ + embeds: [ + new EmbedBuilder() + .setColor(0x2D8A4E) + .setTitle("Missing bot permissions") + .setDescription(`The bot needs: ${missingBot.map((p) => Permissions[p]).join(", ")}`), ], }); return;