Merge branch 'experimental' into develop

This commit is contained in:
Siwoo Jeon 2024-10-01 16:30:52 +09:00
commit 11e784f128
Signed by: migan
GPG key ID: 036E9A8C5E8E48DA
9 changed files with 395 additions and 189 deletions

View file

@ -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",

View file

@ -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'

View file

@ -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<Command.Options>({
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({

View file

@ -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<Command.Options>({
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({

View file

@ -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<Command.Options>({
@ -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({

View file

@ -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<Command.Options>({
@ -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)
}
}

View file

@ -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<Command.Options>({
name: '데이터학습량',
@ -11,14 +11,21 @@ import { type Message } from 'discord.js'
},
})
class LearnDataCommand extends Command {
public async messageRun(msg: Message<true>) {
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)
}
}

View file

@ -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<Command.Options>({
name: '리스트',
@ -11,27 +11,39 @@ import { Message, codeBlock } from 'discord.js'
},
})
class ListCommand extends Command {
public async messageRun(msg: Message<boolean>) {
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<boolean>) {
await this._run(msg)
}
public async chatInputRun(interaction: ChatInputCommandInteraction) {
await this._run(interaction)
}
}
void container.stores.loadPiece({

267
yarn.lock
View file

@ -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