diff options
Diffstat (limited to 'packages/gateway/src/commands')
| -rw-r--r-- | packages/gateway/src/commands/delete.ts | 95 | ||||
| -rw-r--r-- | packages/gateway/src/commands/say.ts | 10 |
2 files changed, 89 insertions, 16 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( diff --git a/packages/gateway/src/commands/say.ts b/packages/gateway/src/commands/say.ts index 831fe8c..76a6ec3 100644 --- a/packages/gateway/src/commands/say.ts +++ b/packages/gateway/src/commands/say.ts @@ -1,5 +1,4 @@ import { Message } from "discord.js"; -import { CENTRAL_GUILD_ID } from "../constants"; import { replyWithCleanup } from "../utilities"; export const handleSayCommand = async (message: Message) => { @@ -28,7 +27,7 @@ export const handleSayCommand = async (message: Message) => { let targetChannel: any; let targetMessage: any = null; const channelIdMatch = firstParameter.match(/^\d{17,19}$/); - + if (!channelIdMatch) { await replyWithCleanup( message, @@ -50,12 +49,15 @@ export const handleSayCommand = async (message: Message) => { } const messageIdMatch = secondParameter?.match(/^\d{17,19}$/); - + if (messageIdMatch) { try { targetMessage = await targetChannel.messages.fetch(secondParameter); } catch { - await replyWithCleanup(message, "❌ Message not found in the specified channel."); + await replyWithCleanup( + message, + "❌ Message not found in the specified channel.", + ); return; } |