diff options
Diffstat (limited to 'packages')
3 files changed, 88 insertions, 78 deletions
diff --git a/packages/gateway/src/listeners/clientReady/umagramCatchup.ts b/packages/gateway/src/listeners/clientReady/umagramCatchup.ts index 13564e6..f6b7870 100644 --- a/packages/gateway/src/listeners/clientReady/umagramCatchup.ts +++ b/packages/gateway/src/listeners/clientReady/umagramCatchup.ts @@ -1,88 +1,90 @@ import { Client } from "discord.js"; -import { GUILD_ID } from "../../constants"; -import { ROLEPLAY_UMAGRAM_CHANNEL_ID } from "../constants"; -export const handleUmagramCatchup = async (client: Client) => { - try { - const channel = client.channels.cache.get(ROLEPLAY_UMAGRAM_CHANNEL_ID); - - if ( - !channel || - !channel.isTextBased() || - !("guildId" in channel) || - channel.guildId !== GUILD_ID - ) - return; - - const processChannelMessages = async ( - targetChannel: any, - channelName: string, - ) => { - let lastMessageId: string | undefined; - let messageCount = 0; - let heartCount = 0; - - while (true) { - const messages = await targetChannel.messages.fetch({ - limit: 100, - before: lastMessageId, - }); - - if (messages.size === 0) break; - - for (const message of messages.values()) { - messageCount += 1; - - const existingReaction = message.reactions.cache.get("❤️"); - - if ( - existingReaction && - existingReaction.users.cache.has(client.user!.id) - ) - continue; - - try { - await message.react("❤️"); - - heartCount += 1; - - await new Promise((resolve) => setTimeout(resolve, 100)); - } catch (error) { - console.error( - `Failed to heart message ${message.id} in ${channelName}:`, - error, - ); - } - } +const GUILD_UMAGRAM_CHANNELS = { + "1406422617724026901": "1419523288001937458", // Central guild + "1423919136974835782": "1423923190953934960", // Roleplay guild +} as const; - lastMessageId = messages.last()?.id; +const processUmagramChannel = async (client: Client, guildId: string, channelId: string) => { + const channel = client.channels.cache.get(channelId); - await new Promise((resolve) => setTimeout(resolve, 500)); - } + if (!channel || !channel.isTextBased() || !("guildId" in channel) || channel.guildId !== guildId) return; + + const processChannelMessages = async ( + targetChannel: any, + channelName: string, + ) => { + let lastMessageId: string | undefined; + let messageCount = 0; + let heartCount = 0; + + while (true) { + const messages = await targetChannel.messages.fetch({ + limit: 100, + before: lastMessageId, + }); - return { messageCount, heartCount }; - }; + if (messages.size === 0) break; - await processChannelMessages(channel, "Main Channel"); + for (const message of messages.values()) { + messageCount += 1; - try { - const activeThreads = await (channel as any).threads?.fetchActive(); - const archivedThreads = await (channel as any).threads?.fetchArchived(); - const allThreads = [ - ...activeThreads.threads.values(), - ...archivedThreads.threads.values(), - ]; + const existingReaction = message.reactions.cache.get("❤️"); + + if ( + existingReaction && + existingReaction.users.cache.has(client.user!.id) + ) + continue; - for (const thread of allThreads) try { - await processChannelMessages(thread, `Thread: ${thread.name}`); + await message.react("❤️"); + + heartCount += 1; + + await new Promise((resolve) => setTimeout(resolve, 100)); } catch (error) { - console.error(`Error processing thread ${thread.name}:`, error); + console.error( + `Failed to heart message ${message.id} in ${channelName}:`, + error, + ); } - } catch (error) { - console.error("Error fetching threads:", error); + } + + lastMessageId = messages.last()?.id; + + await new Promise((resolve) => setTimeout(resolve, 500)); } + + return { messageCount, heartCount }; + }; + + await processChannelMessages(channel, `Guild ${guildId} - Main Channel`); + + try { + const activeThreads = await (channel as any).threads?.fetchActive(); + const archivedThreads = await (channel as any).threads?.fetchArchived(); + const allThreads = [ + ...activeThreads.threads.values(), + ...archivedThreads.threads.values(), + ]; + + for (const thread of allThreads) + try { + await processChannelMessages(thread, `Guild ${guildId} - Thread: ${thread.name}`); + } catch (error) { + console.error(`Error processing thread ${thread.name}:`, error); + } } catch (error) { - console.error("Error adding hearts to existing messages:", error); + console.error("Error fetching threads:", error); } }; + +export const handleUmagramCatchup = async (client: Client) => { + try { + for (const [guildId, channelId] of Object.entries(GUILD_UMAGRAM_CHANNELS)) + await processUmagramChannel(client, guildId, channelId); + } catch (error) { + console.error("Error adding hearts to existing messages:", error); + } +};
\ No newline at end of file diff --git a/packages/gateway/src/listeners/messageCreate/index.ts b/packages/gateway/src/listeners/messageCreate/index.ts index 1fb185f..f8da232 100644 --- a/packages/gateway/src/listeners/messageCreate/index.ts +++ b/packages/gateway/src/listeners/messageCreate/index.ts @@ -9,11 +9,12 @@ import { handleAICommand } from "./aiCommandHandler"; export const handleMessageCreate = (client: Client) => { client.on(Events.MessageCreate, async (message: Message) => { + await handleRoleplayUmagram(message); + if (message.guildId !== GUILD_ID) return; await Promise.allSettled([ handleIqdbModeration(message), - handleRoleplayUmagram(message), // handleArtMediaModeration(message), handleAnnouncementReaction(message), handleRoleMentionCooldown(message), diff --git a/packages/gateway/src/listeners/messageCreate/roleplayUmagram.ts b/packages/gateway/src/listeners/messageCreate/roleplayUmagram.ts index 31ab60b..9ed6e2a 100644 --- a/packages/gateway/src/listeners/messageCreate/roleplayUmagram.ts +++ b/packages/gateway/src/listeners/messageCreate/roleplayUmagram.ts @@ -1,11 +1,18 @@ import { Message } from "discord.js"; -import { ROLEPLAY_UMAGRAM_CHANNEL_ID } from "../constants"; + +const GUILD_UMAGRAM_CHANNELS = { + "1406422617724026901": "1419523288001937458", // Central guild + "1423919136974835782": "1423923190953934960", // Roleplay guild +} as const; export const handleRoleplayUmagram = async (message: Message) => { - const isMainChannel = message.channelId === ROLEPLAY_UMAGRAM_CHANNEL_ID; + if (!message.guildId || !(message.guildId in GUILD_UMAGRAM_CHANNELS)) return; + + const umagramChannelId = GUILD_UMAGRAM_CHANNELS[message.guildId as keyof typeof GUILD_UMAGRAM_CHANNELS]; + const isMainChannel = message.channelId === umagramChannelId; const isThreadInChannel = message.channel?.isThread() && - message.channel.parentId === ROLEPLAY_UMAGRAM_CHANNEL_ID; + message.channel.parentId === umagramChannelId; if (!isMainChannel && !isThreadInChannel) return; @@ -27,7 +34,7 @@ export const handleRoleplayUmagram = async (message: Message) => { await message.delete(); const errorMessage = await (message.channel as any).send( - `${message.author}, to participate in <#${ROLEPLAY_UMAGRAM_CHANNEL_ID}>, you can either:\n\n- **Post**: Send a message with both a brief caption **and** an image attachment\n- **Reply**: Reply to someone else's post (no image needed)\n - Reply with a thread (suggested)\n - Reply directly with a message\n\nThis message will be deleted in 30 seconds.`, + `${message.author}, to participate in <#${umagramChannelId}>, you can either:\n\n- **Post**: Send a message with both a brief caption **and** an image attachment\n- **Reply**: Reply to someone else's post (no image needed)\n - Reply with a thread (suggested)\n - Reply directly with a message\n\nThis message will be deleted in 30 seconds.`, ); setTimeout(async () => { |