diff options
Diffstat (limited to 'src/commands/moulberry-bush/level.ts')
-rw-r--r-- | src/commands/moulberry-bush/level.ts | 108 |
1 files changed, 105 insertions, 3 deletions
diff --git a/src/commands/moulberry-bush/level.ts b/src/commands/moulberry-bush/level.ts index ab08361..046940a 100644 --- a/src/commands/moulberry-bush/level.ts +++ b/src/commands/moulberry-bush/level.ts @@ -5,6 +5,11 @@ import { CommandInteraction } from 'discord.js'; import { User } from 'discord.js'; import { BotCommand } from '../../lib/extensions/BotCommand'; import { Level } from '../../lib/models'; +import canvas from 'canvas'; +import { MessageAttachment } from 'discord.js'; +import { join } from 'path'; +import got from 'got/dist/source'; +import { CanvasProgressBar } from '../../lib/extensions/Util'; export default class LevelCommand extends BotCommand { constructor() { @@ -38,24 +43,121 @@ export default class LevelCommand extends BotCommand { }); } + // private simplifyXP(xp: number): string { + + // } + + // private async getImage(user: User): Promise<Buffer> { + // // I added comments because this code is impossible to read + // const [userLevelRow] = await Level.findOrBuild({ + // where: { + // id: user.id + // }, + // defaults: { + // id: user.id + // } + // }); + // const userLevel = userLevelRow.level + // const currentLevelXP = Level.convertLevelToXp(userLevel); + // const currentLevelXPProgress = userLevelRow.xp - currentLevelXP; + // const xpForNextLevel = + // Level.convertLevelToXp(userLevelRow.level + 1) - currentLevelXP; + // // Load roboto font because yes + // canvas.registerFont( + // join(__dirname, '..', '..', '..', 'Roboto-Regular.ttf'), + // { + // family: 'Roboto' + // } + // ); + // // Create image canvas + // const image = canvas.createCanvas(800, 200), + // ctx = image.getContext('2d'); + // // Fill background + // ctx.fillStyle = '#00c7eb'; + // ctx.fillRect(0, 0, image.width, image.height); + // // Draw avatar + // const avatarBuffer = await got + // .get(user.displayAvatarURL({ format: 'png', size: 128 })) + // .buffer(); + // const avatarImage = new canvas.Image(); + // avatarImage.src = avatarBuffer; + // avatarImage.height = 128 + // avatarImage.width = 128 + // const imageTopCoord = (image.height / 2) - (avatarImage.height / 2) + // ctx.drawImage(avatarImage, imageTopCoord, imageTopCoord); + // // Write tag of user + // ctx.font = '30px Roboto'; + // ctx.fillStyle = 'black'; + // const measuredTag = ctx.measureText(user.tag); + // ctx.fillText(user.tag, avatarImage.width + 70, 60); + // // Draw line under tag + // ctx.fillStyle = 'yellow'; + // ctx.fillRect( + // avatarImage.width + 70, + // 65 + measuredTag.actualBoundingBoxDescent, + // measuredTag.width, + // 3 + // ); + // // Draw leveling bar + // const fullProgressBar = new CanvasProgressBar( + // ctx, + // { + // x: avatarImage.width + 70, + // y: avatarImage.height - 10, + // height: 30, + // width: 550 + // }, + // '#6e6e6e', + // 1 + // ); + // fullProgressBar.draw(); + // const progressBar = new CanvasProgressBar( + // ctx, + // { + // x: avatarImage.width + 70, + // y: avatarImage.height - 10, + // height: 30, + // width: 550 + // }, + // 'yellow', + // currentLevelXPProgress / xpForNextLevel + // ); + // progressBar.draw(); + // // Draw level data text + // ctx.fillStyle = 'black' + // ctx.fillText(`Level: ${userLevel} XP: $`, avatarImage.width + 70, avatarImage.height - 20) + // // Return image in buffer form + // return image.toBuffer(); + // } + private async getResponse(user: User): Promise<string> { const userLevelRow = await Level.findByPk(user.id); if (userLevelRow) { - return `${user ? `${user.tag}'s` : 'Your'} level is ${ - userLevelRow.level - } (${userLevelRow.xp} XP)`; + return `${user ? `${user.tag}'s` : 'Your'} level is ${userLevelRow.level} (${userLevelRow.xp} XP)`; } else { return `${user ? `${user.tag} does` : 'You do'} not have a level yet!`; } } async exec(message: Message, { user }: { user?: User }): Promise<void> { + // await message.reply( + // new MessageAttachment( + // await this.getImage(user || message.author), + // 'lel.png' + // ) + // ); await message.reply(await this.getResponse(user || message.author)); } async execSlash( message: CommandInteraction, { user }: { user?: CommandInteractionOption } ): Promise<void> { + // await message.reply( + // new MessageAttachment( + // await this.getImage(user?.user || message.user), + // 'lel.png' + // ) + // ); await message.reply(await this.getResponse(user?.user || message.user)); } } |