Skip to content

Commit 539025f

Browse files
committed
chore(bots/discord): separate discord ready event handlers
1 parent 9d705e5 commit 539025f

File tree

3 files changed

+49
-43
lines changed

3 files changed

+49
-43
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { on, withContext } from '$/utils/discord/events'
2+
3+
export default withContext(on, 'ready', async ({ logger }, client) => {
4+
logger.info(`Connected to Discord API, logged in as ${client.user.displayName} (@${client.user.tag})!`)
5+
logger.info(`Bot is in ${client.guilds.cache.size} guilds`)
6+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { database, logger } from '$/context'
2+
import { appliedPresets } from '$/database/schemas'
3+
import { on, withContext } from '$/utils/discord/events'
4+
import { removeRolePreset } from '$/utils/discord/rolePresets'
5+
import { and, eq, lt } from 'drizzle-orm'
6+
7+
import { type Client, DiscordAPIError } from 'discord.js'
8+
9+
export default withContext(on, 'ready', async ({ config }, client) => {
10+
if (config.rolePresets) {
11+
removeExpiredPresets(client)
12+
setTimeout(() => removeExpiredPresets(client), config.rolePresets.checkExpiredEvery)
13+
}
14+
})
15+
16+
async function removeExpiredPresets(client: Client) {
17+
logger.debug('Checking for expired role presets...')
18+
19+
const expireds = await database.query.appliedPresets.findMany({
20+
where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)),
21+
})
22+
23+
for (const expired of expireds) {
24+
try {
25+
logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`)
26+
27+
const guild = await client.guilds.fetch(expired.guildId)
28+
const member = await guild.members.fetch(expired.memberId)
29+
30+
await removeRolePreset(member, expired.preset)
31+
} catch (e) {
32+
// Unknown Member: https://discord.com/developers/docs/topics/opcodes-and-status-codes#json
33+
if (!(e instanceof DiscordAPIError) || e.code !== 10007) {
34+
logger.error(`Error while removing role preset for ${expired.memberId} in ${expired.guildId}: ${e}`)
35+
continue
36+
}
37+
}
38+
39+
await database
40+
.delete(appliedPresets)
41+
.where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId)))
42+
}
43+
}

bots/discord/src/events/discord/ready.ts renamed to bots/discord/src/events/discord/ready/stickyMessageSetup.ts

-43
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
1-
import { database, logger } from '$/context'
2-
import { appliedPresets } from '$/database/schemas'
31
import { applyCommonEmbedStyles } from '$/utils/discord/embeds'
42
import { on, withContext } from '$/utils/discord/events'
5-
import { removeRolePreset } from '$/utils/discord/rolePresets'
6-
import { and, eq, lt } from 'drizzle-orm'
7-
8-
import { type Client, DiscordAPIError } from 'discord.js'
93

104
export default withContext(on, 'ready', async ({ config, discord, logger }, client) => {
11-
logger.info(`Connected to Discord API, logged in as ${client.user.displayName} (@${client.user.tag})!`)
12-
logger.info(`Bot is in ${client.guilds.cache.size} guilds`)
13-
145
if (config.stickyMessages)
156
for (const [guildId, channels] of Object.entries(config.stickyMessages)) {
167
const guild = await client.guilds.fetch(guildId)
@@ -68,38 +59,4 @@ export default withContext(on, 'ready', async ({ config, discord, logger }, clie
6859
await send()
6960
}
7061
}
71-
72-
if (config.rolePresets) {
73-
removeExpiredPresets(client)
74-
setTimeout(() => removeExpiredPresets(client), config.rolePresets.checkExpiredEvery)
75-
}
7662
})
77-
78-
const removeExpiredPresets = async (client: Client) => {
79-
logger.debug('Checking for expired role presets...')
80-
81-
const expireds = await database.query.appliedPresets.findMany({
82-
where: lt(appliedPresets.until, Math.floor(Date.now() / 1000)),
83-
})
84-
85-
for (const expired of expireds) {
86-
try {
87-
logger.debug(`Removing role preset for ${expired.memberId} in ${expired.guildId}`)
88-
89-
const guild = await client.guilds.fetch(expired.guildId)
90-
const member = await guild.members.fetch(expired.memberId)
91-
92-
await removeRolePreset(member, expired.preset)
93-
} catch (e) {
94-
// Unknown Member: https://discord.com/developers/docs/topics/opcodes-and-status-codes#json
95-
if (!(e instanceof DiscordAPIError) || e.code !== 10007) {
96-
logger.error(`Error while removing role preset for ${expired.memberId} in ${expired.guildId}: ${e}`)
97-
continue
98-
}
99-
}
100-
101-
await database
102-
.delete(appliedPresets)
103-
.where(and(eq(appliedPresets.guildId, expired.guildId), eq(appliedPresets.memberId, expired.memberId)))
104-
}
105-
}

0 commit comments

Comments
 (0)