diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/models/Level.ts | 3 | ||||
-rw-r--r-- | src/listeners/message/levels.ts | 35 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/models/Level.ts b/src/lib/models/Level.ts index 34c53e5..0d951a1 100644 --- a/src/lib/models/Level.ts +++ b/src/lib/models/Level.ts @@ -39,4 +39,7 @@ export class Level extends BaseModel<LevelModel, LevelModelCreationAttributes> { } return xp; } + static genRandomizedXp(): number { + return Math.floor(Math.random() * (75 - 25 + 1)) + 35; + } } diff --git a/src/listeners/message/levels.ts b/src/listeners/message/levels.ts new file mode 100644 index 0000000..7aa3403 --- /dev/null +++ b/src/listeners/message/levels.ts @@ -0,0 +1,35 @@ +import { Message } from 'discord.js'; +import { BotListener } from '../../lib/extensions/BotListener'; +import { Level } from '../../lib/models'; + +export default class LevelListener extends BotListener { + private levelCooldowns: Set<string> = new Set(); + private blacklistedChannels = ['702456294874808330']; + constructor() { + super('level', { + emitter: 'commandHandler', + event: 'messageInvalid' // Using messageInvalid here so commands don't give xp + }); + } + async exec(message: Message): Promise<void> { + if (message.author.bot) return; + if (message.util?.parsed?.command) return; + if (this.levelCooldowns.has(message.author.id)) return; + if (message.guild.id != '516977525906341928') return; + if (this.blacklistedChannels.includes(message.channel.id)) return; + const [user] = await Level.findOrBuild({ + where: { + id: message.author.id + }, + defaults: { + id: message.author.id + } + }); + const xpToGive = Level.genRandomizedXp() + user.xp += xpToGive; + await user.save(); + console.log(`Gave XP to ${message.author.tag}: ${xpToGive}xp`); + this.levelCooldowns.add(message.author.id) + setTimeout(() => this.levelCooldowns.delete(message.author.id), 60_000) + } +} |