From 539025f2d4b7a97e5eabb49b46f15d8ad438c1c8 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Mon, 14 Apr 2025 19:53:11 +0700 Subject: [PATCH] chore(bots/discord): separate discord `ready` event handlers --- bots/discord/src/events/discord/ready/log.ts | 6 +++ .../discord/ready/removeExpiredPresets.ts | 43 +++++++++++++++++++ .../{ready.ts => ready/stickyMessageSetup.ts} | 43 ------------------- 3 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 bots/discord/src/events/discord/ready/log.ts create mode 100644 bots/discord/src/events/discord/ready/removeExpiredPresets.ts rename bots/discord/src/events/discord/{ready.ts => ready/stickyMessageSetup.ts} (61%) diff --git a/bots/discord/src/events/discord/ready/log.ts b/bots/discord/src/events/discord/ready/log.ts new file mode 100644 index 0000000..726ddc6 --- /dev/null +++ b/bots/discord/src/events/discord/ready/log.ts @@ -0,0 +1,6 @@ +import { on, withContext } from '$/utils/discord/events' + +export default withContext(on, 'ready', async ({ logger }, client) => { + logger.info(`Connected to Discord API, logged in as ${client.user.displayName} (@${client.user.tag})!`) + logger.info(`Bot is in ${client.guilds.cache.size} guilds`) +}) diff --git a/bots/discord/src/events/discord/ready/removeExpiredPresets.ts b/bots/discord/src/events/discord/ready/removeExpiredPresets.ts new file mode 100644 index 0000000..f956a18 --- /dev/null +++ b/bots/discord/src/events/discord/ready/removeExpiredPresets.ts @@ -0,0 +1,43 @@ +import { database, logger } from '$/context' +import { appliedPresets } from '$/database/schemas' +import { on, withContext } from '$/utils/discord/events' +import { removeRolePreset } from '$/utils/discord/rolePresets' +import { and, eq, lt } from 'drizzle-orm' + +import { type Client, DiscordAPIError } from 'discord.js' + +export default withContext(on, 'ready', async ({ config }, client) => { + if (config.rolePresets) { + removeExpiredPresets(client) + setTimeout(() => removeExpiredPresets(client), config.rolePresets.checkExpiredEvery) + } +}) + +async function removeExpiredPresets(client: Client) { + logger.debug('Checking for expired role presets...') + + const expireds = await database.query.appliedPresets.findMany({ + where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)), + }) + + for (const expired of expireds) { + try { + logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`) + + const guild = await client.guilds.fetch(expired.guildId) + const member = await guild.members.fetch(expired.memberId) + + await removeRolePreset(member, expired.preset) + } catch (e) { + // Unknown Member: https://discord.com/developers/docs/topics/opcodes-and-status-codes#json + if (!(e instanceof DiscordAPIError) || e.code !== 10007) { + logger.error(`Error while removing role preset for ${expired.memberId} in ${expired.guildId}: ${e}`) + continue + } + } + + await database + .delete(appliedPresets) + .where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId))) + } +} diff --git a/bots/discord/src/events/discord/ready.ts b/bots/discord/src/events/discord/ready/stickyMessageSetup.ts similarity index 61% rename from bots/discord/src/events/discord/ready.ts rename to bots/discord/src/events/discord/ready/stickyMessageSetup.ts index df573cc..ef9521f 100644 --- a/bots/discord/src/events/discord/ready.ts +++ b/bots/discord/src/events/discord/ready/stickyMessageSetup.ts @@ -1,16 +1,7 @@ -import { database, logger } from '$/context' -import { appliedPresets } from '$/database/schemas' import { applyCommonEmbedStyles } from '$/utils/discord/embeds' import { on, withContext } from '$/utils/discord/events' -import { removeRolePreset } from '$/utils/discord/rolePresets' -import { and, eq, lt } from 'drizzle-orm' - -import { type Client, DiscordAPIError } from 'discord.js' export default withContext(on, 'ready', async ({ config, discord, logger }, client) => { - logger.info(`Connected to Discord API, logged in as ${client.user.displayName} (@${client.user.tag})!`) - logger.info(`Bot is in ${client.guilds.cache.size} guilds`) - if (config.stickyMessages) for (const [guildId, channels] of Object.entries(config.stickyMessages)) { const guild = await client.guilds.fetch(guildId) @@ -68,38 +59,4 @@ export default withContext(on, 'ready', async ({ config, discord, logger }, clie await send() } } - - if (config.rolePresets) { - removeExpiredPresets(client) - setTimeout(() => removeExpiredPresets(client), config.rolePresets.checkExpiredEvery) - } }) - -const removeExpiredPresets = async (client: Client) => { - logger.debug('Checking for expired role presets...') - - const expireds = await database.query.appliedPresets.findMany({ - where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)), - }) - - for (const expired of expireds) { - try { - logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`) - - const guild = await client.guilds.fetch(expired.guildId) - const member = await guild.members.fetch(expired.memberId) - - await removeRolePreset(member, expired.preset) - } catch (e) { - // Unknown Member: https://discord.com/developers/docs/topics/opcodes-and-status-codes#json - if (!(e instanceof DiscordAPIError) || e.code !== 10007) { - logger.error(`Error while removing role preset for ${expired.memberId} in ${expired.guildId}: ${e}`) - continue - } - } - - await database - .delete(appliedPresets) - .where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId))) - } -}