summaryrefslogtreecommitdiff
path: root/packages/gateway/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-11-07 06:26:32 -0800
committerFuwn <[email protected]>2025-11-07 06:26:32 -0800
commit3d632b38db79d2c165c2bdf25708874ecf8ae3c9 (patch)
tree2be5db4992dae0d7be41b111c0bc37abaa8952b2 /packages/gateway/src
parentfeat(gateway:listeners): Add text content management system for #nsfw-art (diff)
downloadumabotdiscord-3d632b38db79d2c165c2bdf25708874ecf8ae3c9.tar.xz
umabotdiscord-3d632b38db79d2c165c2bdf25708874ecf8ae3c9.zip
feat(gateway:listeners): Add image manager for #nsfw-text
Diffstat (limited to 'packages/gateway/src')
-rw-r--r--packages/gateway/src/listeners/imageDeletion.ts45
-rw-r--r--packages/gateway/src/listeners/index.ts2
2 files changed, 47 insertions, 0 deletions
diff --git a/packages/gateway/src/listeners/imageDeletion.ts b/packages/gateway/src/listeners/imageDeletion.ts
new file mode 100644
index 0000000..0a30c2c
--- /dev/null
+++ b/packages/gateway/src/listeners/imageDeletion.ts
@@ -0,0 +1,45 @@
+import { Client, Events, Message } from "discord.js";
+import { logUnexpectedDiscordAPIError } from "../utilities";
+
+const NSFW_TEXT_CHANNEL_ID = "1436346138478383174";
+
+const isGif = (filename: string): boolean => {
+ return filename.toLowerCase().endsWith(".gif");
+};
+
+const isImage = (filename: string): boolean => {
+ const lowerFilename = filename.toLowerCase();
+
+ return (
+ lowerFilename.endsWith(".png") ||
+ lowerFilename.endsWith(".jpg") ||
+ lowerFilename.endsWith(".jpeg") ||
+ lowerFilename.endsWith(".webp") ||
+ lowerFilename.endsWith(".gifv")
+ );
+};
+
+export const handleImageDeletion = (client: Client) => {
+ client.on(Events.MessageCreate, async (message: Message) => {
+ if (message.channelId !== NSFW_TEXT_CHANNEL_ID) return;
+
+ if (message.attachments.size === 0) return;
+
+ const allAttachments = Array.from(message.attachments.values());
+ const hasGif = allAttachments.some((attachment) => isGif(attachment.name));
+
+ if (hasGif) return;
+
+ const hasImages = allAttachments.some((attachment) =>
+ isImage(attachment.name),
+ );
+
+ if (!hasImages) 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 167a68f..0868ae0 100644
--- a/packages/gateway/src/listeners/index.ts
+++ b/packages/gateway/src/listeners/index.ts
@@ -13,6 +13,7 @@ import { handleEmojiUsageTracking } from "./emojiUsageTracking";
import { handleBotMessageLogger } from "./botMessageLogger";
import { handleRoleExclusion } from "./roleExclusion";
import { handleTextContentDeletion } from "./textContentDeletion";
+import { handleImageDeletion } from "./imageDeletion";
// import { handleMediaModeration } from "./mediaModeration";
export const handleListeners = (client: Client) => {
@@ -30,5 +31,6 @@ export const handleListeners = (client: Client) => {
handleBotMessageLogger(client);
handleRoleExclusion(client);
handleTextContentDeletion(client);
+ handleImageDeletion(client);
// handleMediaModeration(client);
};