diff --git a/package.json b/package.json index 2a95175..d234f84 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "muffinbot", - "version": "4.0.0-pudding.d240930a", + "version": "4.0.0-pudding.d241001a", "main": "dist/index.js", "private": true, "dependencies": { - "@prisma/client": "^5.19.1", + "@prisma/client": "^5.20.0", "@sapphire/decorators": "^6.1.0", "@sapphire/discord.js-utilities": "^7.3.0", "@sapphire/framework": "^5.2.1", "@sapphire/pieces": "^4.3.1", "@sapphire/utilities": "^3.17.0", - "discord-api-types": "^0.37.100", - "discord.js": "^14.16.2", + "discord-api-types": "^0.37.101", + "discord.js": "^14.16.3", "dokdo": "^1.0.1", "dotenv": "^16.4.5", "mysql2": "^3.11.3", @@ -19,20 +19,20 @@ }, "devDependencies": { "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.11.0", + "@eslint/js": "^9.11.1", "@migan/prettier-config": "^1.2.0", - "@types/node": "^22.5.5", + "@types/node": "^22.7.4", "@types/semver": "^7.5.8", - "@typescript-eslint/eslint-plugin": "^8.6.0", - "@typescript-eslint/parser": "^8.6.0", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", "@yarnpkg/pnpify": "^4.1.2", "cross-env": "^7.0.3", - "eslint": "^9.11.0", + "eslint": "^9.11.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "globals": "^15.9.0", "prettier": "^3.3.3", - "prisma": "^5.19.1", + "prisma": "^5.20.0", "tsup": "^8.3.0", "typescript": "^5.6.2" }, @@ -41,7 +41,8 @@ "dev": "cross-env NODE_ENV=development tsup --watch --onSuccess \"node --enable-source-maps dist\"", "start": "cross-env NODE_ENV=production node dist", "db:pull": "pnpify prisma db pull", - "db:push": "pnpify prisma db push" + "db:push": "pnpify prisma db push", + "db:generate": "pnpify prisma generate" }, "resolutions": { "@types/ws": "^8.5.11", diff --git a/src/Client.ts b/src/Client.ts index c33d644..745c8fc 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -23,7 +23,7 @@ container.version = version container.database = new PrismaClient() container.dokdoAliases = ['dokdo', 'dok', 'Dokdo', 'Dok', '테스트'] container.chatBot = new ChatBot(container.database) -container.lastUpdated = new Date('2024-09-29') +container.lastUpdated = new Date('2024-10-01') if (release.startsWith('e')) { container.channel = 'EXPERIMENTAL' diff --git a/src/Commands/deleteLearn.ts b/src/Commands/deleteLearn.ts index 36a321f..19cfddc 100644 --- a/src/Commands/deleteLearn.ts +++ b/src/Commands/deleteLearn.ts @@ -1,16 +1,18 @@ import { ApplyOptions } from '@sapphire/decorators' +import { + type SelectMenuComponentOptionData, + type User, + ChatInputCommandInteraction, + ComponentType, + codeBlock, + Message, +} from 'discord.js' import { Args, Command, container, DetailedDescriptionCommandObject, } from '@sapphire/framework' -import { - type SelectMenuComponentOptionData, - type Message, - ComponentType, - codeBlock, -} from 'discord.js' @ApplyOptions({ name: '삭제', @@ -22,13 +24,38 @@ import { }, }) class DeleteLearnCommand extends Command { - public async messageRun(msg: Message, args: Args) { + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder + .setName(this.name) + .setDescription(this.description) + .addStringOption(option => + option + .setRequired(true) + .setName('단어') + .setDescription('삭제할 단어를 입력해주세요.'), + ), + ) + } + + private async _run(ctx: Message | ChatInputCommandInteraction, args?: Args) { + let command: string | null + let user: User + if (ctx instanceof Message) { + command = await args!.rest('string').catch(() => null) + user = ctx.author + } else { + command = ctx.options.getString('단어', true) + user = ctx.user + } + + const ephemeral = + ctx instanceof ChatInputCommandInteraction ? { ephemeral: true } : null const CUSTOM_ID = 'maa$deleteLearn' - const command = await args.rest('string').catch(() => null) const options: SelectMenuComponentOptionData[] = [] const deleteDataList: string[] = [] if (!command) { - return await msg.reply( + return await ctx.reply( `사용법: \n\`\`\`${(this.detailedDescription as DetailedDescriptionCommandObject).usage}\`\`\``, ) } @@ -36,12 +63,15 @@ class DeleteLearnCommand extends Command { const deleteDatas = await this.container.database.learn.findMany({ where: { command, - user_id: msg.author.id, + user_id: user.id, }, }) if (deleteDatas.length === 0) { - return await msg.reply('해당하는 걸 찾ㅈ을 수 없어요.') + return await ctx.reply({ + ...ephemeral, + content: '해당하는 걸 찾ㅈ을 수 없어요.', + }) } for (let i = 1; i <= deleteDatas.length; i++) { @@ -53,7 +83,8 @@ class DeleteLearnCommand extends Command { }) } - await msg.reply({ + await ctx.reply({ + ...ephemeral, embeds: [ { title: '삭제', @@ -68,7 +99,7 @@ class DeleteLearnCommand extends Command { components: [ { type: ComponentType.StringSelect, - customId: `${CUSTOM_ID}@${msg.author.id}`, + customId: `${CUSTOM_ID}@${user.id}`, placeholder: '지울 데이터를 선택해ㅈ주세요', options: [ ...options, @@ -84,6 +115,14 @@ class DeleteLearnCommand extends Command { ], }) } + + public async messageRun(msg: Message, args: Args) { + await this._run(msg, args) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) + } } void container.stores.loadPiece({ diff --git a/src/Commands/help.ts b/src/Commands/help.ts index e1325dc..40a61ad 100644 --- a/src/Commands/help.ts +++ b/src/Commands/help.ts @@ -1,6 +1,10 @@ import { Args, Command, container } from '@sapphire/framework' -import { codeBlock, type Message } from 'discord.js' import { ApplyOptions } from '@sapphire/decorators' +import { + type ChatInputCommandInteraction, + codeBlock, + Message, +} from 'discord.js' @ApplyOptions({ name: '도움말', @@ -12,8 +16,32 @@ import { ApplyOptions } from '@sapphire/decorators' }, }) class HelpCommand extends Command { - public async messageRun(msg: Message, args: Args) { - const commandName = await args.pick('string').catch(() => null) + public registerApplicationCommands(registry: Command.Registry) { + const commands = this.container.stores.get('commands').map(command => { + return { + name: command.name, + value: command.name, + } + }) + registry.registerChatInputCommand(builder => + builder + .setName(this.name) + .setDescription(this.description) + .addStringOption(option => + option + .setName('명령어') + .setDescription('해당 명령어에 대ㅎ한 도움말을 볼 수 있어요.') + .addChoices(commands), + ), + ) + } + private async _run(ctx: Message | ChatInputCommandInteraction, args?: Args) { + let commandName: string | null + if (ctx instanceof Message) { + commandName = await args!.pick('string').catch(() => null) + } else { + commandName = ctx.options.getString('명령어') + } if ( !commandName || !this.container.stores.get('commands').get(commandName) @@ -24,7 +52,7 @@ class HelpCommand extends Command { commandList.push(`${module.name} - ${module.description}`) }) - await msg.reply({ + await ctx.reply({ embeds: [ { title: `${this.container.client.user?.username}의 도움말`, @@ -45,7 +73,7 @@ class HelpCommand extends Command { this.container.stores.get('commands').get(commandName)! if (typeof detailedDescription === 'string') return - await msg.reply({ + await ctx.reply({ embeds: [ { title: `${this.container.client.user?.username}의 도움말`, @@ -87,6 +115,13 @@ class HelpCommand extends Command { }) } } + public async messageRun(msg: Message, args: Args) { + await this._run(msg, args) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) + } } void container.stores.loadPiece({ diff --git a/src/Commands/information.ts b/src/Commands/information.ts index be3c7c3..242a515 100644 --- a/src/Commands/information.ts +++ b/src/Commands/information.ts @@ -1,6 +1,6 @@ -import { ApplyOptions } from '@sapphire/decorators' +import type { ChatInputCommandInteraction, Message } from 'discord.js' import { Command, container } from '@sapphire/framework' -import { Message } from 'discord.js' +import { ApplyOptions } from '@sapphire/decorators' import { platform, arch } from 'os' @ApplyOptions({ @@ -11,8 +11,14 @@ import { platform, arch } from 'os' }, }) class InformationCommand extends Command { - public async messageRun(msg: Message) { - await msg.reply({ + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder.setName(this.name).setDescription(this.description), + ) + } + + private async _run(ctx: Message | ChatInputCommandInteraction) { + await ctx.reply({ embeds: [ { title: `${this.container.client.user?.username}의 정ㅂ보`, @@ -59,6 +65,14 @@ class InformationCommand extends Command { ], }) } + + public async messageRun(msg: Message) { + await this._run(msg) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) + } } void container.stores.loadPiece({ diff --git a/src/Commands/learn.ts b/src/Commands/learn.ts index 1f0879d..2e2bc69 100644 --- a/src/Commands/learn.ts +++ b/src/Commands/learn.ts @@ -1,5 +1,5 @@ +import { ChatInputCommandInteraction, codeBlock, Message } from 'discord.js' import { type Args, Command, container } from '@sapphire/framework' -import { codeBlock, type Message } from 'discord.js' import { ApplyOptions } from '@sapphire/decorators' @ApplyOptions({ @@ -16,32 +16,69 @@ import { ApplyOptions } from '@sapphire/decorators' }, }) class LearnCommand extends Command { - public async messageRun(msg: Message, args: Args) { - if (typeof this.detailedDescription === 'string') return - const config = this.container.config - const command = (await args.pick('string').catch(() => null))?.replaceAll( - '_', - ' ', - ) - const result = (await args.pick('string').catch(() => null))?.replaceAll( - '_', - ' ', - ) - if (!command || !result) { - return await msg.reply( - codeBlock( - 'md', - `사용법: ${this.detailedDescription} - 예시: ${this.detailedDescription.examples?.map(example => example).join('\n')}`, + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder + .setName(this.name) + .setDescription(this.description) + .addStringOption(option => + option + .setRequired(true) + .setName('단어') + .setDescription('등록할 단어를 입력해주세요.'), + ) + .addStringOption(option => + option + .setRequired(true) + .setName('대답') + .setDescription('해당 단어의 대답을 입력해주세요.'), ), + ) + } + + private async _run(ctx: Message | ChatInputCommandInteraction, args?: Args) { + if (ctx instanceof ChatInputCommandInteraction) ctx.deferReply() + if (typeof this.detailedDescription === 'string') return + + const config = this.container.config + const IG_MSG = '해ㄷ당 단어는 배울ㄹ 수 없어요.' + const DI_MSG = '해당 단ㅇ어는 개발자님이 특별히 금지하였ㅇ어요.' + const SUCCESS_MSG = '을/를 배웠ㅇ어요.' + + let command: string + let result: string + + if (ctx instanceof Message) { + command = (await args!.pick('string').catch(() => null))!.replaceAll( + '_', + ' ', ) + result = (await args!.pick('string').catch(() => null))!.replaceAll( + '_', + ' ', + ) + + if (!command || !result) + return await ctx.reply( + codeBlock( + 'md', + `사용법: ${this.detailedDescription} + 예시: ${this.detailedDescription.examples?.map(example => example).join('\n')}`, + ), + ) + } else { + command = ctx.options.getString('단어', true) + result = ctx.options.getString('대답', true) } + const commands: string[] = [] const aliases: string[] = [] + this.container.stores.get('commands').forEach(module => { commands.push(module.name) module.aliases.forEach(alias => aliases.push(alias)) }) + const ignore = [ ...commands, ...aliases, @@ -52,27 +89,41 @@ class LearnCommand extends Command { '간미', ] const disallowed = ['@everyone', '@here', `<@${config.bot.owner_ID}>`] + const user = ctx instanceof Message ? ctx.author : ctx.user for (const ig of ignore) { - if (command.includes(ig)) { - return msg.reply('해ㄷ당 단어는 배울ㄹ 수 없어요.') - } + if (command.includes(ig)) + return ctx instanceof Message + ? await ctx.reply(IG_MSG) + : await ctx.editReply(IG_MSG) } for (const di of disallowed) { - if (result.includes(di)) { - return msg.reply('해당 단ㅇ어는 개발자님이 특별히 금지하였ㅇ어요.') - } + if (result.includes(di)) + return ctx instanceof Message + ? await ctx.reply(DI_MSG) + : await ctx.editReply(DI_MSG) } await this.container.database.learn.create({ data: { - user_id: msg.author.id, + user_id: user.id, command, result, }, }) - await msg.reply(`${command}을/를 배웠ㅇ어요.`) + + return ctx instanceof Message + ? await ctx.reply(command + SUCCESS_MSG) + : await ctx.editReply(command + SUCCESS_MSG) + } + + public async messageRun(msg: Message, args: Args) { + await this._run(msg, args) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) } } diff --git a/src/Commands/learning_data.ts b/src/Commands/learning_data.ts index bc4e8fe..cd3c5f5 100644 --- a/src/Commands/learning_data.ts +++ b/src/Commands/learning_data.ts @@ -1,6 +1,6 @@ +import { ChatInputCommandInteraction, Message } from 'discord.js' import { Command, container } from '@sapphire/framework' import { ApplyOptions } from '@sapphire/decorators' -import { type Message } from 'discord.js' @ApplyOptions({ name: '데이터학습량', @@ -11,14 +11,21 @@ import { type Message } from 'discord.js' }, }) class LearnDataCommand extends Command { - public async messageRun(msg: Message) { + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder.setName(this.name).setDescription(this.description), + ) + } + + private async _run(ctx: Message | ChatInputCommandInteraction) { + const user = ctx instanceof Message ? ctx.author : ctx.user const db = this.container.database const data = await db.statement.findMany() const nsfwData = await db.nsfw_content.findMany() const learnData = await db.learn.findMany() const userData = await db.learn.findMany({ where: { - user_id: msg.author.id, + user_id: user.id, }, }) const muffin: any[] = [] @@ -27,10 +34,18 @@ class LearnDataCommand extends Command { else return }) - await msg.reply(`머핀 데이터: ${muffin.length}개 + await ctx.reply(`머핀 데이터: ${muffin.length}개 nsfw 데이터: ${nsfwData.length}개 지금까지 배운 단어: ${learnData.length}개 -${msg.author.username}님이 가르쳐준 단어: ${userData.length}개`) +${user.username}님이 가르쳐준 단어: ${userData.length}개`) + } + + public async messageRun(msg: Message) { + await this._run(msg) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) } } diff --git a/src/Commands/list.ts b/src/Commands/list.ts index 17b4c1f..06f5d49 100644 --- a/src/Commands/list.ts +++ b/src/Commands/list.ts @@ -1,6 +1,6 @@ +import { ChatInputCommandInteraction, Message, codeBlock } from 'discord.js' import { Command, container } from '@sapphire/framework' import { ApplyOptions } from '@sapphire/decorators' -import { Message, codeBlock } from 'discord.js' @ApplyOptions({ name: '리스트', @@ -11,27 +11,39 @@ import { Message, codeBlock } from 'discord.js' }, }) class ListCommand extends Command { - public async messageRun(msg: Message) { + public registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand(builder => + builder.setName(this.name).setDescription(this.description), + ) + } + + private async _run(ctx: Message | ChatInputCommandInteraction) { + const user = ctx instanceof Message ? ctx.author : ctx.user + const ephemeral = + ctx instanceof ChatInputCommandInteraction ? { ephemeral: true } : null const db = this.container.database const data = await db.learn.findMany({ where: { - user_id: msg.author.id, + user_id: user.id, }, }) const list: string[] = [] if (!data[0]) { - return await msg.reply('당신ㄴ은 단어를 가르쳐준 기억이 없ㅅ는데요.') + return await ctx.reply({ + ...ephemeral, + content: '당신ㄴ은 단어를 가르쳐준 기억이 없ㅅ는데요.', + }) } for (const listData of data) { list.push(listData.command) } - await msg.reply({ + await ctx.reply({ embeds: [ { - title: `${msg.author.username}님의 지식`, + title: `${user.username}님의 지식`, description: `총합: ${data.length}개\n${codeBlock( 'md', list.map(item => `- ${item}`).join('\n'), @@ -42,6 +54,14 @@ class ListCommand extends Command { ], }) } + + public async messageRun(msg: Message) { + await this._run(msg) + } + + public async chatInputRun(interaction: ChatInputCommandInteraction) { + await this._run(interaction) + } } void container.stores.loadPiece({ diff --git a/yarn.lock b/yarn.lock index c942e86..2f7e42a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -352,6 +352,13 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.6.0": + version: 0.6.0 + resolution: "@eslint/core@npm:0.6.0" + checksum: 10c0/fffdb3046ad6420f8cb9204b6466fdd8632a9baeebdaf2a97d458a4eac0e16653ba50d82d61835d7d771f6ced0ec942ec482b2fbccc300e45f2cbf784537f240 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^3.1.0": version: 3.1.0 resolution: "@eslint/eslintrc@npm:3.1.0" @@ -369,10 +376,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.11.0, @eslint/js@npm:^9.11.0": - version: 9.11.0 - resolution: "@eslint/js@npm:9.11.0" - checksum: 10c0/7403aeba28ba9cae3470d149b334a51375eb7fd850f167555c81cc72fe98e5cc5ac3059ccdbe68eb255a49d7498a7288d25429af0c7d20afeb4b3c0748349bb4 +"@eslint/js@npm:9.11.1, @eslint/js@npm:^9.11.1": + version: 9.11.1 + resolution: "@eslint/js@npm:9.11.1" + checksum: 10c0/22916ef7b09c6f60c62635d897c66e1e3e38d90b5a5cf5e62769033472ecbcfb6ec7c886090a4b32fe65d6ce371da54384e46c26a899e38184dfc152c6152f7b languageName: node linkType: hard @@ -532,61 +539,61 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:^5.19.1": - version: 5.19.1 - resolution: "@prisma/client@npm:5.19.1" +"@prisma/client@npm:^5.20.0": + version: 5.20.0 + resolution: "@prisma/client@npm:5.20.0" peerDependencies: prisma: "*" peerDependenciesMeta: prisma: optional: true - checksum: 10c0/3fd0c77c831cf592155539d0d369849d5c4f6bbe483b7e5ed476aad29434491a0d5a63ebcda86852484b808fa94bdd614c7715fb2084c0696fdcedd21d3671fb + checksum: 10c0/e7480e49830c1bd2292ea92de979cce4502f886c7e9ac43efb639771bb8fe6150e8688e6ff11de77af999536ad6bf7db1595649352a8527e81b951ad6c43f57f languageName: node linkType: hard -"@prisma/debug@npm:5.19.1": - version: 5.19.1 - resolution: "@prisma/debug@npm:5.19.1" - checksum: 10c0/4b88719b9a0dd76692bec766fd8188b685a81f0459f3df8fb44b4c492b483a6aadaf7021f7aca90afa5a2f27d84d737a3f2d5abed5f9f818a640487f49d1b8c4 +"@prisma/debug@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/debug@npm:5.20.0" + checksum: 10c0/820e3e2c25f1a046024383a3a83f28707a99af1e04f46016c78d6b6231a901353755202578ce27760e00a654b357b634a3e79b99bfe710ba6d6a7f480fcdf6b9 languageName: node linkType: hard -"@prisma/engines-version@npm:5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3": - version: 5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3 - resolution: "@prisma/engines-version@npm:5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3" - checksum: 10c0/9bf4ad5b199054fe56a96ddbda1b835e7f103d690d2b7d04c159f29399261356516ec8881e8caf637bd4523395ccc4ce450013a0c9a8a3ffa16d2fc15b93bfa8 +"@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284": + version: 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 + resolution: "@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284" + checksum: 10c0/1dbe962b5b55015e7f4483e5644bdaec9bf348676d72496f56a6ba365c41d4404a311ed2dd144099146048ccfa45b2752fd9e09765282404d266c4d34179d904 languageName: node linkType: hard -"@prisma/engines@npm:5.19.1": - version: 5.19.1 - resolution: "@prisma/engines@npm:5.19.1" +"@prisma/engines@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/engines@npm:5.20.0" dependencies: - "@prisma/debug": "npm:5.19.1" - "@prisma/engines-version": "npm:5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3" - "@prisma/fetch-engine": "npm:5.19.1" - "@prisma/get-platform": "npm:5.19.1" - checksum: 10c0/d12893935d842fea1c5344e3ab0f769b01ec1c71a91bec3ac9ceb58838fe7f745d226d5b8b9ac386ad503c56773272586bb73188d592ec8d4e05f43285009155 + "@prisma/debug": "npm:5.20.0" + "@prisma/engines-version": "npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284" + "@prisma/fetch-engine": "npm:5.20.0" + "@prisma/get-platform": "npm:5.20.0" + checksum: 10c0/1197d2796f4daef24bc8cf6c5e85ac360e3a1ab6cd0b0a4751650fd728a53f6c66681c39fab9b68b0f78f95586bef174f383dda9e0bca08274d2c1cdcd3b1f9f languageName: node linkType: hard -"@prisma/fetch-engine@npm:5.19.1": - version: 5.19.1 - resolution: "@prisma/fetch-engine@npm:5.19.1" +"@prisma/fetch-engine@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/fetch-engine@npm:5.20.0" dependencies: - "@prisma/debug": "npm:5.19.1" - "@prisma/engines-version": "npm:5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3" - "@prisma/get-platform": "npm:5.19.1" - checksum: 10c0/670d3f604549c4778d32febe56d948896b5c16dad5b51814c5b168a6007c9782d453cebee43cb81ddd58c9e9538811ea1a793516420ecf2c84ae4c3b4ed34f6c + "@prisma/debug": "npm:5.20.0" + "@prisma/engines-version": "npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284" + "@prisma/get-platform": "npm:5.20.0" + checksum: 10c0/854f4fce34b734e5046e4a5e660f2b689a40231f3dfe7c77f805c4011afab1c58570e4d45f915aa69b8889c06ea64ecb763d6f71ba8cc50b26c4365e762dbd63 languageName: node linkType: hard -"@prisma/get-platform@npm:5.19.1": - version: 5.19.1 - resolution: "@prisma/get-platform@npm:5.19.1" +"@prisma/get-platform@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/get-platform@npm:5.20.0" dependencies: - "@prisma/debug": "npm:5.19.1" - checksum: 10c0/a53b5c894cf4074af6164d9c503e387aba92c518ad7bad82be40f834a0030270c60f6149b20951c3e1db32bd836f582053e63c4bf7099461f0160dd5956f063e + "@prisma/debug": "npm:5.20.0" + checksum: 10c0/2a12bf0ffee6842907dd3ea40ce44430ccfcd1135e636a151e9cdbaa91a5bf62eb5f9913066d6caea2f7c87be9fd660d80258a7f775f141d20ddf8067ca651c2 languageName: node linkType: hard @@ -907,6 +914,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + "@types/http-cache-semantics@npm:*": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" @@ -914,6 +928,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + "@types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -939,12 +960,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.5.5": - version: 22.5.5 - resolution: "@types/node@npm:22.5.5" +"@types/node@npm:^22.7.4": + version: 22.7.4 + resolution: "@types/node@npm:22.7.4" dependencies: undici-types: "npm:~6.19.2" - checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c + checksum: 10c0/c22bf54515c78ff3170142c1e718b90e2a0003419dc2d55f79c9c9362edd590a6ab1450deb09ff6e1b32d1b4698da407930b16285e8be3a009ea6cd2695cac01 languageName: node linkType: hard @@ -980,15 +1001,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.6.0" +"@typescript-eslint/eslint-plugin@npm:^8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.7.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.6.0" - "@typescript-eslint/type-utils": "npm:8.6.0" - "@typescript-eslint/utils": "npm:8.6.0" - "@typescript-eslint/visitor-keys": "npm:8.6.0" + "@typescript-eslint/scope-manager": "npm:8.7.0" + "@typescript-eslint/type-utils": "npm:8.7.0" + "@typescript-eslint/utils": "npm:8.7.0" + "@typescript-eslint/visitor-keys": "npm:8.7.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -999,66 +1020,66 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/c777f01535b896d3092f9886a67ccf9e50bf9e0f581ffab607c5e95dbf3092299b0d9f3e6041b134d69059a6fa5691785940b81015f73bb9a0e9d1605f6442ea + checksum: 10c0/f04d6fa6a30e32d51feba0f08789f75ca77b6b67cfe494bdbd9aafa241871edc918fa8b344dc9d13dd59ae055d42c3920f0e542534f929afbfdca653dae598fa languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/parser@npm:8.6.0" +"@typescript-eslint/parser@npm:^8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/parser@npm:8.7.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.6.0" - "@typescript-eslint/types": "npm:8.6.0" - "@typescript-eslint/typescript-estree": "npm:8.6.0" - "@typescript-eslint/visitor-keys": "npm:8.6.0" + "@typescript-eslint/scope-manager": "npm:8.7.0" + "@typescript-eslint/types": "npm:8.7.0" + "@typescript-eslint/typescript-estree": "npm:8.7.0" + "@typescript-eslint/visitor-keys": "npm:8.7.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/3f280d289b486359194d422d89df9896b3f10a6d45cdf851d1d5f3200489271a31ab503c127cb5656f9b0ad6d795dd708b960f21fb105750aac19f41f8f815d1 + checksum: 10c0/1d5020ff1f5d3eb726bc6034d23f0a71e8fe7a713756479a0a0b639215326f71c0b44e2c25cc290b4e7c144bd3c958f1405199711c41601f0ea9174068714a64 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/scope-manager@npm:8.6.0" +"@typescript-eslint/scope-manager@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/scope-manager@npm:8.7.0" dependencies: - "@typescript-eslint/types": "npm:8.6.0" - "@typescript-eslint/visitor-keys": "npm:8.6.0" - checksum: 10c0/37092ef70171c06854ac67ebfb2255063890c1c6133654e6b15b6adb6d2ab83de4feafd1599f4d02ed71a018226fcb3a389021758ec045e1904fb1798e90b4fe + "@typescript-eslint/types": "npm:8.7.0" + "@typescript-eslint/visitor-keys": "npm:8.7.0" + checksum: 10c0/8b731a0d0bd3e8f6a322b3b25006f56879b5d2aad86625070fa438b803cf938cb8d5c597758bfa0d65d6e142b204dc6f363fa239bc44280a74e25aa427408eda languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/type-utils@npm:8.6.0" +"@typescript-eslint/type-utils@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/type-utils@npm:8.7.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.6.0" - "@typescript-eslint/utils": "npm:8.6.0" + "@typescript-eslint/typescript-estree": "npm:8.7.0" + "@typescript-eslint/utils": "npm:8.7.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/914b4637caa40c102117655a9b4451e0db611a61309ed39d6c57522655463c059f4dfd4e2d7ffdefcc9ab7533be21fb877b740c58f5be11f3530aa29f3d2cb62 + checksum: 10c0/2bd9fb93a50ff1c060af41528e39c775ae93b09dd71450defdb42a13c68990dd388460ae4e81fb2f4a49c38dc12152c515d43e845eca6198c44b14aab66733bc languageName: node linkType: hard -"@typescript-eslint/types@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/types@npm:8.6.0" - checksum: 10c0/e7051d212252f7d1905b5527b211e335db4ec5bb1d3a52d73c8d2de6ddf5cbc981f2c92ca9ffcef35f7447bda635ea1ccce5f884ade7f243d14f2a254982c698 +"@typescript-eslint/types@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/types@npm:8.7.0" + checksum: 10c0/f7529eaea4ecc0f5e2d94ea656db8f930f6d1c1e65a3ffcb2f6bec87361173de2ea981405c2c483a35a927b3bdafb606319a1d0395a6feb1284448c8ba74c31e languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.6.0" +"@typescript-eslint/typescript-estree@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.7.0" dependencies: - "@typescript-eslint/types": "npm:8.6.0" - "@typescript-eslint/visitor-keys": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.7.0" + "@typescript-eslint/visitor-keys": "npm:8.7.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1068,31 +1089,31 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/33ab8c03221a797865301f09d1d198c67f8b0e3dbf0d13e41f699dc2740242303a9fcfd7b38302cef318541fdedd832fd6e8ba34a5041a57e9114fa134045385 + checksum: 10c0/d714605b6920a9631ab1511b569c1c158b1681c09005ab240125c442a63e906048064151a61ce5eb5f8fe75cea861ce5ae1d87be9d7296b012e4ab6d88755e8b languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/utils@npm:8.6.0" +"@typescript-eslint/utils@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/utils@npm:8.7.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.6.0" - "@typescript-eslint/types": "npm:8.6.0" - "@typescript-eslint/typescript-estree": "npm:8.6.0" + "@typescript-eslint/scope-manager": "npm:8.7.0" + "@typescript-eslint/types": "npm:8.7.0" + "@typescript-eslint/typescript-estree": "npm:8.7.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/5b615106342dfdf09f5a73e2554cc0c4d979c262a9a4548eb76ec7045768e0ff0bf0316cf8a5eb5404689cd476fcd335fc84f90eb985557559e42aeee33d687e + checksum: 10c0/7355b754ce2fc118773ed27a3e02b7dfae270eec73c2d896738835ecf842e8309544dfd22c5105aba6cae2787bfdd84129bbc42f4b514f57909dc7f6890b8eba languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.6.0" +"@typescript-eslint/visitor-keys@npm:8.7.0": + version: 8.7.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.7.0" dependencies: - "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.7.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/9bd5d5daee9de7e009fdd1b64b1eca685a699d1b2639373bc279c97e25e769fff56fffef708ef66a2b19bc8bb201d36daf9e7084f0e0872178bfcf9d923b41f3 + checksum: 10c0/1240da13c15f9f875644b933b0ad73713ef12f1db5715236824c1ec359e6ef082ce52dd9b2186d40e28be6a816a208c226e6e9af96e5baeb24b4399fe786ae7c languageName: node linkType: hard @@ -1673,6 +1694,13 @@ __metadata: languageName: node linkType: hard +"discord-api-types@npm:0.37.100": + version: 0.37.100 + resolution: "discord-api-types@npm:0.37.100" + checksum: 10c0/315cfbeb475a98ff711d44cb5dd2aa162730a904692775bf9429c384df597d9b950c20668a2177fd926aed52541d0915688e351906466111aae44d8c2063fb83 + languageName: node + linkType: hard + "discord-api-types@npm:0.37.83": version: 0.37.83 resolution: "discord-api-types@npm:0.37.83" @@ -1687,10 +1715,10 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:^0.37.100": - version: 0.37.100 - resolution: "discord-api-types@npm:0.37.100" - checksum: 10c0/315cfbeb475a98ff711d44cb5dd2aa162730a904692775bf9429c384df597d9b950c20668a2177fd926aed52541d0915688e351906466111aae44d8c2063fb83 +"discord-api-types@npm:^0.37.101": + version: 0.37.101 + resolution: "discord-api-types@npm:0.37.101" + checksum: 10c0/b29ebf92e5727bbbbadb20ef86a75c4bda4c48eb5b1975f70f63b8cf8bbb31c98a8c204975929da12892df6ec5494507c5550a597dbaecc000793dc408af93f9 languageName: node linkType: hard @@ -1701,9 +1729,9 @@ __metadata: languageName: node linkType: hard -"discord.js@npm:^14.16.2": - version: 14.16.2 - resolution: "discord.js@npm:14.16.2" +"discord.js@npm:^14.16.3": + version: 14.16.3 + resolution: "discord.js@npm:14.16.3" dependencies: "@discordjs/builders": "npm:^1.9.0" "@discordjs/collection": "npm:1.5.3" @@ -1712,12 +1740,12 @@ __metadata: "@discordjs/util": "npm:^1.1.1" "@discordjs/ws": "npm:1.1.1" "@sapphire/snowflake": "npm:3.5.3" - discord-api-types: "npm:0.37.97" + discord-api-types: "npm:0.37.100" fast-deep-equal: "npm:3.1.3" lodash.snakecase: "npm:4.1.1" tslib: "npm:^2.6.3" undici: "npm:6.19.8" - checksum: 10c0/2b4289d6a3b3f5c2978dbfa840225d2f789eaf161ae85bf12e0125b5096eb64562c170dfc7f0d1ee389beb565cabe45733a27853178b2d0dc78548b5d1a83338 + checksum: 10c0/d3cfcbad532bdb4414df9d12bb1a2f6ca18fa1113726b0e759d298e0e7fbcccf88ee485ada519b092f72d1004e9c4c792efbf3728a050bcd4202b6046161cc98 languageName: node linkType: hard @@ -1937,19 +1965,22 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.11.0": - version: 9.11.0 - resolution: "eslint@npm:9.11.0" +"eslint@npm:^9.11.1": + version: 9.11.1 + resolution: "eslint@npm:9.11.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.11.0" "@eslint/config-array": "npm:^0.18.0" + "@eslint/core": "npm:^0.6.0" "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:9.11.0" + "@eslint/js": "npm:9.11.1" "@eslint/plugin-kit": "npm:^0.2.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.3.0" "@nodelib/fs.walk": "npm:^1.2.8" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.2" @@ -1982,7 +2013,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/3438a78172bc667dc87bc4ad864671bd93231c82c9d366899ea3a77fc3444c8cdd158e7fe3ca1cfe4cb566045b1b36c0ccae9fc20efeb4b187f1a534075a1177 + checksum: 10c0/fc9afc31155fef8c27fc4fd00669aeafa4b89ce5abfbf6f60e05482c03d7ff1d5e7546e416aa47bf0f28c9a56597a94663fd0264c2c42a1890f53cac49189f24 languageName: node linkType: hard @@ -2899,31 +2930,31 @@ __metadata: resolution: "muffinbot@workspace:." dependencies: "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:^9.11.0" + "@eslint/js": "npm:^9.11.1" "@migan/prettier-config": "npm:^1.2.0" - "@prisma/client": "npm:^5.19.1" + "@prisma/client": "npm:^5.20.0" "@sapphire/decorators": "npm:^6.1.0" "@sapphire/discord.js-utilities": "npm:^7.3.0" "@sapphire/framework": "npm:^5.2.1" "@sapphire/pieces": "npm:^4.3.1" "@sapphire/utilities": "npm:^3.17.0" - "@types/node": "npm:^22.5.5" + "@types/node": "npm:^22.7.4" "@types/semver": "npm:^7.5.8" - "@typescript-eslint/eslint-plugin": "npm:^8.6.0" - "@typescript-eslint/parser": "npm:^8.6.0" + "@typescript-eslint/eslint-plugin": "npm:^8.7.0" + "@typescript-eslint/parser": "npm:^8.7.0" "@yarnpkg/pnpify": "npm:^4.1.2" cross-env: "npm:^7.0.3" - discord-api-types: "npm:^0.37.100" - discord.js: "npm:^14.16.2" + discord-api-types: "npm:^0.37.101" + discord.js: "npm:^14.16.3" dokdo: "npm:^1.0.1" dotenv: "npm:^16.4.5" - eslint: "npm:^9.11.0" + eslint: "npm:^9.11.1" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-prettier: "npm:^5.2.1" globals: "npm:^15.9.0" mysql2: "npm:^3.11.3" prettier: "npm:^3.3.3" - prisma: "npm:^5.19.1" + prisma: "npm:^5.20.0" semver: "npm:^7.6.3" tsup: "npm:^8.3.0" typescript: "npm:^5.6.2" @@ -3247,18 +3278,18 @@ __metadata: languageName: node linkType: hard -"prisma@npm:^5.19.1": - version: 5.19.1 - resolution: "prisma@npm:5.19.1" +"prisma@npm:^5.20.0": + version: 5.20.0 + resolution: "prisma@npm:5.20.0" dependencies: - "@prisma/engines": "npm:5.19.1" + "@prisma/engines": "npm:5.20.0" fsevents: "npm:2.3.3" dependenciesMeta: fsevents: optional: true bin: prisma: build/index.js - checksum: 10c0/efbe4966fc5450e8c3c7e09f8e9950c2068e90f44b1cbb3584f4e48d7188a4d5230ec8fb12c3b9ba75fa7407fe45c0527123579e121a31ef652512f39c29c2d9 + checksum: 10c0/8b4ba34421b0552a055e671cecef53a5f244bf79c7fb767c9493f347a1f24f458ed84cdf78e32e067f67b173d98482edf68df1cd6072d523669cf914b4e376a9 languageName: node linkType: hard