diff --git a/src/bot/events/guild-member-update/server-booster/validators/index.ts b/src/bot/events/guild-member-update/server-booster/validators/index.ts deleted file mode 100644 index 9622c8c..0000000 --- a/src/bot/events/guild-member-update/server-booster/validators/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DiscordAssert } from '@utils/discord' -import { ServerBoosterMessage } from '../messages' - -export class ServerBooster extends ServerBoosterMessage { - static override BASE_PERMS = [ - ...DiscordAssert.BASE_PERMS, - ] -} diff --git a/src/bot/events/message-create/channel/handlers/check-in.ts b/src/bot/events/message-create/channel/handlers/check-in.ts index b2330ae..f438c59 100644 --- a/src/bot/events/message-create/channel/handlers/check-in.ts +++ b/src/bot/events/message-create/channel/handlers/check-in.ts @@ -19,20 +19,15 @@ const moduleName = getModuleName(EVENT_PATH, __filename) registerMessageHandler({ desc: 'Handle messages in channel for Check In event.', errorTag: () => `${moduleName}: ${CheckIn.ERR.UnexpectedCheckIn}`, - match: msg => msg.channel.id === CHECKIN_CHANNEL, + match: msg => !msg.author.bot && msg.channel.id === CHECKIN_CHANNEL && msg.channel.type === ChannelType.GuildText, async exec(_, msg) { try { - if (!msg.guild) + if (!msg.guild || !msg.inGuild()) throw new CheckInError(CheckIn.ERR.NotGuild) const channel = msg.channel as TextChannel CheckIn.assertMissPerms(msg.guild.members.me!, channel) - if (channel.type !== ChannelType.GuildText) - return - if (msg.author.bot) - return - await msg.delete() log.warn(`${channel.name}: deleted unauthorized message from '${msg.author.tag}'`) } diff --git a/src/bot/events/message-create/im-fine/handlers/index.ts b/src/bot/events/message-create/im-fine/handlers/index.ts index 54f21d9..578a47c 100644 --- a/src/bot/events/message-create/im-fine/handlers/index.ts +++ b/src/bot/events/message-create/im-fine/handlers/index.ts @@ -17,6 +17,9 @@ registerMessageHandler({ errorTag: () => `${moduleName}: ${ImFine.ERR.UnexpectedImFine}`, match: msg => !msg.author.bot && msg.content.includes('fine'), async exec(_, msg) { + if (!msg.guild || !msg.inGuild()) + throw new ImFineError(ImFine.ERR.NotGuild) + await msg.reply('gua I\'m fine😅') }, }) diff --git a/src/bot/events/guild-member-update/server-booster/handlers/index.ts b/src/bot/events/message-create/server-booster/handlers/index.ts similarity index 56% rename from src/bot/events/guild-member-update/server-booster/handlers/index.ts rename to src/bot/events/message-create/server-booster/handlers/index.ts index 104f06f..9afeca3 100644 --- a/src/bot/events/guild-member-update/server-booster/handlers/index.ts +++ b/src/bot/events/message-create/server-booster/handlers/index.ts @@ -1,8 +1,8 @@ import type { TextChannel } from 'discord.js' -import { AURA_FARMING_CHANNEL } from '@config/discord' -import { registerGuildMemberUpdateHandler } from '@events/guild-member-update/registry' +import { SYSTEM_ASHES_CHANNEL } from '@config/discord' import { EVENT_PATH } from '@events/index' -import { getChannel, sendAsBot } from '@utils/discord' +import { registerMessageHandler } from '@events/message-create/registry' +import { sendAsBot } from '@utils/discord' import { DiscordBaseError } from '@utils/discord/error' import { getModuleName } from '@utils/io' import { ServerBooster } from '../validators' @@ -15,25 +15,22 @@ export class ServerBoosterError extends DiscordBaseError { const moduleName = getModuleName(EVENT_PATH, __filename) -registerGuildMemberUpdateHandler({ - desc: 'Watches server booster for members on guild member update.', +registerMessageHandler({ + desc: 'Watches server boost system messages (including re-boosts).', errorTag: () => `${moduleName}: ${ServerBooster.ERR.UnexpectedServerBooster}`, - async exec(_, oldMember, newMember) { + match: msg => msg.system && msg.channelId === SYSTEM_ASHES_CHANNEL && !!msg.member && ServerBooster.isBoostSystemMessage(msg), + async exec(_, msg) { try { - if (!newMember.guild) + if (!msg.guild || !msg.inGuild()) throw new ServerBoosterError(ServerBooster.ERR.NotGuild) - const wasBoosting = !!oldMember.premiumSince - const isBoosting = !!newMember.premiumSince - - const justBoosted = !wasBoosting && isBoosting - if (!justBoosted) - return - - const channel = await getChannel(newMember.guild, AURA_FARMING_CHANNEL) as TextChannel + const channel = msg.channel as TextChannel ServerBooster.assertChannel(channel) + ServerBooster.assertMissPerms(msg.guild.members.me!, channel) + const member = msg.member! + ServerBooster.assertMember(member) - const embed = ServerBooster.sayDeeplyThanksTo(newMember) + const embed = ServerBooster.sayDeeplyThanksTo(member) await sendAsBot(null, channel, { content: ServerBooster.MSG.SpecialThanks, diff --git a/src/bot/events/guild-member-update/server-booster/messages/index.ts b/src/bot/events/message-create/server-booster/messages/index.ts similarity index 100% rename from src/bot/events/guild-member-update/server-booster/messages/index.ts rename to src/bot/events/message-create/server-booster/messages/index.ts diff --git a/src/bot/events/message-create/server-booster/validators/index.ts b/src/bot/events/message-create/server-booster/validators/index.ts new file mode 100644 index 0000000..40d51aa --- /dev/null +++ b/src/bot/events/message-create/server-booster/validators/index.ts @@ -0,0 +1,21 @@ +import type { Message } from 'discord.js' +import { DiscordAssert } from '@utils/discord' +import { MessageType } from 'discord.js' +import { ServerBoosterMessage } from '../messages' + +export class ServerBooster extends ServerBoosterMessage { + static override BASE_PERMS = [ + ...DiscordAssert.BASE_PERMS, + ] + + static readonly DISCORD_BOOST_MESSAGES = [ + MessageType.GuildBoost, + MessageType.GuildBoostTier1, + MessageType.GuildBoostTier2, + MessageType.GuildBoostTier3, + ] + + static isBoostSystemMessage(message: Message): boolean { + return this.DISCORD_BOOST_MESSAGES.includes(message.type) + } +} diff --git a/src/bot/events/message-reaction-add/checkin/handlers/submitted.ts b/src/bot/events/message-reaction-add/checkin/handlers/submitted.ts index 6215cac..e63cda7 100644 --- a/src/bot/events/message-reaction-add/checkin/handlers/submitted.ts +++ b/src/bot/events/message-reaction-add/checkin/handlers/submitted.ts @@ -21,7 +21,7 @@ registerReactionHandler({ const message = reaction.message const guild = message.guild if (!guild || !message.inGuild()) - return + throw new SubmittedCheckinError(Checkin.ERR.NotGuild) if (reaction.partial) await reaction.fetch() diff --git a/src/config/discord.ts b/src/config/discord.ts index 42ebd41..3528d8c 100644 --- a/src/config/discord.ts +++ b/src/config/discord.ts @@ -1,5 +1,6 @@ import type { RoleManager } from 'discord.js' +export const SYSTEM_ASHES_CHANNEL = '1405871418788548638' export const CHECKIN_CHANNEL = '1405165987288059944' export const AURA_FARMING_CHANNEL = '1405162471496351794' export const GRIND_ASHES_CHANNEL = '1405165926600409148'