diff --git a/src/commands/dataLength.ts b/src/commands/dataLength.ts new file mode 100644 index 0000000..6e5bb5a --- /dev/null +++ b/src/commands/dataLength.ts @@ -0,0 +1,113 @@ +import { Learn, Text } from '../lib/databases' +import { ApplyOptions } from '@sapphire/decorators' +import { Command } from '@sapphire/framework' +import { + EmbedBuilder, + Message, + MessageFlags, + type ChatInputCommandInteraction, +} from 'discord.js' + +@ApplyOptions({ + name: '데이터학습량', + aliases: ['학습데이터량', '데이터량', '학습량'], + description: '봇이 학습한 데ㅇ이터량을 보여줘요.', + detailedDescription: { + usage: '머핀아 학습데이터량', + }, +}) +export default class DataLengthCommand extends Command { + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder.setName(this.name).setDescription(this.description), + ) + } + + public async messageRun(msg: Message) { + return await this._run(msg) + } + + public async chatInputRun( + interaction: ChatInputCommandInteraction<'cached'>, + ) { + return await this._run(interaction) + } + + private async _run( + ctx: Message | ChatInputCommandInteraction<'cached'>, + ) { + let userId: string + let username: string + + if (ctx instanceof Message) { + userId = ctx.author.id + username = ctx.author.username + } else { + userId = ctx.user.id + username = ctx.user.username + + await ctx.deferReply({ + flags: [MessageFlags.Ephemeral], + }) + } + + const textLength = (await Text.find()).length + const muffinLength = ( + await Text.find({ + persona: 'muffin', + }) + ).length + const nsfwLength = ( + await Text.find({ + persona: /^user/, + }) + ).length + + const learnLength = (await Learn.find()).length + const userLearnLength = ( + await Learn.find({ + user_id: userId, + }) + ).length + + const sum = textLength + learnLength + + const embed = new EmbedBuilder() + .setTitle('저장된 데이터량') + .setDescription(`총합: \`${sum}\`개`) + .addFields( + { + name: '총 채팅 데이터량', + value: `\`${textLength}\`개`, + inline: true, + }, + { + name: '총 지식 데이터량', + value: `\`${learnLength}\`개`, + inline: true, + }, + { + name: '머핀 데이터량', + value: `\`${muffinLength}\`개`, + }, + { + name: 'nsfw 데이터량', + value: `\`${nsfwLength}\`개`, + inline: true, + }, + { + name: `${username}님이 가르쳐준 데이터량`, + value: `\`${userLearnLength}\`개`, + inline: true, + }, + ) + + return ctx instanceof Message + ? await ctx.reply({ + embeds: [embed], + }) + : await ctx.editReply({ + embeds: [embed], + }) + } +}