diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/owner/setlevel.ts | 59 | ||||
-rw-r--r-- | src/lib/models/Level.ts | 10 |
2 files changed, 67 insertions, 2 deletions
diff --git a/src/commands/owner/setlevel.ts b/src/commands/owner/setlevel.ts new file mode 100644 index 0000000..3c76fa0 --- /dev/null +++ b/src/commands/owner/setlevel.ts @@ -0,0 +1,59 @@ +import { User } from 'discord.js'; +import { Message } from 'discord.js'; +import { BotCommand } from '../../lib/extensions/BotCommand'; +import { Level } from '../../lib/models'; +import AllowedMentions from '../../lib/utils/AllowedMentions'; + +export default class SetLevelCommand extends BotCommand { + constructor() { + super('setlevel', { + aliases: ['setlevel'], + description: { + content: 'Sets the level of a user', + usage: 'setlevel <user> <level>', + examples: ['setlevel @Moulberry 69'] + }, + args: [ + { + id: 'user', + type: 'user', + prompt: { + start: 'What user would you like to change the level of?', + retry: + 'Invalid user. What user would you like to change the level of?' + } + }, + { + id: 'level', + type: 'number', + prompt: { + start: 'What level would you like to set?', + retry: 'Invalid user. What level would you like to set?' + } + } + ], + ownerOnly: true + }); + } + async exec( + message: Message, + { user, level }: { user: User; level: number } + ): Promise<void> { + const [levelEntry] = await Level.findOrBuild({ + where: { + id: user.id + }, + defaults: { + id: user.id + } + }); + levelEntry.xp = Level.convertLevelToXp(level); + await levelEntry.save(); + await message.reply( + `Successfully set level of <@${user.id}> to \`${level}\` (\`${levelEntry.xp}\` XP)`, + { + allowedMentions: AllowedMentions.none() + } + ); + } +} diff --git a/src/lib/models/Level.ts b/src/lib/models/Level.ts index bce9aa4..65ec8e6 100644 --- a/src/lib/models/Level.ts +++ b/src/lib/models/Level.ts @@ -1,4 +1,3 @@ -import { Optional } from 'sequelize/types'; import { BaseModel } from './BaseModel'; export interface LevelModel { @@ -6,7 +5,10 @@ export interface LevelModel { xp: number; } -export type LevelModelCreationAttributes = Optional<LevelModel, 'xp'>; +export interface LevelModelCreationAttributes { + id: string; + xp?: number; +} export class Level extends BaseModel<LevelModel, LevelModelCreationAttributes> { public id: string; @@ -18,4 +20,8 @@ export class Level extends BaseModel<LevelModel, LevelModelCreationAttributes> { // WIP return 0; } + static convertLevelToXp(xp: number): number { + // WIP + return 0; + } } |