diff options
| author | Fuwn <[email protected]> | 2025-11-07 06:26:32 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-11-07 06:26:32 -0800 |
| commit | 3d632b38db79d2c165c2bdf25708874ecf8ae3c9 (patch) | |
| tree | 2be5db4992dae0d7be41b111c0bc37abaa8952b2 /packages/gateway/src | |
| parent | feat(gateway:listeners): Add text content management system for #nsfw-art (diff) | |
| download | umabotdiscord-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.ts | 45 | ||||
| -rw-r--r-- | packages/gateway/src/listeners/index.ts | 2 |
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); }; |