diff options
| author | Fuwn <[email protected]> | 2025-10-08 14:10:59 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-10-08 14:10:59 -0700 |
| commit | 049f4088b9d4fe111597ce27ec4b2ea2a2535211 (patch) | |
| tree | 7476b02d7f08c5ab7e42ddab4035ae07977ff4f4 /packages/gateway/src/commands/delete.ts | |
| parent | feat(gateway:messageCreate): Disable botMentionAutoDelete (diff) | |
| download | umabotdiscord-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.ts | 95 |
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( |