From 713ba46346ae40c45c9eac89c9f19fafee50c69a Mon Sep 17 00:00:00 2001 From: Shane C Date: Sat, 11 Nov 2023 00:24:32 +0000 Subject: [PATCH 1/4] Add stats & mute command --- bun.lockb | Bin 67079 -> 69288 bytes commands/misc/stats.ts | 54 +++++++++ commands/mod/mute.ts | 169 +++++++++++++++++++++++++++++ commands/util/modlog.ts | 2 +- events/guildAuditLogEntryCreate.ts | 3 + package-lock.json | 60 +++++++++- package.json | 8 +- pnpm-lock.yaml | 52 ++++++++- 8 files changed, 340 insertions(+), 8 deletions(-) create mode 100644 commands/misc/stats.ts create mode 100644 commands/mod/mute.ts diff --git a/bun.lockb b/bun.lockb index b8feb186183411e5c3073fab047f8b4e18233d95..391270ad64767f08cebc382fde9b76a677060337 100755 GIT binary patch delta 13377 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 diff --git a/commands/misc/stats.ts b/commands/misc/stats.ts new file mode 100644 index 0000000..86a6af4 --- /dev/null +++ b/commands/misc/stats.ts @@ -0,0 +1,54 @@ +import { ChatInputCommandInteraction, EmbedBuilder, SlashCommandBuilder } from 'discord.js'; +import { Command } from '../../types.js'; +import osUtils from 'node-os-utils'; +import humanizeBytes from 'pretty-bytes'; +import { version } from 'discord.js'; +import { Duration } from '@fleco/duration'; + +export default class StatsCommand extends Command { + + constructor() { + super( + new SlashCommandBuilder() + .setName('stats') + .setDescription('Get the current runtime statistics of the bot'), + ); + } + + async execute(interaction: ChatInputCommandInteraction) { + + const cpuUsage = await osUtils.cpu.usage(); + const { totalMemMb, usedMemMb, usedMemPercentage } = await osUtils.mem.info(); + + const totalMem = humanizeBytes(totalMemMb * 1_000_000); + const usedMem = humanizeBytes(usedMemMb * 1_000_000); + const processMem = humanizeBytes(process.memoryUsage().heapUsed); + + const totalUptime = new Duration({ milliseconds: this.client.uptime as number }).toString(); + + const statEmbed = new EmbedBuilder() + .setTitle('Statistics') + .addFields( + { + name: 'System Stats:', + value: `- CPU Usage: ${cpuUsage}%\n- Total RAM Usage: ${usedMem}/${totalMem} (${usedMemPercentage}%)\n- Process RAM Usage: ${processMem}`, + inline: true, + }, + { + name: 'Runtime Info:', + value: `- Type: ${process.versions.bun ? 'Bun' : 'Node.JS'}\n- Version: ${process.versions.bun ? `v${Bun.version}` : process.version}\n- Discord.JS Version: v${version}\n- Uptime: ${totalUptime}`, + inline: true, + }, + { + name: 'Bot Info:', + value: `- Guilds: ${this.client.guilds.cache.size}\n- Channels: ${this.client.channels.cache.size}\n- Users: ${this.client.users.cache.size}`, + inline: true, + }, + ) + .setColor('Blue'); + + await interaction.reply({ embeds: [ statEmbed ] }); + + } + +} \ No newline at end of file diff --git a/commands/mod/mute.ts b/commands/mod/mute.ts new file mode 100644 index 0000000..5c3da35 --- /dev/null +++ b/commands/mod/mute.ts @@ -0,0 +1,169 @@ +import { SlashCommandBuilder, ChatInputCommandInteraction, EmbedBuilder, PermissionsBitField } from 'discord.js'; +import { Duration } from '@fleco/duration'; +import { Command } from '../../types.js'; +import { nanoid } from 'nanoid'; +import { Temporal } from '@js-temporal/polyfill'; + +export default class MuteCommand extends Command { + + constructor() { + super( + new SlashCommandBuilder() + .setName('mute') + .setDescription('Mutes a user in a server') + .addUserOption((option) => + option + .setName('user') + .setDescription('User to mute') + .setRequired(true), + ) + .addStringOption((option) => + option + .setName('duration') + .setDescription('Duration of mute') + .setRequired(true), + ) + .addStringOption((option) => + option + .setName('reason') + .setDescription('Reason for mute') + .setMaxLength(300), + ) + .setDefaultMemberPermissions(PermissionsBitField.Flags.MuteMembers) + .setDMPermission(false), + ); + } + + async execute(interaction: ChatInputCommandInteraction) { + + const memberFetch = interaction.options.getUser('user', true); + const member = await interaction.guild?.members.fetch(memberFetch.id); + + const reason = interaction.options.getString('reason', false); + + const durString = interaction.options.getString('duration', true); + let duration; + + if (member?.isCommunicationDisabled()) { + + const alrMutedEmbed = new EmbedBuilder() + .setDescription('User is already muted!') + .setColor('Red'); + + await interaction.reply({ embeds: [ alrMutedEmbed ], ephemeral: true }); + return; + + } + + try { + + duration = new Duration(durString); + + } + catch { + + const invalidDurEmbed = new EmbedBuilder() + .setTitle('Invalid duration') + .setDescription(`Invalid Duration Format: \`${durString}\` please use a format like this: \`1h\`, \`1h 30m\`, etc...`) + .setColor('Red'); + + await interaction.reply({ embeds: [ invalidDurEmbed ], ephemeral: true }); + return; + + } + + try { + + await member?.disableCommunicationUntil(duration.endDate(), reason ? `${reason} - ${interaction.member?.user.username}` : `Timed out by ${interaction.member?.user.username}`); + + } + catch (e) { + + const cannotMuteEmbed = new EmbedBuilder() + .setDescription('Cannot mute user, please check the bot permissions/hierarchy') + .setColor('Red'); + + await interaction.reply({ embeds: [ cannotMuteEmbed ], ephemeral: true }); + return; + + + } + + const totalModlogs = await this.client.db.modlog.count({ + where: { + serverID: interaction.guild?.id, + }, + }); + + const endDate = Temporal.Now.instant().add(duration.duration); + const date = Temporal.Now.instant(); + + const server = await this.client.db.server.findFirst({ + where: { + id: interaction.guild?.id, + }, + include: { + config: true, + modlogs: true, + }, + }); + + let msg; + + if (server!.config?.modlog_chan) { + + const muteEmbed = new EmbedBuilder() + .setAuthor({ name: 'Fleco Modlog', iconURL: this.client.user?.displayAvatarURL({ extension: 'webp' }) }) + .setTitle('Event - User Mute') + .addFields( + { + name: 'User Info:', + value: `- **ID:** ${member?.user.id}\n- **Username:** ${member?.user.username}`, + inline: true, + }, + { + name: 'Mod Info:', + value: `- **ID:** ${interaction.member?.user.id}\n- **Username:** ${interaction.member?.user.username}`, + inline: true, + }, + { + name: 'Info:', + value: `- **Reason:** ${reason ?? 'None'}\n- **Muted Until:** **][** \n- **Date:** `, + }, + ) + .setFooter({ text: `Case Number: ${server!.modlogs.length + 1}` }) + .setColor('Gold'); + + const modlogChan = await interaction.guild?.channels.fetch(server!.config.modlog_chan); + + if (!modlogChan || !modlogChan.isTextBased()) return; + + msg = await modlogChan.send({ embeds: [ muteEmbed ] }); + + } + + await this.client.db.modlog.create({ + data: { + id: nanoid(), + serverID: interaction.guild!.id, + type: 'mute', + reason: reason ?? 'None', + userID: member!.user.id, + modID: interaction.member!.user.id, + date: date.toString(), + endDate: endDate.toString(), + caseNum: totalModlogs + 1, + logMsgID: msg?.id ?? null, + }, + }); + + const muteEmbed = new EmbedBuilder() + .setAuthor({ name: 'Fleco', iconURL: this.client.user?.displayAvatarURL({ extension: 'webp' }) }) + .setDescription(`Muted <@${member?.user.id}> for ${duration.toString()}`) + .setColor('Blue'); + + await interaction.reply({ embeds: [ muteEmbed ], ephemeral: true }); + + } + +} \ No newline at end of file diff --git a/commands/util/modlog.ts b/commands/util/modlog.ts index a75b98e..6105b43 100644 --- a/commands/util/modlog.ts +++ b/commands/util/modlog.ts @@ -371,7 +371,7 @@ export default class ModlogCommand extends Command { for (const modlog of logs) { - const date = Temporal.Instant.from(modlog.date).epochSeconds; + const date = Temporal.Instant.from(modlog.endDate as string).epochSeconds; let fieldValueString = fieldLayout .replace('{{modlog_reason}}', modlog.reason) diff --git a/events/guildAuditLogEntryCreate.ts b/events/guildAuditLogEntryCreate.ts index d04e675..19f42e7 100644 --- a/events/guildAuditLogEntryCreate.ts +++ b/events/guildAuditLogEntryCreate.ts @@ -29,6 +29,8 @@ export default class AuditLogEntryCreate extends Event { let msg: Message | null = null; + if (mod.id === this.client.user?.id) return; + switch (entry.action) { case AuditLogEvent.MemberBanAdd: @@ -129,6 +131,7 @@ export default class AuditLogEntryCreate extends Event { }, }); + break; case AuditLogEvent.MemberKick: diff --git a/package-lock.json b/package-lock.json index 31768c5..5eedf25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,20 +9,27 @@ "version": "0.1.0", "license": "CC0-1.0", "dependencies": { + "@fleco/duration": "^0.1.7", "@js-temporal/polyfill": "^0.4.4", - "@prisma/client": "5.4.2", + "@prisma/client": "latest", + "byte-size": "^8.1.1", "commander": "^11.1.0", "discord.js": "^14.13.0", + "format-duration": "^3.0.2", "nanoid": "^5.0.2", + "node-os-utils": "^1.3.7", + "pretty-bytes": "^6.1.1", "yaml": "^2.3.3" }, "devDependencies": { + "@types/byte-size": "^8.1.2", "@types/node": "^20.8.7", + "@types/node-os-utils": "^1.3.3", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", "bun-types": "^1.0.6", "eslint": "^8.51.0", - "prisma": "^5.4.2", + "prisma": "latest", "typescript": "^5.2.2" } }, @@ -173,6 +180,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fleco/duration": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@fleco/duration/-/duration-0.1.7.tgz", + "integrity": "sha512-HfWEQ1Rg/sUb+uOKu6BXPXELMLIYG5gmy2IG6hWW9VfY9fjhE5j4GCDAt39Bp/dTWxTriRAVJJrtpSCocUEs9w==", + "dependencies": { + "@js-temporal/polyfill": "^0.4.4" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", @@ -316,6 +331,12 @@ "npm": ">=7.0.0" } }, + "node_modules/@types/byte-size": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.2.tgz", + "integrity": "sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.14", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", @@ -330,6 +351,12 @@ "undici-types": "~5.25.1" } }, + "node_modules/@types/node-os-utils": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/node-os-utils/-/node-os-utils-1.3.4.tgz", + "integrity": "sha512-BCUYrbdoO4FUbx6MB9atLNFnkxdliFaxdiTJMIPPiecXIApc5zf4NIqV5G1jWv/ReZvtYyHLs40RkBjHX+vykA==", + "dev": true + }, "node_modules/@types/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", @@ -677,6 +704,14 @@ "node": ">=10.16.0" } }, + "node_modules/byte-size": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "engines": { + "node": ">=12.17" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1091,6 +1126,11 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/format-duration": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/format-duration/-/format-duration-3.0.2.tgz", + "integrity": "sha512-pKzJDSRgK2lqAiPW3uizDaIJaJnataZclsahz25UMwfdryBGDa+1HlbXGjzpMvX/2kMh4O0sNevFXKaEfCjHsA==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1454,6 +1494,11 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-os-utils": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/node-os-utils/-/node-os-utils-1.3.7.tgz", + "integrity": "sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1579,6 +1624,17 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prisma": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.4.2.tgz", diff --git a/package.json b/package.json index 3f4d6f9..5ea3f48 100644 --- a/package.json +++ b/package.json @@ -23,16 +23,22 @@ }, "homepage": "https://github.com/Fleco-Development/fleco#readme", "dependencies": { - "@fleco/duration": "^0.1.4", + "@fleco/duration": "^0.1.7", "@js-temporal/polyfill": "^0.4.4", "@prisma/client": "latest", + "byte-size": "^8.1.1", "commander": "^11.1.0", "discord.js": "^14.13.0", + "format-duration": "^3.0.2", "nanoid": "^5.0.2", + "node-os-utils": "^1.3.7", + "pretty-bytes": "^6.1.1", "yaml": "^2.3.3" }, "devDependencies": { + "@types/byte-size": "^8.1.2", "@types/node": "^20.8.7", + "@types/node-os-utils": "^1.3.3", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", "bun-types": "^1.0.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e19c521..9d6e901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,31 +6,49 @@ settings: dependencies: '@fleco/duration': - specifier: ^0.1.4 - version: 0.1.4 + specifier: ^0.1.7 + version: 0.1.7 '@js-temporal/polyfill': specifier: ^0.4.4 version: 0.4.4 '@prisma/client': specifier: latest version: 5.5.2(prisma@5.5.2) + byte-size: + specifier: ^8.1.1 + version: 8.1.1 commander: specifier: ^11.1.0 version: 11.1.0 discord.js: specifier: ^14.13.0 version: 14.13.0 + format-duration: + specifier: ^3.0.2 + version: 3.0.2 nanoid: specifier: ^5.0.2 version: 5.0.2 + node-os-utils: + specifier: ^1.3.7 + version: 1.3.7 + pretty-bytes: + specifier: ^6.1.1 + version: 6.1.1 yaml: specifier: ^2.3.3 version: 2.3.3 devDependencies: + '@types/byte-size': + specifier: ^8.1.2 + version: 8.1.2 '@types/node': specifier: ^20.8.7 version: 20.8.7 + '@types/node-os-utils': + specifier: ^1.3.3 + version: 1.3.4 '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.51.0)(typescript@5.2.2) @@ -157,8 +175,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@fleco/duration@0.1.4: - resolution: {integrity: sha512-ncMjQ7J8Hn+e9J5cUZXpN22fIL28l5m9LU+I06tImsmQ9+TvoHMehiOHkgvAljs7RLRRqDAfHGdxtiCZ6Mb3zg==} + /@fleco/duration@0.1.7: + resolution: {integrity: sha512-HfWEQ1Rg/sUb+uOKu6BXPXELMLIYG5gmy2IG6hWW9VfY9fjhE5j4GCDAt39Bp/dTWxTriRAVJJrtpSCocUEs9w==} dependencies: '@js-temporal/polyfill': 0.4.4 dev: false @@ -252,10 +270,18 @@ packages: engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false + /@types/byte-size@8.1.2: + resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} + dev: true + /@types/json-schema@7.0.14: resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} dev: true + /@types/node-os-utils@1.3.4: + resolution: {integrity: sha512-BCUYrbdoO4FUbx6MB9atLNFnkxdliFaxdiTJMIPPiecXIApc5zf4NIqV5G1jWv/ReZvtYyHLs40RkBjHX+vykA==} + dev: true + /@types/node@20.8.7: resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==} dependencies: @@ -480,6 +506,11 @@ packages: streamsearch: 1.1.0 dev: false + /byte-size@8.1.1: + resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==} + engines: {node: '>=12.17'} + dev: false + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -739,6 +770,10 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true + /format-duration@3.0.2: + resolution: {integrity: sha512-pKzJDSRgK2lqAiPW3uizDaIJaJnataZclsahz25UMwfdryBGDa+1HlbXGjzpMvX/2kMh4O0sNevFXKaEfCjHsA==} + dev: false + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -951,6 +986,10 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /node-os-utils@1.3.7: + resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==} + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -1020,6 +1059,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: false + /prisma@5.5.2: resolution: {integrity: sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==} engines: {node: '>=16.13'} From 7a8c8c86fc41848b9d5123f31966b5d7ec53a87b Mon Sep 17 00:00:00 2001 From: Shane C Date: Sat, 11 Nov 2023 00:49:11 +0000 Subject: [PATCH 2/4] Added unmute cmd --- commands/mod/mute.ts | 2 +- commands/mod/unmute.ts | 70 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 commands/mod/unmute.ts diff --git a/commands/mod/mute.ts b/commands/mod/mute.ts index 5c3da35..b8fbbd1 100644 --- a/commands/mod/mute.ts +++ b/commands/mod/mute.ts @@ -77,7 +77,7 @@ export default class MuteCommand extends Command { await member?.disableCommunicationUntil(duration.endDate(), reason ? `${reason} - ${interaction.member?.user.username}` : `Timed out by ${interaction.member?.user.username}`); } - catch (e) { + catch { const cannotMuteEmbed = new EmbedBuilder() .setDescription('Cannot mute user, please check the bot permissions/hierarchy') diff --git a/commands/mod/unmute.ts b/commands/mod/unmute.ts new file mode 100644 index 0000000..3d1af91 --- /dev/null +++ b/commands/mod/unmute.ts @@ -0,0 +1,70 @@ +import { ChatInputCommandInteraction, PermissionsBitField, SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import { Command } from '../../types.js'; + +export default class UnmuteCommand extends Command { + + constructor() { + super( + new SlashCommandBuilder() + .setName('unmute') + .setDescription('Unmutes a currently muted user.') + .addUserOption(option => + option + .setName('user') + .setDescription('User to unmute') + .setRequired(true), + ) + .addStringOption(option => + option + .setName('reason') + .setDescription('Reason for unmute'), + ) + .setDefaultMemberPermissions(PermissionsBitField.Flags.MuteMembers) + .setDMPermission(false), + ); + } + + async execute(interaction: ChatInputCommandInteraction) { + + const memberFetch = interaction.options.getUser('user', true); + const member = await interaction.guild?.members.fetch(memberFetch.id); + + const reason = interaction.options.getString('reason', false); + + if (!member?.isCommunicationDisabled()) { + + const notMutedEmbed = new EmbedBuilder() + .setDescription('User is not muted!') + .setColor('Red'); + + await interaction.reply({ embeds: [ notMutedEmbed ], ephemeral: true }); + return; + + } + + try { + + await member?.disableCommunicationUntil(null, reason ? `${reason} - ${interaction.member?.user.username}` : `Timed out by ${interaction.member?.user.username}`); + + } + catch { + + const cannotUnmuteEmbed = new EmbedBuilder() + .setDescription('Cannot unmute user, please check the bot permissions/hierarchy') + .setColor('Red'); + + await interaction.reply({ embeds: [ cannotUnmuteEmbed ], ephemeral: true }); + return; + + } + + const unmuteEmbed = new EmbedBuilder() + .setAuthor({ name: 'Fleco', iconURL: this.client.user?.displayAvatarURL({ extension: 'webp' }) }) + .setDescription(`Unmuted <@${member?.user.id}>`) + .setColor('Blue'); + + await interaction.reply({ embeds: [ unmuteEmbed ], ephemeral: true }); + + } + +} \ No newline at end of file From c22306fb3528cdf01512d65d97b222196423130c Mon Sep 17 00:00:00 2001 From: Shane C Date: Sun, 12 Nov 2023 01:12:42 +0000 Subject: [PATCH 3/4] Added kick, added mem check in mute/unmute --- commands/mod/kick.ts | 129 +++++++++++++++++++++++++++++++++++++++++ commands/mod/mute.ts | 16 ++++- commands/mod/unmute.ts | 18 +++++- 3 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 commands/mod/kick.ts diff --git a/commands/mod/kick.ts b/commands/mod/kick.ts new file mode 100644 index 0000000..c1ee096 --- /dev/null +++ b/commands/mod/kick.ts @@ -0,0 +1,129 @@ +import { PermissionFlagsBits, SlashCommandBuilder, ChatInputCommandInteraction, EmbedBuilder } from 'discord.js'; +import { Temporal } from '@js-temporal/polyfill'; +import { Command } from '../../types.js'; +import { nanoid } from 'nanoid'; + +export default class KickCommand extends Command { + + constructor() { + super( + new SlashCommandBuilder() + .setName('kick') + .setDescription('Kicks a user from the server.') + .addUserOption(option => + option + .setName('user') + .setDescription('User to kick'), + ) + .addStringOption(option => + option + .setName('reason') + .setDescription('Reason for kick') + .setMaxLength(300), + ) + .setDefaultMemberPermissions(PermissionFlagsBits.KickMembers) + .setDMPermission(false), + ); + } + + async execute(interaction: ChatInputCommandInteraction) { + + const memberFetch = interaction.options.getUser('user', true); + const member = await interaction.guild?.members.fetch(memberFetch.id); + + if (!member) { + + const memberNoExist = new EmbedBuilder() + .setDescription('Member is not in the server!') + .setColor('Red'); + + await interaction.reply({ embeds: [ memberNoExist ], ephemeral: true }); + return; + + } + + const reason = interaction.options.getString('reason', false); + + if (!member?.kickable) { + + const cannotKickEmbed = new EmbedBuilder() + .setDescription('Cannot kick user, please check the bot permissions/hierarchy') + .setColor('Red'); + + await interaction.reply({ embeds: [ cannotKickEmbed ], ephemeral: true }); + return; + + } + + await member.kick(reason ? `${reason} - ${interaction.member?.user.username}` : `Kicked by ${interaction.member?.user.username}`); + + const date = Temporal.Now.instant(); + + const server = await this.client.db.server.findFirst({ + where: { + id: interaction.guild?.id, + }, + include: { + config: true, + modlogs: true, + }, + }); + + let msg; + + if (server?.config?.modlog_chan) { + + const kickEmbed = new EmbedBuilder() + .setAuthor({ name: 'Fleco Modlog', iconURL: this.client.user?.displayAvatarURL({ extension: 'webp' }) }) + .setTitle('Event - User Kick') + .addFields( + { + name: 'User Info:', + value: `- **ID:** ${member.user.id}\n- **Username:** ${member.user.username}`, + inline: true, + }, + { + name: 'Mod Info:', + value: `- **ID:** ${interaction.member?.user.id}\n- **Username:** ${interaction.member?.user.username}`, + inline: true, + }, + { + name: 'Info:', + value: `- **Reason:** ${reason ?? 'none'}\n- **Date:** `, + }, + ) + .setFooter({ text: `Case Number: ${server.modlogs.length + 1}` }) + .setColor('Gold'); + + const modlogChan = await interaction.guild?.channels.fetch(server.config.modlog_chan); + + if (!modlogChan || !modlogChan.isTextBased()) return; + + msg = await modlogChan.send({ embeds: [ kickEmbed ] }); + + } + + await this.client.db.modlog.create({ + data: { + id: nanoid(), + serverID: interaction.guild!.id, + type: 'kick', + reason: reason ?? 'None', + userID: member.user.id, + modID: interaction.member!.user.id, + date: date.toString(), + caseNum: server!.modlogs.length + 1, + logMsgID: msg?.id, + }, + }); + + const kickEmbed = new EmbedBuilder() + .setAuthor({ name: 'Fleco', iconURL: this.client.user?.displayAvatarURL({ extension: 'webp' }) }) + .setDescription(`Kicked <@${member?.user.id}> `) + .setColor('Blue'); + + await interaction.reply({ embeds: [ kickEmbed ], ephemeral: true }); + + } + +} \ No newline at end of file diff --git a/commands/mod/mute.ts b/commands/mod/mute.ts index b8fbbd1..37c5b52 100644 --- a/commands/mod/mute.ts +++ b/commands/mod/mute.ts @@ -1,4 +1,4 @@ -import { SlashCommandBuilder, ChatInputCommandInteraction, EmbedBuilder, PermissionsBitField } from 'discord.js'; +import { SlashCommandBuilder, ChatInputCommandInteraction, EmbedBuilder, PermissionFlagsBits } from 'discord.js'; import { Duration } from '@fleco/duration'; import { Command } from '../../types.js'; import { nanoid } from 'nanoid'; @@ -29,7 +29,7 @@ export default class MuteCommand extends Command { .setDescription('Reason for mute') .setMaxLength(300), ) - .setDefaultMemberPermissions(PermissionsBitField.Flags.MuteMembers) + .setDefaultMemberPermissions(PermissionFlagsBits.MuteMembers) .setDMPermission(false), ); } @@ -39,6 +39,17 @@ export default class MuteCommand extends Command { const memberFetch = interaction.options.getUser('user', true); const member = await interaction.guild?.members.fetch(memberFetch.id); + if (!member) { + + const memberNoExist = new EmbedBuilder() + .setDescription('Member is not in the server!') + .setColor('Red'); + + await interaction.reply({ embeds: [ memberNoExist ], ephemeral: true }); + return; + + } + const reason = interaction.options.getString('reason', false); const durString = interaction.options.getString('duration', true); @@ -86,7 +97,6 @@ export default class MuteCommand extends Command { await interaction.reply({ embeds: [ cannotMuteEmbed ], ephemeral: true }); return; - } const totalModlogs = await this.client.db.modlog.count({ diff --git a/commands/mod/unmute.ts b/commands/mod/unmute.ts index 3d1af91..59421f2 100644 --- a/commands/mod/unmute.ts +++ b/commands/mod/unmute.ts @@ -1,4 +1,4 @@ -import { ChatInputCommandInteraction, PermissionsBitField, SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import { ChatInputCommandInteraction, PermissionFlagsBits, SlashCommandBuilder, EmbedBuilder } from 'discord.js'; import { Command } from '../../types.js'; export default class UnmuteCommand extends Command { @@ -17,9 +17,10 @@ export default class UnmuteCommand extends Command { .addStringOption(option => option .setName('reason') - .setDescription('Reason for unmute'), + .setDescription('Reason for unmute') + .setMaxLength(300), ) - .setDefaultMemberPermissions(PermissionsBitField.Flags.MuteMembers) + .setDefaultMemberPermissions(PermissionFlagsBits.MuteMembers) .setDMPermission(false), ); } @@ -29,6 +30,17 @@ export default class UnmuteCommand extends Command { const memberFetch = interaction.options.getUser('user', true); const member = await interaction.guild?.members.fetch(memberFetch.id); + if (!member) { + + const memberNoExist = new EmbedBuilder() + .setDescription('Member is not in the server!') + .setColor('Red'); + + await interaction.reply({ embeds: [ memberNoExist ], ephemeral: true }); + return; + + } + const reason = interaction.options.getString('reason', false); if (!member?.isCommunicationDisabled()) { From c2cd729959dc38709fcbd29ecee73cd0b1b5b9a4 Mon Sep 17 00:00:00 2001 From: Shane Caffoe Date: Mon, 20 Nov 2023 15:59:07 +0000 Subject: [PATCH 4/4] Update dependencies --- bun.lockb | Bin 69288 -> 73436 bytes package-lock.json | 349 +++++++++++++++++++++------------------------- package.json | 10 +- pnpm-lock.yaml | 188 ++++++++++++------------- 4 files changed, 255 insertions(+), 292 deletions(-) diff --git a/bun.lockb b/bun.lockb index 391270ad64767f08cebc382fde9b76a677060337..288d4feb841bb5bd431e3a16c237c2dd7be5f4ee 100755 GIT binary patch delta 14536 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.11.0" @@ -68,62 +68,78 @@ } }, "node_modules/@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz", + "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==", "dependencies": { - "discord-api-types": "0.37.50" + "discord-api-types": "0.37.61" }, "engines": { "node": ">=16.11.0" } }, "node_modules/@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", "@sapphire/async-queue": "^1.5.0", "@sapphire/snowflake": "^3.5.1", "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" }, "engines": { "node": ">=16.11.0" } }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, "node_modules/@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz", + "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==", "engines": { "node": ">=16.11.0" } }, "node_modules/@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz", + "integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==", "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", + "@discordjs/collection": "^2.0.0", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", + "@types/ws": "^8.5.9", "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" + "discord-api-types": "0.37.61", + "tslib": "^2.6.2", + "ws": "^8.14.2" }, "engines": { "node": ">=16.11.0" } }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -180,6 +196,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@fleco/duration": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/@fleco/duration/-/duration-0.1.7.tgz", @@ -269,12 +293,12 @@ } }, "node_modules/@prisma/client": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.4.2.tgz", - "integrity": "sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz", + "integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" + "@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" }, "engines": { "node": ">=16.13" @@ -289,16 +313,16 @@ } }, "node_modules/@prisma/engines": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.4.2.tgz", - "integrity": "sha512-fqeucJ3LH0e1eyFdT0zRx+oETLancu5+n4lhiYECyEz6H2RDskPJHJYHkVc0LhkU4Uv7fuEnppKU3nVKNzMh8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz", + "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz", - "integrity": "sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA==" + "version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz", + "integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw==" }, "node_modules/@sapphire/async-queue": { "version": "1.5.0", @@ -338,9 +362,9 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/node": { @@ -358,30 +382,30 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, "node_modules/@types/ws": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", - "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", - "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/type-utils": "6.9.0", - "@typescript-eslint/utils": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -407,15 +431,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", - "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", + "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4" }, "engines": { @@ -435,13 +459,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", - "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -452,13 +476,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", - "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/utils": "6.9.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -479,9 +503,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", - "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -492,13 +516,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", - "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -519,17 +543,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", - "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", "semver": "^7.5.4" }, "engines": { @@ -544,12 +568,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", - "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -673,37 +697,12 @@ "node": ">=8" } }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/bun-types": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.0.6.tgz", "integrity": "sha512-5QwynfXiRCRxPW3ZnC0Dv+sHHmctP4SHIuzsRKOWYO0HF/qUpsxQVexoviaxpmwDsF1hoVDDFdc4xUuafOzx1g==", "dev": true }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/byte-size": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", @@ -819,29 +818,29 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" }, "node_modules/discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dependencies": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz", + "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==", + "dependencies": { + "@discordjs/builders": "^1.7.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.3.3", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@discordjs/ws": "^1.0.2", + "@sapphire/snowflake": "3.5.1", + "@types/ws": "8.5.9", + "discord-api-types": "0.37.61", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "2.6.2", + "undici": "5.27.2", + "ws": "8.14.2" }, "engines": { "node": ">=16.11.0" @@ -1018,9 +1017,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1482,18 +1481,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", - "optional": true, - "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-os-utils": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/node-os-utils/-/node-os-utils-1.3.7.tgz", @@ -1636,13 +1623,13 @@ } }, "node_modules/prisma": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.4.2.tgz", - "integrity": "sha512-GDMZwZy7mysB2oXU+angQqJ90iaPFdD0rHaZNkn+dio5NRkGLmMqmXs31//tg/qXT3iB0cTQwnGGQNuirhSTZg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz", + "integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "5.4.2" + "@prisma/engines": "5.6.0" }, "bin": { "prisma": "build/index.js" @@ -1782,14 +1769,6 @@ "node": ">=8" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1904,11 +1883,11 @@ } }, "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", "dependencies": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" }, "engines": { "node": ">=14.0" @@ -1928,20 +1907,6 @@ "punycode": "^2.1.0" } }, - "node_modules/utf-8-validate": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", - "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 5ea3f48..e54b24c 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,10 @@ "dependencies": { "@fleco/duration": "^0.1.7", "@js-temporal/polyfill": "^0.4.4", - "@prisma/client": "latest", + "@prisma/client": "^5.5.2", "byte-size": "^8.1.1", "commander": "^11.1.0", - "discord.js": "^14.13.0", + "discord.js": "^14.14.1", "format-duration": "^3.0.2", "nanoid": "^5.0.2", "node-os-utils": "^1.3.7", @@ -39,11 +39,11 @@ "@types/byte-size": "^8.1.2", "@types/node": "^20.8.7", "@types/node-os-utils": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "@typescript-eslint/parser": "^6.11.0", "bun-types": "^1.0.6", "eslint": "^8.51.0", - "prisma": "latest", + "prisma": "^5.5.2", "typescript": "^5.2.2" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d6e901..6eb35f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ dependencies: specifier: ^0.4.4 version: 0.4.4 '@prisma/client': - specifier: latest + specifier: ^5.5.2 version: 5.5.2(prisma@5.5.2) byte-size: specifier: ^8.1.1 @@ -21,8 +21,8 @@ dependencies: specifier: ^11.1.0 version: 11.1.0 discord.js: - specifier: ^14.13.0 - version: 14.13.0 + specifier: ^14.14.1 + version: 14.14.1 format-duration: specifier: ^3.0.2 version: 3.0.2 @@ -50,11 +50,11 @@ devDependencies: specifier: ^1.3.3 version: 1.3.4 '@typescript-eslint/eslint-plugin': - specifier: ^6.9.0 - version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.11.0 + version: 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.51.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^6.9.0 - version: 6.9.1(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.11.0 + version: 6.11.0(eslint@8.51.0)(typescript@5.2.2) bun-types: specifier: ^1.0.6 version: 1.0.6 @@ -62,7 +62,7 @@ devDependencies: specifier: ^8.51.0 version: 8.51.0 prisma: - specifier: latest + specifier: ^5.5.2 version: 5.5.2 typescript: specifier: ^5.2.2 @@ -75,14 +75,14 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@discordjs/builders@1.6.5: - resolution: {integrity: sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==} + /@discordjs/builders@1.7.0: + resolution: {integrity: sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==} engines: {node: '>=16.11.0'} dependencies: - '@discordjs/formatters': 0.3.2 - '@discordjs/util': 1.0.1 + '@discordjs/formatters': 0.3.3 + '@discordjs/util': 1.0.2 '@sapphire/shapeshift': 3.9.3 - discord-api-types: 0.37.50 + discord-api-types: 0.37.61 fast-deep-equal: 3.1.3 ts-mixer: 6.0.3 tslib: 2.6.2 @@ -93,44 +93,49 @@ packages: engines: {node: '>=16.11.0'} dev: false - /@discordjs/formatters@0.3.2: - resolution: {integrity: sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==} + /@discordjs/collection@2.0.0: + resolution: {integrity: sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==} + engines: {node: '>=18'} + dev: false + + /@discordjs/formatters@0.3.3: + resolution: {integrity: sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==} engines: {node: '>=16.11.0'} dependencies: - discord-api-types: 0.37.50 + discord-api-types: 0.37.61 dev: false - /@discordjs/rest@2.0.1: - resolution: {integrity: sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==} + /@discordjs/rest@2.2.0: + resolution: {integrity: sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==} engines: {node: '>=16.11.0'} dependencies: - '@discordjs/collection': 1.5.3 - '@discordjs/util': 1.0.1 + '@discordjs/collection': 2.0.0 + '@discordjs/util': 1.0.2 '@sapphire/async-queue': 1.5.0 '@sapphire/snowflake': 3.5.1 '@vladfrangu/async_event_emitter': 2.2.2 - discord-api-types: 0.37.50 + discord-api-types: 0.37.61 magic-bytes.js: 1.5.0 tslib: 2.6.2 - undici: 5.22.1 + undici: 5.27.2 dev: false - /@discordjs/util@1.0.1: - resolution: {integrity: sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==} + /@discordjs/util@1.0.2: + resolution: {integrity: sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==} engines: {node: '>=16.11.0'} dev: false - /@discordjs/ws@1.0.1: - resolution: {integrity: sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==} + /@discordjs/ws@1.0.2: + resolution: {integrity: sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==} engines: {node: '>=16.11.0'} dependencies: - '@discordjs/collection': 1.5.3 - '@discordjs/rest': 2.0.1 - '@discordjs/util': 1.0.1 + '@discordjs/collection': 2.0.0 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 '@sapphire/async-queue': 1.5.0 - '@types/ws': 8.5.8 + '@types/ws': 8.5.9 '@vladfrangu/async_event_emitter': 2.2.2 - discord-api-types: 0.37.50 + discord-api-types: 0.37.61 tslib: 2.6.2 ws: 8.14.2 transitivePeerDependencies: @@ -175,6 +180,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fastify/busboy@2.1.0: + resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + engines: {node: '>=14'} + dev: false + /@fleco/duration@0.1.7: resolution: {integrity: sha512-HfWEQ1Rg/sUb+uOKu6BXPXELMLIYG5gmy2IG6hWW9VfY9fjhE5j4GCDAt39Bp/dTWxTriRAVJJrtpSCocUEs9w==} dependencies: @@ -291,14 +301,14 @@ packages: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true - /@types/ws@8.5.8: - resolution: {integrity: sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==} + /@types/ws@8.5.9: + resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} dependencies: '@types/node': 20.8.7 dev: false - /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} + /@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -309,11 +319,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.9.1(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/type-utils': 6.9.1(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.1(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/parser': 6.11.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/type-utils': 6.11.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 eslint: 8.51.0 graphemer: 1.4.0 @@ -326,8 +336,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.9.1(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} + /@typescript-eslint/parser@6.11.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -336,10 +346,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 eslint: 8.51.0 typescript: 5.2.2 @@ -347,16 +357,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.9.1: - resolution: {integrity: sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==} + /@typescript-eslint/scope-manager@6.11.0: + resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 dev: true - /@typescript-eslint/type-utils@6.9.1(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} + /@typescript-eslint/type-utils@6.11.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -365,8 +375,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.1(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.51.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.51.0 ts-api-utils: 1.0.3(typescript@5.2.2) @@ -375,13 +385,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.9.1: - resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==} + /@typescript-eslint/types@6.11.0: + resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.9.1(typescript@5.2.2): - resolution: {integrity: sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==} + /@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2): + resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -389,8 +399,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -401,8 +411,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.9.1(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} + /@typescript-eslint/utils@6.11.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -410,9 +420,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) '@types/json-schema': 7.0.14 '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) eslint: 8.51.0 semver: 7.5.4 transitivePeerDependencies: @@ -420,11 +430,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.9.1: - resolution: {integrity: sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==} + /@typescript-eslint/visitor-keys@6.11.0: + resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/types': 6.11.0 eslint-visitor-keys: 3.4.3 dev: true @@ -499,13 +509,6 @@ packages: resolution: {integrity: sha512-5QwynfXiRCRxPW3ZnC0Dv+sHHmctP4SHIuzsRKOWYO0HF/qUpsxQVexoviaxpmwDsF1hoVDDFdc4xUuafOzx1g==} dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - /byte-size@8.1.1: resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==} engines: {node: '>=12.17'} @@ -576,27 +579,27 @@ packages: path-type: 4.0.0 dev: true - /discord-api-types@0.37.50: - resolution: {integrity: sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==} + /discord-api-types@0.37.61: + resolution: {integrity: sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==} dev: false - /discord.js@14.13.0: - resolution: {integrity: sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==} + /discord.js@14.14.1: + resolution: {integrity: sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==} engines: {node: '>=16.11.0'} dependencies: - '@discordjs/builders': 1.6.5 + '@discordjs/builders': 1.7.0 '@discordjs/collection': 1.5.3 - '@discordjs/formatters': 0.3.2 - '@discordjs/rest': 2.0.1 - '@discordjs/util': 1.0.1 - '@discordjs/ws': 1.0.1 + '@discordjs/formatters': 0.3.3 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 + '@discordjs/ws': 1.0.2 '@sapphire/snowflake': 3.5.1 - '@types/ws': 8.5.8 - discord-api-types: 0.37.50 + '@types/ws': 8.5.9 + discord-api-types: 0.37.61 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 tslib: 2.6.2 - undici: 5.22.1 + undici: 5.27.2 ws: 8.14.2 transitivePeerDependencies: - bufferutil @@ -1129,11 +1132,6 @@ packages: engines: {node: '>=8'} dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1202,11 +1200,11 @@ packages: /undici-types@5.25.3: resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} - /undici@5.22.1: - resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + /undici@5.27.2: + resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} engines: {node: '>=14.0'} dependencies: - busboy: 1.6.0 + '@fastify/busboy': 2.1.0 dev: false /uri-js@4.4.1: