fix(bots/discord): remove expired presets from db if unapplying is not possible

This commit is contained in:
PalmDevs
2025-04-14 19:49:06 +07:00
parent aa7501c309
commit 9d705e580c

View File

@@ -5,7 +5,7 @@ import { on, withContext } from '$/utils/discord/events'
import { removeRolePreset } from '$/utils/discord/rolePresets' import { removeRolePreset } from '$/utils/discord/rolePresets'
import { and, eq, lt } from 'drizzle-orm' import { and, eq, lt } from 'drizzle-orm'
import type { Client } from 'discord.js' import { type Client, DiscordAPIError } from 'discord.js'
export default withContext(on, 'ready', async ({ config, discord, logger }, client) => { 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(`Connected to Discord API, logged in as ${client.user.displayName} (@${client.user.tag})!`)
@@ -82,7 +82,7 @@ const removeExpiredPresets = async (client: Client) => {
where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)), where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)),
}) })
for (const expired of expireds) for (const expired of expireds) {
try { try {
logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`) logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`)
@@ -90,10 +90,16 @@ const removeExpiredPresets = async (client: Client) => {
const member = await guild.members.fetch(expired.memberId) const member = await guild.members.fetch(expired.memberId)
await removeRolePreset(member, expired.preset) 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 await database
.delete(appliedPresets) .delete(appliedPresets)
.where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId))) .where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId)))
} catch (e) {
logger.error(`Error while removing role preset for ${expired.memberId} in ${expired.guildId}: ${e}`)
} }
} }