From 804f1f65c222c79090a248a71d9427ccc0465a61 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 6 Oct 2025 19:47:27 -0700 Subject: feat(gateway): Better gate messageDeletion and messageEdit to performing author --- packages/gateway/src/listeners/messageDeletion.ts | 42 ++++++++++++++++------- packages/gateway/src/listeners/messageEdit.ts | 21 +++++------- 2 files changed, 38 insertions(+), 25 deletions(-) (limited to 'packages/gateway') diff --git a/packages/gateway/src/listeners/messageDeletion.ts b/packages/gateway/src/listeners/messageDeletion.ts index bbd00fe..4e6a315 100644 --- a/packages/gateway/src/listeners/messageDeletion.ts +++ b/packages/gateway/src/listeners/messageDeletion.ts @@ -18,9 +18,34 @@ export const handleMessageDeletion = (client: Client) => { const application = await client.application?.fetch(); const ownerId = application?.owner?.id; - const isBotOrOwner = + const guild = deletedMessage.guild; + const serverOwnerId = guild?.ownerId; + const isPrivilegedAuthor = deletedMessage.author?.id === client.user?.id || - deletedMessage.author?.id === ownerId; + deletedMessage.author?.id === ownerId || + deletedMessage.author?.id === serverOwnerId; + + if (isPrivilegedAuthor) return; + + try { + const auditLogs = await guild?.fetchAuditLogs({ + limit: 1, + type: 72, // MESSAGE_DELETE + }); + const deletionLog = auditLogs?.entries.first(); + + if (deletionLog) { + const deleterId = deletionLog.executor?.id; + const isPrivilegedDeleter = + deleterId === client.user?.id || + deleterId === ownerId || + deleterId === serverOwnerId; + + if (isPrivilegedDeleter) return; + } + } catch (error) { + console.log("Could not fetch audit logs for message deletion"); + } try { const channel = deletedMessage.channel; @@ -31,7 +56,6 @@ export const handleMessageDeletion = (client: Client) => { GUILD_CHANNEL_MAPPINGS[ deletedMessage.guildId as keyof typeof GUILD_CHANNEL_MAPPINGS ]; - const embed = new EmbedBuilder() .setTitle("🗑️ Message Deleted") .setColor("#ff4444") @@ -89,11 +113,7 @@ export const handleMessageDeletion = (client: Client) => { .map((a) => `[${a.name}](${a.url})`) .join("\n").length <= 1024) ) { - if (isBotOrOwner) { - await sendAuditLog(client, embed); - } else { - await sendAuditLog(client, embed, undefined, guildChannelId); - } + await sendAuditLog(client, embed, undefined, guildChannelId); } else { let additionalContent = ""; @@ -109,11 +129,7 @@ export const handleMessageDeletion = (client: Client) => { additionalContent += "### Attachments\n\n" + attachmentList; } - if (isBotOrOwner) { - await sendAuditLog(client, embed, additionalContent); - } else { - await sendAuditLog(client, embed, additionalContent, guildChannelId); - } + await sendAuditLog(client, embed, additionalContent, guildChannelId); } } catch (error) { console.error("Error logging message deletion:", error); diff --git a/packages/gateway/src/listeners/messageEdit.ts b/packages/gateway/src/listeners/messageEdit.ts index f794b44..f099632 100644 --- a/packages/gateway/src/listeners/messageEdit.ts +++ b/packages/gateway/src/listeners/messageEdit.ts @@ -17,9 +17,14 @@ export const handleMessageEdit = (client: Client) => { const application = await client.application?.fetch(); const ownerId = application?.owner?.id; - const isBotOrOwner = + const guild = newMessage.guild; + const serverOwnerId = guild?.ownerId; + const isPrivilegedUser = newMessage.author?.id === client.user?.id || - newMessage.author?.id === ownerId; + newMessage.author?.id === ownerId || + newMessage.author?.id === serverOwnerId; + + if (isPrivilegedUser) return; try { const channel = newMessage.channel; @@ -85,22 +90,14 @@ export const handleMessageEdit = (client: Client) => { if (newContent.length > maxFieldLength) additionalContent += `AFTER:\n${newContent}`; - if (isBotOrOwner) { - await sendAuditLog(client, embed, additionalContent); - } else { - await sendAuditLog(client, embed, additionalContent, guildChannelId); - } + await sendAuditLog(client, embed, additionalContent, guildChannelId); } else { embed.addFields( { name: "Before", value: oldContent, inline: false }, { name: "After", value: newContent, inline: false }, ); - if (isBotOrOwner) { - await sendAuditLog(client, embed); - } else { - await sendAuditLog(client, embed, undefined, guildChannelId); - } + await sendAuditLog(client, embed, undefined, guildChannelId); } } catch (error) { console.error("Error logging message edit:", error); -- cgit v1.2.3