Skip to content

Commit d52662d

Browse files
authored
Refactor/server booster listener (#58)
* chore: utilize the match func * refactor: server booster listener * chore: assertions
1 parent ffbc580 commit d52662d

File tree

8 files changed

+41
-32
lines changed

8 files changed

+41
-32
lines changed

src/bot/events/guild-member-update/server-booster/validators/index.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/bot/events/message-create/channel/handlers/check-in.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,15 @@ const moduleName = getModuleName(EVENT_PATH, __filename)
1919
registerMessageHandler({
2020
desc: 'Handle messages in channel for Check In event.',
2121
errorTag: () => `${moduleName}: ${CheckIn.ERR.UnexpectedCheckIn}`,
22-
match: msg => msg.channel.id === CHECKIN_CHANNEL,
22+
match: msg => !msg.author.bot && msg.channel.id === CHECKIN_CHANNEL && msg.channel.type === ChannelType.GuildText,
2323
async exec(_, msg) {
2424
try {
25-
if (!msg.guild)
25+
if (!msg.guild || !msg.inGuild())
2626
throw new CheckInError(CheckIn.ERR.NotGuild)
2727

2828
const channel = msg.channel as TextChannel
2929
CheckIn.assertMissPerms(msg.guild.members.me!, channel)
3030

31-
if (channel.type !== ChannelType.GuildText)
32-
return
33-
if (msg.author.bot)
34-
return
35-
3631
await msg.delete()
3732
log.warn(`${channel.name}: deleted unauthorized message from '${msg.author.tag}'`)
3833
}

src/bot/events/message-create/im-fine/handlers/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ registerMessageHandler({
1717
errorTag: () => `${moduleName}: ${ImFine.ERR.UnexpectedImFine}`,
1818
match: msg => !msg.author.bot && msg.content.includes('fine'),
1919
async exec(_, msg) {
20+
if (!msg.guild || !msg.inGuild())
21+
throw new ImFineError(ImFine.ERR.NotGuild)
22+
2023
await msg.reply('gua I\'m fine😅')
2124
},
2225
})

src/bot/events/guild-member-update/server-booster/handlers/index.ts renamed to src/bot/events/message-create/server-booster/handlers/index.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { TextChannel } from 'discord.js'
2-
import { AURA_FARMING_CHANNEL } from '@config/discord'
3-
import { registerGuildMemberUpdateHandler } from '@events/guild-member-update/registry'
2+
import { SYSTEM_ASHES_CHANNEL } from '@config/discord'
43
import { EVENT_PATH } from '@events/index'
5-
import { getChannel, sendAsBot } from '@utils/discord'
4+
import { registerMessageHandler } from '@events/message-create/registry'
5+
import { sendAsBot } from '@utils/discord'
66
import { DiscordBaseError } from '@utils/discord/error'
77
import { getModuleName } from '@utils/io'
88
import { ServerBooster } from '../validators'
@@ -15,25 +15,22 @@ export class ServerBoosterError extends DiscordBaseError {
1515

1616
const moduleName = getModuleName(EVENT_PATH, __filename)
1717

18-
registerGuildMemberUpdateHandler({
19-
desc: 'Watches server booster for members on guild member update.',
18+
registerMessageHandler({
19+
desc: 'Watches server boost system messages (including re-boosts).',
2020
errorTag: () => `${moduleName}: ${ServerBooster.ERR.UnexpectedServerBooster}`,
21-
async exec(_, oldMember, newMember) {
21+
match: msg => msg.system && msg.channelId === SYSTEM_ASHES_CHANNEL && !!msg.member && ServerBooster.isBoostSystemMessage(msg),
22+
async exec(_, msg) {
2223
try {
23-
if (!newMember.guild)
24+
if (!msg.guild || !msg.inGuild())
2425
throw new ServerBoosterError(ServerBooster.ERR.NotGuild)
2526

26-
const wasBoosting = !!oldMember.premiumSince
27-
const isBoosting = !!newMember.premiumSince
28-
29-
const justBoosted = !wasBoosting && isBoosting
30-
if (!justBoosted)
31-
return
32-
33-
const channel = await getChannel(newMember.guild, AURA_FARMING_CHANNEL) as TextChannel
27+
const channel = msg.channel as TextChannel
3428
ServerBooster.assertChannel(channel)
29+
ServerBooster.assertMissPerms(msg.guild.members.me!, channel)
30+
const member = msg.member!
31+
ServerBooster.assertMember(member)
3532

36-
const embed = ServerBooster.sayDeeplyThanksTo(newMember)
33+
const embed = ServerBooster.sayDeeplyThanksTo(member)
3734

3835
await sendAsBot(null, channel, {
3936
content: ServerBooster.MSG.SpecialThanks,

src/bot/events/guild-member-update/server-booster/messages/index.ts renamed to src/bot/events/message-create/server-booster/messages/index.ts

File renamed without changes.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type { Message } from 'discord.js'
2+
import { DiscordAssert } from '@utils/discord'
3+
import { MessageType } from 'discord.js'
4+
import { ServerBoosterMessage } from '../messages'
5+
6+
export class ServerBooster extends ServerBoosterMessage {
7+
static override BASE_PERMS = [
8+
...DiscordAssert.BASE_PERMS,
9+
]
10+
11+
static readonly DISCORD_BOOST_MESSAGES = [
12+
MessageType.GuildBoost,
13+
MessageType.GuildBoostTier1,
14+
MessageType.GuildBoostTier2,
15+
MessageType.GuildBoostTier3,
16+
]
17+
18+
static isBoostSystemMessage(message: Message): boolean {
19+
return this.DISCORD_BOOST_MESSAGES.includes(message.type)
20+
}
21+
}

src/bot/events/message-reaction-add/checkin/handlers/submitted.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ registerReactionHandler({
2121
const message = reaction.message
2222
const guild = message.guild
2323
if (!guild || !message.inGuild())
24-
return
24+
throw new SubmittedCheckinError(Checkin.ERR.NotGuild)
2525

2626
if (reaction.partial)
2727
await reaction.fetch()

src/config/discord.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { RoleManager } from 'discord.js'
22

3+
export const SYSTEM_ASHES_CHANNEL = '1405871418788548638'
34
export const CHECKIN_CHANNEL = '1405165987288059944'
45
export const AURA_FARMING_CHANNEL = '1405162471496351794'
56
export const GRIND_ASHES_CHANNEL = '1405165926600409148'

0 commit comments

Comments
 (0)