summaryrefslogtreecommitdiff
path: root/packages/gateway/src/commands/delete.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-08 14:10:59 -0700
committerFuwn <[email protected]>2025-10-08 14:10:59 -0700
commit049f4088b9d4fe111597ce27ec4b2ea2a2535211 (patch)
tree7476b02d7f08c5ab7e42ddab4035ae07977ff4f4 /packages/gateway/src/commands/delete.ts
parentfeat(gateway:messageCreate): Disable botMentionAutoDelete (diff)
downloadumabotdiscord-049f4088b9d4fe111597ce27ec4b2ea2a2535211.tar.xz
umabotdiscord-049f4088b9d4fe111597ce27ec4b2ea2a2535211.zip
feat(gateway:delete): Bulk delete support
Diffstat (limited to 'packages/gateway/src/commands/delete.ts')
-rw-r--r--packages/gateway/src/commands/delete.ts95
1 files changed, 83 insertions, 12 deletions
diff --git a/packages/gateway/src/commands/delete.ts b/packages/gateway/src/commands/delete.ts
index 3d01455..bdbe585 100644
--- a/packages/gateway/src/commands/delete.ts
+++ b/packages/gateway/src/commands/delete.ts
@@ -66,24 +66,95 @@ export const handleDeleteCommand = async (message: Message) => {
}
try {
- let failedCount = 0;
-
- for (const messageId of messageIds) {
+ if (messageIds.length > 1) {
+ try {
+ const messagesToDelete = [];
+ let failedFetchCount = 0;
+
+ for (const messageId of messageIds)
+ try {
+ const targetMessage =
+ await targetChannel.messages.fetch(messageId);
+
+ messagesToDelete.push(targetMessage);
+ } catch {
+ failedFetchCount += 1;
+ }
+
+ if (messagesToDelete.length === 0) {
+ await message.reply("❌ No valid messages found to delete.");
+
+ return;
+ }
+
+ if ("bulkDelete" in targetChannel && messagesToDelete.length > 1) {
+ try {
+ await targetChannel.bulkDelete(messagesToDelete);
+ await message.delete();
+
+ if (failedFetchCount > 0)
+ console.warn(
+ `Failed to fetch ${failedFetchCount} out of ${messageIds.length} messages for bulk delete`,
+ );
+ } catch (bulkError) {
+ console.warn(
+ "Bulk delete failed, falling back to individual deletion:",
+ bulkError,
+ );
+
+ let failedDeleteCount = 0;
+
+ for (const message of messagesToDelete)
+ try {
+ await message.delete();
+ } catch {
+ failedDeleteCount += 1;
+ }
+
+ await message.delete();
+
+ if (failedDeleteCount > 0 || failedFetchCount > 0)
+ console.warn(
+ `Failed to delete ${failedDeleteCount} messages and fetch ${failedFetchCount} messages`,
+ );
+ }
+ } else {
+ let failedDeleteCount = 0;
+
+ for (const message of messagesToDelete)
+ try {
+ await message.delete();
+ } catch {
+ failedDeleteCount += 1;
+ }
+
+ await message.delete();
+
+ if (failedDeleteCount > 0 || failedFetchCount > 0)
+ console.warn(
+ `Failed to delete ${failedDeleteCount} messages and fetch ${failedFetchCount} messages`,
+ );
+ }
+ } catch (error) {
+ console.error("Error in bulk delete process:", error);
+ await message.reply(
+ "❌ Failed to delete messages. Check bot permissions and try again.",
+ );
+ }
+ } else {
try {
- const targetMessage = await targetChannel.messages.fetch(messageId);
+ const targetMessage = await targetChannel.messages.fetch(
+ messageIds[0],
+ );
await targetMessage.delete();
+ await message.delete();
} catch {
- failedCount += 1;
+ await message.reply(
+ "❌ Failed to delete message. Check bot permissions and try again.",
+ );
}
}
-
- await message.delete();
-
- if (failedCount > 0)
- console.warn(
- `Failed to delete ${failedCount} out of ${messageIds.length} messages`,
- );
} catch (error) {
console.error("Error deleting messages:", error);
await message.reply(