diff options
| author | Fuwn <[email protected]> | 2025-10-23 14:41:22 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-10-23 14:41:22 -0700 |
| commit | 070c381a5fab119a9d2050fc576c86baf8999a0b (patch) | |
| tree | 9ac3c6dda2178ab9202cb5c3cad48ccf89d624c1 | |
| parent | feat(gateway:listeners): Add timeout mirroring (diff) | |
| download | umabotdiscord-070c381a5fab119a9d2050fc576c86baf8999a0b.tar.xz umabotdiscord-070c381a5fab119a9d2050fc576c86baf8999a0b.zip | |
feat(gateway:listeners): Add auto message deletion
| -rw-r--r-- | packages/gateway/src/listeners/autoDeletion.ts | 73 | ||||
| -rw-r--r-- | packages/gateway/src/listeners/index.ts | 2 |
2 files changed, 75 insertions, 0 deletions
diff --git a/packages/gateway/src/listeners/autoDeletion.ts b/packages/gateway/src/listeners/autoDeletion.ts new file mode 100644 index 0000000..bf503e1 --- /dev/null +++ b/packages/gateway/src/listeners/autoDeletion.ts @@ -0,0 +1,73 @@ +import { Client, Events, Message } from "discord.js"; +import { CENTRAL_GUILD_ID, ROLEPLAY_GUILD_ID } from "../constants"; +import { logUnexpectedDiscordAPIError } from "../utilities"; + +const BANNED_STRINGS = ["@https://cdn.miki.bot/ext/imgh/1dGU5ggsHZ.gif"]; + +const containsBannedString = (message: Message): boolean => { + const content = message.content.toLowerCase(); + + for (const bannedString of BANNED_STRINGS) + if (content.includes(bannedString.toLowerCase())) return true; + + for (const embed of message.embeds) + for (const bannedString of BANNED_STRINGS) { + if ( + embed.title && + embed.title.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + + if ( + embed.description && + embed.description.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + + for (const field of embed.fields) { + if ( + field.name && + field.name.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + + if ( + field.value && + field.value.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + } + + if ( + embed.footer?.text && + embed.footer.text.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + + if ( + embed.author?.name && + embed.author.name.toLowerCase().includes(bannedString.toLowerCase()) + ) + return true; + } + + return false; +}; + +export const handleAutoDeletion = (client: Client) => { + client.on(Events.MessageCreate, async (message: Message) => { + if ( + message.guildId !== CENTRAL_GUILD_ID && + message.guildId !== ROLEPLAY_GUILD_ID + ) + return; + + if (!containsBannedString(message)) return; + + try { + await message.delete(); + } catch (error) { + logUnexpectedDiscordAPIError(error); + } + }); +}; diff --git a/packages/gateway/src/listeners/index.ts b/packages/gateway/src/listeners/index.ts index 76ffb42..7547d4f 100644 --- a/packages/gateway/src/listeners/index.ts +++ b/packages/gateway/src/listeners/index.ts @@ -7,6 +7,7 @@ import { handleMessageEdit } from "./messageEdit"; import { handleClientReady } from "./clientReady"; import { handleMemberJoin } from "./memberJoin"; import { handleTimeoutMirroring } from "./timeoutMirroring"; +import { handleAutoDeletion } from "./autoDeletion"; // import { handleMediaModeration } from "./mediaModeration"; export const handleListeners = (client: Client) => { @@ -18,5 +19,6 @@ export const handleListeners = (client: Client) => { handleMessageEdit(client); handleMemberJoin(client); handleTimeoutMirroring(client); + handleAutoDeletion(client); // handleMediaModeration(client); }; |