aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/models/Level.ts3
-rw-r--r--src/listeners/message/levels.ts35
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)
+ }
+}