summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-23 14:41:22 -0700
committerFuwn <[email protected]>2025-10-23 14:41:22 -0700
commit070c381a5fab119a9d2050fc576c86baf8999a0b (patch)
tree9ac3c6dda2178ab9202cb5c3cad48ccf89d624c1
parentfeat(gateway:listeners): Add timeout mirroring (diff)
downloadumabotdiscord-070c381a5fab119a9d2050fc576c86baf8999a0b.tar.xz
umabotdiscord-070c381a5fab119a9d2050fc576c86baf8999a0b.zip
feat(gateway:listeners): Add auto message deletion
-rw-r--r--packages/gateway/src/listeners/autoDeletion.ts73
-rw-r--r--packages/gateway/src/listeners/index.ts2
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);
};