diff --git a/OLD/base/BaseCommand.js b/OLD/base/BaseCommand.js deleted file mode 100644 index 2e5fd642..00000000 --- a/OLD/base/BaseCommand.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable no-unused-vars */ -import { sep } from "path"; - -class BaseCommand { - constructor(options, client) { - /** - * @type {import("discord.js").SlashCommandBuilder | import("discord.js").ContextMenuCommandBuilder | import("discord.js").ApplicationCommandData} - */ - this.command = options.command; - /** - * @type {Boolean} - */ - this.ownerOnly = (options.ownerOnly === true ? true : false) || false; - this.dirname = options.dirname || false; - /** - * @type {String} - */ - this.category = this.dirname ? this.dirname.split(sep)[parseInt(this.dirname.split(sep).length - 1, 10)] : "Other"; - } -} - -export default BaseCommand; diff --git a/OLD/base/BaseEvent.js b/OLD/base/BaseEvent.js deleted file mode 100644 index 2fa28085..00000000 --- a/OLD/base/BaseEvent.js +++ /dev/null @@ -1,14 +0,0 @@ -class BaseEvent { - constructor(options) { - /** - * @type {String} - */ - this.name = options.name; - /** - * @type {Boolean} - */ - this.once = options.once; - } -} - -export default BaseEvent; diff --git a/OLD/base/Client.js b/OLD/base/Client.js deleted file mode 100644 index db50e763..00000000 --- a/OLD/base/Client.js +++ /dev/null @@ -1,388 +0,0 @@ -import { Client, Collection, SlashCommandBuilder, ContextMenuCommandBuilder, EmbedBuilder, PermissionsBitField, ChannelType } from "discord.js"; -import { GiveawaysManager } from "discord-giveaways"; -import { REST } from "@discordjs/rest"; -import { Player } from "discord-player"; -import { SpotifyExtractor } from "@discord-player/extractor"; -import { YoutubeiExtractor } from "discord-player-youtubei"; -import { Routes } from "discord-api-types/v10"; -import { join, sep } from "path"; -import { promises as fs } from "fs"; -import { setTimeout } from "timers/promises"; -import mongoose from "mongoose"; - -import * as emojis from "../../emojis.json"; -import langs from "../languages/language-meta.js"; -import logger from "../helpers/logger.js"; -import * as funcs from "../helpers/functions.js"; - -import BaseEvent from "./BaseEvent.js"; -import BaseCommand from "./BaseCommand.js"; -import guild from "./Guild.js"; -import user from "./User.js"; -import member from "./Member.js"; - -class JaBaClient extends Client { - constructor(options) { - super(options); - - this.config = config; - this.customEmojis = emojis; - this.languages = langs; - this.commands = new Collection(); - this.logger = logger; - this.wait = setTimeout; - this.functions = funcs; - this.guildsData = guild.default; - this.usersData = user.default; - this.membersData = member.default; - - this.databaseCache = {}; - this.databaseCache.users = new Collection(); - this.databaseCache.guilds = new Collection(); - this.databaseCache.members = new Collection(); - this.databaseCache.usersReminds = new Collection(); - } - - /** - * Initializes the client by logging in with the provided token and connecting to the MongoDB database. - * - * This method is called during the client's startup process to set up the necessary connections and resources. - * - * @returns {Promise} A Promise that resolves when the client is fully initialized. - */ - async init() { - this.player = new Player(this); - - await this.player.extractors.register(YoutubeiExtractor, { - authentication: this.config.youtubeCookie, - streamOptions: { - useClient: "IOS", - highWaterMark: 2 * 1024 * 1024, // 2MB, default is 512 KB (512 * 1024) - }, - }); - - await this.player.extractors.register(SpotifyExtractor, { - clientId: this.config.spotify.clientId, - clientSecret: this.config.spotify.clientSecret, - }); - - await this.player.extractors.loadDefault(ext => !["YouTubeExtractor", "SpotifyExtractor"].includes(ext)); - - this.player.events.on("playerStart", async (queue, track) => { - const m = ( - await queue.metadata.channel.send({ - content: this.translate( - "music/play:NOW_PLAYING", - { - songName: `${track.title} - ${track.author}`, - songURL: track.url, - }, - queue.metadata.data.guild.language, - ), - }) - ).id; - - if (track.durationMS > 1) { - setTimeout(() => { - const message = queue.metadata.channel.messages.cache.get(m); - - if (message && message.deletable) message.delete(); - }, track.durationMS); - } else { - setTimeout( - () => { - const message = queue.metadata.channel.messages.cache.get(m); - - if (message && message.deletable) message.delete(); - }, - 5 * 60 * 1000, - ); - } - }); - this.player.events.on("emptyQueue", queue => queue.metadata.channel.send(this.translate("music/play:QUEUE_ENDED", null, queue.metadata.data.guild.language))); - this.player.events.on("emptyChannel", queue => queue.metadata.channel.send(this.translate("music/play:STOP_EMPTY", null, queue.metadata.data.guild.language))); - this.player.events.on("playerError", (queue, e) => { - queue.metadata.channel.send({ content: this.translate("music/play:ERR_OCCURRED", { error: e.message }, queue.metadata.data.guild.language) }); - console.log(e); - }); - this.player.events.on("error", (queue, e) => { - queue.metadata.channel.send({ content: this.translate("music/play:ERR_OCCURRED", { error: e.message }, queue.metadata.data.guild.language) }); - console.log(e); - }); - - this.giveawaysManager = new GiveawaysManager(this, { - storage: "./giveaways.json", - default: { - botsCanWin: false, - embedColor: this.config.embed.color, - embedColorEnd: "#FF0000", - reaction: "🎉", - }, - }); - - mongoose - .connect(this.config.mongoDB) - .then(this.logger.log("Connected to the MongoDB database.")) - .catch(e => { - this.logger.error(`Unable to connect to the MongoDB database.\nError: ${e.message}\n${e.stack}`); - }); - - this.login(this.config.token); - } - - /** - * Loads all the commands from the specified directory and registers them with the Discord API. - * - * This method dynamically loads all command files from the specified directory, - * creates instances of the corresponding command classes, and registers them with the Discord API. - * - * @param {string} dir - The directory path where the command files are located. - * @returns {Promise} A Promise that resolves when all the commands have been loaded and registered. - */ - async loadCommands(dir) { - const rest = new REST().setToken(this.config.token), - filePath = join(__dirname, dir), - folders = (await fs.readdir(filePath)).map(file => join(filePath, file)); - - const commands = []; - for (const folder of folders) { - const files = await fs.readdir(folder); - - for (const file of files) { - if (!file.endsWith(".js")) continue; - - const Command = require(join(folder, file)); - - if (!(Command.prototype instanceof BaseCommand)) continue; - - const command = new Command(this); - this.commands.set(command.command.name, command); - - if (typeof command.onLoad === "function") await command.onLoad(this); - - commands.push(command.command instanceof SlashCommandBuilder || command.command instanceof ContextMenuCommandBuilder ? command.command.toJSON() : command.command); - - this.logger.log(`Successfully loaded "${file}" command. (Command: ${command.command.name})`); - } - } - - try { - const route = this.config.production ? Routes.applicationCommands(this.config.userId) : Routes.applicationGuildCommands(this.config.userId, this.config.support.id); - - await rest.put(route, { body: commands }); - - this.logger.log("Successfully registered application commands."); - } catch (e) { - this.logger.error("Error registering application commands:", e); - } - } - - /** - * Loads a command from the specified directory and file. - * @param {string} dir - The directory containing the command file. - * @param {string} file - The name of the command file (without the .js extension). - * @returns {Promise} This method does not return a value. - */ - async loadCommand(dir, file) { - try { - const Command = require(join(dir, `${file}.js`)); - - if (!(Command.prototype instanceof BaseCommand)) { - return this.logger.error(`Tried to load a non-command file: "${file}.js"`); - } - - const command = new Command(this); - this.commands.set(command.command.name, command); - - if (typeof command.onLoad === "function") await command.onLoad(this); - - this.logger.log(`Successfully loaded "${file}" command file. (Command: ${command.command.name})`); - } catch (e) { - this.logger.error(`Error loading command "${file}":`, e); - } - } - - /** - * Unloads a command from the specified directory and file. - * @param {string} dir - The directory containing the command file. - * @param {string} name - The name of the command file (without the .js extension). - * @returns {void} This method does not return a value. - */ - unloadCommand(dir, name) { - delete require.cache[require.resolve(`${dir}${sep}${name}.js`)]; - - return; - } - - /** - * Loads all event files from the specified directory and its subdirectories. - * @param {string} dir - The directory containing the event files. - * @returns {Promise} This method does not return a value. - */ - async loadEvents(dir) { - const filePath = join(__dirname, dir); - const files = await fs.readdir(filePath); - - for (const file of files) { - const fullPath = join(filePath, file); - const stat = await fs.lstat(fullPath); - - if (stat.isDirectory()) { - await this.loadEvents(join(dir, file)); - continue; - } - - if (file.endsWith(".js")) { - try { - const Event = require(fullPath); - - if (!(Event.prototype instanceof BaseEvent)) { - this.logger.error(`"${file}" is not a valid event file.`); - continue; - } - - const event = new Event(); - - if (!event.name || !event.name.length) { - this.logger.error(`Cannot load "${file}" event: Event name is missing!`); - continue; - } - - event.once ? this.once(event.name, event.execute.bind(event, this)) : this.on(event.name, event.execute.bind(event, this)); - - this.logger.log(`Successfully loaded "${file}" event. (Event: ${event.name})`); - } catch (e) { - this.logger.error(`Error loading event "${file}":`, e); - } - } - } - } - - /** - * Returns the default language from the list of available languages. - * @returns {Language} The default language. - */ - get defaultLanguage() { - return this.languages.find(language => language.default); - } - - /** - * Translates a key using the specified locale, or the default language if no locale is provided. - * @param {string} key The translation key to look up. - * @param {any[]} args Any arguments to pass to the translation function. - * @param {string} [locale=this.defaultLanguage.name] The locale to use for the translation. Defaults to the default language. - * @returns {string} The translated string. - */ - translate(key, args, locale = this.defaultLanguage.name) { - const lang = this.translations.get(locale); - - return lang(key, args); - } - - /** - * Generates an EmbedBuilder instance with the provided data. - * @param {Object} data - The data to use for the embed. - * @param {string} [data.title] - The title of the embed. - * @param {string} [data.description] - The description of the embed. - * @param {string} [data.thumbnail] - The URL of the thumbnail image for the embed. - * @param {Object[]} [data.fields] - An array of field objects for the embed. - * @param {string} [data.image] - The URL of the image for the embed. - * @param {string} [data.url] - The URL to be used as the embed's hyperlink. - * @param {string} [data.color] - The HEX color of the embed's border. - * @param {string|Object} [data.footer] - The text to be displayed as the embed's footer. - * @param {Date} [data.timestamp] - The timestamp to be displayed in the embed. - * @param {string|Object} [data.author] - The author information for the embed. - * @returns {EmbedBuilder} The generated EmbedBuilder instance. - */ - embed(data) { - const embed = new EmbedBuilder() - .setTitle(data.title ?? null) - .setDescription(data.description ?? null) - .setThumbnail(data.thumbnail ?? null) - .addFields(data.fields ?? []) - .setImage(data.image ?? null) - .setURL(data.url ?? null) - .setColor(data.color ?? this.config.embed.color) - .setFooter(typeof data.footer === "object" ? data.footer : data.footer ? { text: data.footer } : this.config.embed.footer) - .setTimestamp(data.timestamp ?? null) - .setAuthor(typeof data.author === "string" ? { name: data.author, iconURL: this.user.avatarURL() } : (data.author ?? null)); - - return embed; - } - - /** - * Creates an invite for the specified guild. - * @param {string} guildId - The ID of the guild to create the invite for. - * @returns {Promise} The URL of the created invite, or an error message if no suitable channel was found or the bot lacks the necessary permissions. - */ - async createInvite(guildId) { - const guild = this.guilds.cache.get(guildId), - member = guild.members.me, - channel = guild.channels.cache.find(ch => ch.permissionsFor(member.id).has(PermissionsBitField.FLAGS.CREATE_INSTANT_INVITE) && (ch.type === ChannelType.GuildText || ch.type === ChannelType.GuildVoice)); - - if (channel) return (await channel.createInvite()).url || "No channels found or missing permissions"; - } - - /** - * Returns a User data from the database. - * @param {string} userID - The ID of the user to find or create. - * @returns {Promise} The user data object, either retrieved from the database or newly created. - */ - async getUserData(userID) { - let userData = await this.usersData.findOne({ id: userID }); - - if (!userData) { - userData = new this.usersData({ id: userID }); - await userData.save(); - } - - this.databaseCache.users.set(userID, userData); - - return userData; - } - - /** - * Returns a Member data from the database. - * @param {string} memberId - The ID of the member to find or create. - * @param {string} guildId - The ID of the guild the member belongs to. - * @returns {Promise} The member data object, either retrieved from the database or newly created. - */ - async getMemberData(memberId, guildId) { - let memberData = await this.membersData.findOne({ guildID: guildId, id: memberId }); - - if (!memberData) { - memberData = new this.membersData({ id: memberId, guildID: guildId }); - await memberData.save(); - - const guildData = await this.getGuildData(guildId); - - if (guildData) { - guildData.members.push(memberData._id); - await guildData.save(); - } - } - - this.databaseCache.members.set(`${memberId}/${guildId}`, memberData); - return memberData; - } - - /** - * Returns a Guild data from the database. - * @param {string} guildId - The ID of the guild to find or create. - * @returns {Promise} The guild data object, either retrieved from the database or newly created. - */ - async getGuildData(guildId) { - let guildData = await this.guildsData.findOne({ id: guildId }).populate("members"); - - if (!guildData) { - guildData = new this.guildsData({ id: guildId }); - await guildData.save(); - } - - this.databaseCache.guilds.set(guildId, guildData); - - return guildData; - } -} - -export default JaBaClient; diff --git a/OLD/commands/Administration/addemoji.js b/OLD/commands/Administration/addemoji.js deleted file mode 100644 index fc93a197..00000000 --- a/OLD/commands/Administration/addemoji.js +++ /dev/null @@ -1,74 +0,0 @@ -const { SlashCommandBuilder, PermissionsBitField, InteractionContextType, ApplicationIntegrationType } = require("discord.js"); -const BaseCommand = require("../../base/BaseCommand"); - -class Addemoji extends BaseCommand { - /** - * - * @param {import("../../base/Client")} client - */ - constructor(client) { - super({ - command: new SlashCommandBuilder() - .setName("addemoji") - .setDescription(client.translate("administration/addemoji:DESCRIPTION")) - .setDescriptionLocalizations({ - uk: client.translate("administration/addemoji:DESCRIPTION", null, "uk-UA"), - ru: client.translate("administration/addemoji:DESCRIPTION", null, "ru-RU"), - }) - .setIntegrationTypes([ApplicationIntegrationType.GuildInstall]) - .setContexts([InteractionContextType.Guild]) - .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageGuild) - .addStringOption(option => - option - .setName("link") - .setDescription(client.translate("common:LINK")) - .setDescriptionLocalizations({ - uk: client.translate("common:LINK", null, "uk-UA"), - ru: client.translate("common:LINK", null, "ru-RU"), - }) - .setRequired(true), - ) - .addStringOption(option => - option - .setName("name") - .setDescription(client.translate("common:NAME")) - .setDescriptionLocalizations({ - uk: client.translate("common:NAME", null, "uk-UA"), - ru: client.translate("common:NAME", null, "ru-RU"), - }) - .setRequired(true), - ), - dirname: __dirname, - ownerOnly: false, - }); - } - - /** - * - * @param {import("../../base/Client")} client - * @param {import("discord.js").ChatInputCommandInteraction} interaction - */ - async execute(client, interaction) { - const link = interaction.options.getString("link"), - name = interaction.options.getString("name"); - - interaction.guild.emojis - .create({ - name: name, - attachment: link, - }) - .then(emoji => - interaction.success("administration/stealemoji:SUCCESS", { - emoji: emoji.toString(), - }, { ephemeral: true }), - ) - .catch(e => { - interaction.error("administration/stealemoji:ERROR", { - emoji: name, - e, - }, { ephemeral: true }); - }); - } -} - -module.exports = Addemoji; diff --git a/OLD/commands/Administration/automod.js b/OLD/commands/Administration/automod.js deleted file mode 100644 index 4c5a95f2..00000000 --- a/OLD/commands/Administration/automod.js +++ /dev/null @@ -1,97 +0,0 @@ -const { SlashCommandBuilder, PermissionsBitField, ChannelType, InteractionContextType, ApplicationIntegrationType } = require("discord.js"); -const BaseCommand = require("../../base/BaseCommand"); - -class Automod extends BaseCommand { - /** - * - * @param {import("../../base/Client")} client - */ - constructor(client) { - super({ - command: new SlashCommandBuilder() - .setName("automod") - .setDescription(client.translate("administration/automod:DESCRIPTION")) - .setDescriptionLocalizations({ - uk: client.translate("administration/automod:DESCRIPTION", null, "uk-UA"), - ru: client.translate("administration/automod:DESCRIPTION", null, "ru-RU"), - }) - .setIntegrationTypes([ApplicationIntegrationType.GuildInstall]) - .setContexts([InteractionContextType.Guild]) - .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageGuild) - .addSubcommand(subcommand => - subcommand - .setName("toggle") - .setDescription(client.translate("administration/automod:TOGGLE")) - .setDescriptionLocalizations({ - uk: client.translate("administration/automod:TOGGLE", null, "uk-UA"), - ru: client.translate("administration/automod:TOGGLE", null, "ru-RU"), - }) - .addBooleanOption(option => - option - .setName("state") - .setDescription(client.translate("common:STATE")) - .setDescriptionLocalizations({ - uk: client.translate("common:STATE", null, "uk-UA"), - ru: client.translate("common:STATE", null, "ru-RU"), - }) - .setRequired(true), - ), - ) - .addSubcommand(subcommand => - subcommand - .setName("ignore") - .setDescription(client.translate("administration/automod:IGNORE")) - .setDescriptionLocalizations({ - uk: client.translate("administration/automod:IGNORE", null, "uk-UA"), - ru: client.translate("administration/automod:IGNORE", null, "ru-RU"), - }) - .addChannelOption(option => - option - .setName("channel") - .setDescription(client.translate("common:CHANNEL")) - .setDescriptionLocalizations({ - uk: client.translate("common:CHANNEL", null, "uk-UA"), - ru: client.translate("common:CHANNEL", null, "ru-RU"), - }) - .addChannelTypes(ChannelType.GuildText) - .setRequired(true), - ), - ), - dirname: __dirname, - ownerOnly: false, - }); - } - - /** - * - * @param {import("../../base/Client")} client - * @param {import("discord.js").ChatInputCommandInteraction} interaction - */ - async execute(client, interaction) { - const { data } = interaction, - state = interaction.options.getBoolean("state"), - channel = interaction.options.getChannel("channel"), - command = interaction.options.getSubcommand(); - - if (command === "toggle") { - data.guild.plugins.automod = { - enabled: state, - ignored: [], - }; - - await data.guild.save(); - - interaction.success(`administration/automod:${state ? "ENABLED" : "DISABLED"}`); - } else if (command === "ignore") { - data.guild.plugins.automod.ignored.push(channel.id); - - await data.guild.save(); - - interaction.success("administration/automod:DISABLED_CHANNEL", { - channel: channel.toString(), - }); - } - } -} - -module.exports = Automod; diff --git a/OLD/commands/Administration/autorole.js b/OLD/commands/Administration/autorole.js deleted file mode 100644 index 6f19adf8..00000000 --- a/OLD/commands/Administration/autorole.js +++ /dev/null @@ -1,76 +0,0 @@ -const { SlashCommandBuilder, PermissionsBitField, InteractionContextType, ApplicationIntegrationType } = require("discord.js"); -const BaseCommand = require("../../base/BaseCommand"); - -class Autorole extends BaseCommand { - /** - * - * @param {import("../../base/Client")} client - */ - constructor(client) { - super({ - command: new SlashCommandBuilder() - .setName("autorole") - .setDescription(client.translate("administration/autorole:DESCRIPTION")) - .setDescriptionLocalizations({ - uk: client.translate("administration/autorole:DESCRIPTION", null, "uk-UA"), - ru: client.translate("administration/autorole:DESCRIPTION", null, "ru-RU"), - }) - .setIntegrationTypes([ApplicationIntegrationType.GuildInstall]) - .setContexts([InteractionContextType.Guild]) - .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageGuild) - .addBooleanOption(option => - option - .setName("state") - .setDescription(client.translate("common:STATE")) - .setDescriptionLocalizations({ - uk: client.translate("common:STATE", null, "uk-UA"), - ru: client.translate("common:STATE", null, "ru-RU"), - }) - .setRequired(true), - ) - .addRoleOption(option => - option - .setName("role") - .setDescription(client.translate("common:ROLE")) - .setDescriptionLocalizations({ - uk: client.translate("common:ROLE", null, "uk-UA"), - ru: client.translate("common:ROLE", null, "ru-RU"), - }), - ), - dirname: __dirname, - ownerOnly: false, - }); - } - - /** - * - * @param {import("../../base/Client")} client - * @param {import("discord.js").ChatInputCommandInteraction} interaction - */ - async execute(client, interaction) { - const guildData = interaction.data.guild, - state = interaction.options.getBoolean("state"), - role = interaction.options.getRole("role"); - - guildData.plugins.autorole = { - enabled: state, - role, - }; - - if (state && role) { - await guildData.save(); - - interaction.success("administration/autorole:ENABLED", { - role: role.toString(), - }); - } else { - guildData.plugins.autorole.enabled = false; - - await guildData.save(); - - interaction.success("administration/autorole:DISABLED"); - } - } -} - -module.exports = Autorole; diff --git a/config.sample.json b/config.sample.json index 61563699..3b734872 100644 --- a/config.sample.json +++ b/config.sample.json @@ -17,6 +17,7 @@ "owner": { "id": "123456789098765432" }, + "_comment_paths": "Change './src' to './dist' for prod", "paths": { "commands": "./src/commands", "events": "./src/events", diff --git a/eslint.config.js b/eslint.config.js index 5911a187..d7874610 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,7 +1,7 @@ import globals from "globals"; import pluginJs from "@eslint/js"; import tsParser from "@typescript-eslint/parser"; -import stylisticJs from "@stylistic/eslint-plugin-js"; +import stylistic from "@stylistic/eslint-plugin"; import tsPlugin from "@typescript-eslint/eslint-plugin"; /** @type {import("eslint").Linter.Config[]} */ @@ -18,7 +18,7 @@ export default [ }, plugins: { "@typescript-eslint": tsPlugin, - "@stylistic/js": stylisticJs, + "@stylistic": stylistic, }, rules: { "no-unused-vars": "off", @@ -31,14 +31,14 @@ export default [ "no-var": "error", "prefer-const": "error", yoda: "error", - "@stylistic/js/arrow-spacing": ["error", { before: true, after: true }], - "@stylistic/js/comma-dangle": ["error", "always-multiline"], - "@stylistic/js/comma-spacing": ["error", { before: false, after: true }], - "@stylistic/js/comma-style": ["error", "last"], - "@stylistic/js/dot-location": ["error", "property"], - "@stylistic/js/keyword-spacing": ["error", { before: true, after: true }], - "@stylistic/js/no-multi-spaces": "error", - "@stylistic/js/no-multiple-empty-lines": [ + "@stylistic/arrow-spacing": ["error", { before: true, after: true }], + "@stylistic/comma-dangle": ["error", "always-multiline"], + "@stylistic/comma-spacing": ["error", { before: false, after: true }], + "@stylistic/comma-style": ["error", "last"], + "@stylistic/dot-location": ["error", "property"], + "@stylistic/keyword-spacing": ["error", { before: true, after: true }], + "@stylistic/no-multi-spaces": "error", + "@stylistic/no-multiple-empty-lines": [ "error", { max: 2, @@ -46,12 +46,12 @@ export default [ maxBOF: 0, }, ], - "@stylistic/js/no-trailing-spaces": ["error"], - "@stylistic/js/object-curly-spacing": ["error", "always"], - "@stylistic/js/quotes": ["error", "double"], - "@stylistic/js/indent": ["error", "tab"], - "@stylistic/js/semi": ["error", "always"], - "@stylistic/js/space-infix-ops": "error", + "@stylistic/no-trailing-spaces": ["error"], + "@stylistic/object-curly-spacing": ["error", "always"], + "@stylistic/quotes": ["error", "double"], + "@stylistic/indent": ["error", "tab"], + "@stylistic/semi": ["error", "always"], + "@stylistic/space-infix-ops": "error", }, }, ]; diff --git a/package.json b/package.json index 0cbac9cf..df0bcf3c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "jaba", "version": "0.0.0", - "description": "My Discord Bot", "main": "src/index.js", "type": "module", "scripts": { @@ -11,38 +10,35 @@ }, "author": "https://github.com/JonnyBro", "dependencies": { - "@discord-player/extractor": "^4.5.1", - "@discordjs/opus": "^0.9.0", + "@discordjs/opus": "^0.10.0", "@discordjs/voice": "^0.18.0", - "@napi-rs/canvas": "^0.1.63", - "chalk": "^4.1.2", - "cron": "^3.2.1", + "@napi-rs/canvas": "^0.1.68", + "chalk": "^5.4.1", + "cron": "^4.1.0", "discord-giveaways": "^6.0.1", - "discord-player": "^6.7.1", - "discord-player-youtubei": "1.3.5", "discord.js": "^14.18.0", - "gamedig": "^5.1.4", - "i18next": "^24.0.0", + "gamedig": "^5.2.0", + "i18next": "^24.2.2", "i18next-fs-backend": "^2.6.0", "md5": "^2.3.0", - "mongoose": "^8.8.2", + "mongoose": "^8.12.1", "ms": "^2.1.3", - "node-fetch": "^2.7.0" + "node-fetch": "^3.3.2" }, "devDependencies": { - "@eslint/js": "^9.16.0", - "@stylistic/eslint-plugin-js": "^2.11.0", + "@eslint/js": "^9.21.0", + "@stylistic/eslint-plugin": "^4.2.0", "@types/md5": "^2.3.5", - "@types/ms": "^0.7.34", - "@types/node": "^22.10.5", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "@typescript-eslint/parser": "^8.19.1", - "eslint": "^9.16.0", - "globals": "^15.13.0", - "prettier": "^3.4.2", + "@types/ms": "^2.1.0", + "@types/node": "^22.13.9", + "@typescript-eslint/eslint-plugin": "^8.26.0", + "@typescript-eslint/parser": "^8.26.0", + "eslint": "^9.21.0", + "globals": "^16.0.0", + "prettier": "^3.5.3", "prettier-eslint": "^16.3.0", - "tsc-alias": "^1.8.10", - "tsx": "^4.19.2", - "typescript": "^5.7.3" + "tsc-alias": "^1.8.11", + "tsx": "^4.19.3", + "typescript": "^5.8.2" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b697183f..822432b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,42 +8,33 @@ importers: .: dependencies: - '@discord-player/extractor': - specifier: ^4.5.1 - version: 4.5.1 '@discordjs/opus': - specifier: ^0.9.0 - version: 0.9.0 + specifier: ^0.10.0 + version: 0.10.0 '@discordjs/voice': specifier: ^0.18.0 - version: 0.18.0(@discordjs/opus@0.9.0) + version: 0.18.0(@discordjs/opus@0.10.0) '@napi-rs/canvas': - specifier: ^0.1.63 - version: 0.1.63 + specifier: ^0.1.68 + version: 0.1.68 chalk: - specifier: ^4.1.2 - version: 4.1.2 + specifier: ^5.4.1 + version: 5.4.1 cron: - specifier: ^3.2.1 - version: 3.2.1 + specifier: ^4.1.0 + version: 4.1.0 discord-giveaways: specifier: ^6.0.1 version: 6.0.1(discord.js@14.18.0) - discord-player: - specifier: ^6.7.1 - version: 6.7.1(@discord-player/extractor@4.5.1)(@discordjs/opus@0.9.0) - discord-player-youtubei: - specifier: 1.3.5 - version: 1.3.5 discord.js: specifier: ^14.18.0 version: 14.18.0 gamedig: - specifier: ^5.1.4 - version: 5.1.4 + specifier: ^5.2.0 + version: 5.2.0 i18next: - specifier: ^24.0.0 - version: 24.0.0(typescript@5.7.3) + specifier: ^24.2.2 + version: 24.2.2(typescript@5.8.2) i18next-fs-backend: specifier: ^2.6.0 version: 2.6.0 @@ -51,82 +42,64 @@ importers: specifier: ^2.3.0 version: 2.3.0 mongoose: - specifier: ^8.8.2 - version: 8.8.2(socks@2.8.3) + specifier: ^8.12.1 + version: 8.12.1(socks@2.8.3) ms: specifier: ^2.1.3 version: 2.1.3 node-fetch: - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^3.3.2 + version: 3.3.2 devDependencies: '@eslint/js': - specifier: ^9.16.0 - version: 9.16.0 - '@stylistic/eslint-plugin-js': - specifier: ^2.11.0 - version: 2.11.0(eslint@9.16.0) + specifier: ^9.21.0 + version: 9.21.0 + '@stylistic/eslint-plugin': + specifier: ^4.2.0 + version: 4.2.0(eslint@9.21.0)(typescript@5.8.2) '@types/md5': specifier: ^2.3.5 version: 2.3.5 '@types/ms': - specifier: ^0.7.34 - version: 0.7.34 + specifier: ^2.1.0 + version: 2.1.0 '@types/node': - specifier: ^22.10.5 - version: 22.10.5 + specifier: ^22.13.9 + version: 22.13.9 '@typescript-eslint/eslint-plugin': - specifier: ^8.19.1 - version: 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.16.0)(typescript@5.7.3))(eslint@9.16.0)(typescript@5.7.3) + specifier: ^8.26.0 + version: 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.8.2))(eslint@9.21.0)(typescript@5.8.2) '@typescript-eslint/parser': - specifier: ^8.19.1 - version: 8.19.1(eslint@9.16.0)(typescript@5.7.3) + specifier: ^8.26.0 + version: 8.26.0(eslint@9.21.0)(typescript@5.8.2) eslint: - specifier: ^9.16.0 - version: 9.16.0 + specifier: ^9.21.0 + version: 9.21.0 globals: - specifier: ^15.13.0 - version: 15.13.0 + specifier: ^16.0.0 + version: 16.0.0 prettier: - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.5.3 + version: 3.5.3 prettier-eslint: specifier: ^16.3.0 version: 16.3.0 tsc-alias: - specifier: ^1.8.10 - version: 1.8.10 + specifier: ^1.8.11 + version: 1.8.11 tsx: - specifier: ^4.19.2 - version: 4.19.2 + specifier: ^4.19.3 + version: 4.19.3 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 packages: - '@babel/runtime@7.25.6': - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + '@babel/runtime@7.26.9': + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} engines: {node: '>=6.9.0'} - '@bufbuild/protobuf@2.1.0': - resolution: {integrity: sha512-+2Mx67Y3skJ4NCD/qNSdBJNWtu6x6Qr53jeNg+QcwiL6mt0wK+3jwHH2x1p7xaYH6Ve2JKOVn0OxU35WsmqI9A==} - - '@discord-player/equalizer@0.2.3': - resolution: {integrity: sha512-71UAepYMbHTg2QQLXQAgyuXYHrgAYpJDxjg9dRWfTUNf+zfOAlyJEiRRk/WFhQyGu6m23iLR/H/JxgF4AW8Csg==} - - '@discord-player/extractor@4.5.1': - resolution: {integrity: sha512-krsgdHD7sx4SWHKkIFDPcgYXR21EfleW0bjI6WvnJQbvTg9TZ4aYw77G6UVw/HaF7i3u3WuyGPZp1UqG0FRHaw==} - - '@discord-player/ffmpeg@0.1.0': - resolution: {integrity: sha512-0kW6q4gMQN2B4Z4EzmUgXrKQSXXmyhjdZBBZ/6jSHZ9fh814oOu+JXP01VvtWHwTylI7qJHIctEWtSyjEubCJg==} - - '@discord-player/opus@0.1.2': - resolution: {integrity: sha512-yF0m+pW7H9RCbRcgk/i6vv47tlWxaCHjp6/F0W4GXZMGZ0pcvZaxk8ic7aFPc3+IoDvrAHvWNomLq+JeFzdncA==} - - '@discord-player/utils@0.2.2': - resolution: {integrity: sha512-UklWUT7BcZEkBgywM9Cmpo2nwj3SQ9Wmhu6ml1uy/YRQnY8IRdZEHD84T2kfjOg4LVZek0ej1VerIqq7a9PAHQ==} - '@discordjs/builders@1.10.1': resolution: {integrity: sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==} engines: {node: '>=16.11.0'} @@ -147,8 +120,8 @@ packages: resolution: {integrity: sha512-YJOVVZ545x24mHzANfYoy0BJX5PDyeZlpiJjDkUBM/V/Ao7TFX9lcUvCN4nr0tbr5ubeaXxtEBILUrHtTphVeQ==} hasBin: true - '@discordjs/opus@0.9.0': - resolution: {integrity: sha512-NEE76A96FtQ5YuoAVlOlB3ryMPrkXbUCTQICHGKb8ShtjXyubGicjRMouHtP1RpuDdm16cDa+oI3aAMo1zQRUQ==} + '@discordjs/opus@0.10.0': + resolution: {integrity: sha512-HHEnSNrSPmFEyndRdQBJN2YE6egyXS9JUnJWyP6jficK0Y+qKMEZXyYTgmzpjrxXP1exM/hKaNP7BRBUEWkU5w==} engines: {node: '>=12.0.0'} '@discordjs/rest@2.4.3': @@ -167,152 +140,158 @@ packages: resolution: {integrity: sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==} engines: {node: '>=16.11.0'} - '@esbuild/aix-ppc64@0.23.1': - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.23.1': - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.23.1': - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.23.1': - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.23.1': - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.23.1': - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.23.1': - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.23.1': - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.23.1': - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.23.1': - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.23.1': - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.23.1': - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.23.1': - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.23.1': - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.23.1': - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.23.1': - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.23.1': - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.23.1': - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.23.1': - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.23.1': - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.23.1': - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.23.1': - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -321,42 +300,38 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.16.0': - resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + '@eslint/js@9.21.0': + resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -382,79 +357,79 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@mongodb-js/saslprep@1.1.9': - resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + '@mongodb-js/saslprep@1.2.0': + resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} - '@napi-rs/canvas-android-arm64@0.1.63': - resolution: {integrity: sha512-+OqPr/ZGrPgHC5AHFWDo5PL+Az1UprgSoCnWJu8Uiv2TkW4zjVzTDDOLCnbUR/9dAeC+ztD5nabLxpC0e8RrSw==} + '@napi-rs/canvas-android-arm64@0.1.68': + resolution: {integrity: sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/canvas-darwin-arm64@0.1.63': - resolution: {integrity: sha512-yNO/6fESXlm8znomd0iXz+jhJJlykv4/iIPBnkyZnYLYu6sKuWklHUy6W4QvJsUuap23iiA74ZfJ1/5mCDwlsA==} + '@napi-rs/canvas-darwin-arm64@0.1.68': + resolution: {integrity: sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-x64@0.1.63': - resolution: {integrity: sha512-O/t+a6x+5KHDKDqY1GvEO7Y7y9rwueKHeFI+wqiY1d19DwB/+ogHO7wqSNdb2Wj1wEdzxuwedPHnqRkCACw+JA==} + '@napi-rs/canvas-darwin-x64@0.1.68': + resolution: {integrity: sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.63': - resolution: {integrity: sha512-pt3qXCmN0I6hGBcKPf9ufPyqxwHQEpUPFtQy3cXA++f2WNsfXgxGSAXh1j3MarMKo6Y+0hwK55esnwr6vqvNtQ==} + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68': + resolution: {integrity: sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@0.1.63': - resolution: {integrity: sha512-BcdpLKFNm8HDZ1qmeRo7VXMbowVq6D7huGZBXDdScQll/rpm0V6+Zl55TmyuF/VwhEfqINtH4caSHXP2DnV+xQ==} + '@napi-rs/canvas-linux-arm64-gnu@0.1.68': + resolution: {integrity: sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-arm64-musl@0.1.63': - resolution: {integrity: sha512-t5R/k5X2Sly97Rz5KB91vW87C95n3DH2/ZiAdM+EoQzBxO/br04PYajYYeo09gmUblth3gfDbXk4rW79Oiaz2Q==} + '@napi-rs/canvas-linux-arm64-musl@0.1.68': + resolution: {integrity: sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-riscv64-gnu@0.1.63': - resolution: {integrity: sha512-B3W00grMj/UCFW+qtO6mn8cRloYDlEE3azGi7oHsNwUvYFQpqgWSvBEiyCbqkyO3vvA7DpE0uckMM38twltehw==} + '@napi-rs/canvas-linux-riscv64-gnu@0.1.68': + resolution: {integrity: sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@napi-rs/canvas-linux-x64-gnu@0.1.63': - resolution: {integrity: sha512-SR6/cim4PRdMe3HYgSUiC06gtmE8zCldH9EKyu7+o4SVlhesRvgeDZq7E0WatdO9ymmX7PvA6gpBLaHdbl6WGw==} + '@napi-rs/canvas-linux-x64-gnu@0.1.68': + resolution: {integrity: sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-linux-x64-musl@0.1.63': - resolution: {integrity: sha512-bhI7qs2egJfvDaQZx80DQizyo121hHYBM/o3tAtSanET2e7XdKbH2OJju0ruSG3VLdDA7zolzBhW20N7RAfvmw==} + '@napi-rs/canvas-linux-x64-musl@0.1.68': + resolution: {integrity: sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-win32-x64-msvc@0.1.63': - resolution: {integrity: sha512-2gP9bs8xqYQIU0M243Vf+u5pmJNBMwA2+unfwjWId8qUR6yASTtCD7GhZkCDVGPLBxHtAyTg2Gza4VkR2ev6zA==} + '@napi-rs/canvas-win32-x64-msvc@0.1.68': + resolution: {integrity: sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/canvas@0.1.63': - resolution: {integrity: sha512-B1H0lBQJOivF3JW1uXMHydIbHRYcMLXUVgjyF5NZHvNCHCmQhbDerbiM9Q2Wwm9KtcQ2t1I2J+DJEFVE9Q33lQ==} + '@napi-rs/canvas@0.1.68': + resolution: {integrity: sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==} engines: {node: '>= 10'} '@nodelib/fs.scandir@2.1.5': @@ -469,8 +444,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@sapphire/async-queue@1.5.3': - resolution: {integrity: sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==} + '@sapphire/async-queue@1.5.5': + resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} '@sapphire/shapeshift@4.0.0': @@ -488,19 +463,16 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@stylistic/eslint-plugin-js@2.11.0': - resolution: {integrity: sha512-btchD0P3iij6cIk5RR5QMdEhtCCV0+L6cNheGhGCd//jaHILZMTi/EOqgEDAf1s4ZoViyExoToM+S2Iwa3U9DA==} + '@stylistic/eslint-plugin@4.2.0': + resolution: {integrity: sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=8.40.0' + eslint: '>=9.0.0' '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -516,11 +488,11 @@ packages: '@types/md5@2.3.5': resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.10.5': - resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + '@types/node@22.13.9': + resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} @@ -528,16 +500,16 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} - '@typescript-eslint/eslint-plugin@8.19.1': - resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} + '@typescript-eslint/eslint-plugin@8.26.0': + resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} @@ -549,34 +521,34 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.19.1': - resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} + '@typescript-eslint/parser@8.26.0': + resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@8.19.1': - resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} + '@typescript-eslint/scope-manager@8.26.0': + resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.19.1': - resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} + '@typescript-eslint/type-utils@8.26.0': + resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.19.1': - resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} + '@typescript-eslint/types@8.26.0': + resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -588,38 +560,34 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.19.1': - resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} + '@typescript-eslint/typescript-estree@8.26.0': + resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.19.1': - resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} + '@typescript-eslint/utils@8.26.0': + resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.19.1': - resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} + '@typescript-eslint/visitor-keys@8.26.0': + resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@vladfrangu/async_event_emitter@2.4.6': resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@web-scrobbler/metadata-filter@3.2.0': - resolution: {integrity: sha512-K2Wkq9AOJkgj4Hk9g0flKnNWYkJy1GTPpHTgpNLU5OXaXgqPKLyrtb62M1cIxMN3ESH6XGvPKM92VEl/Gc3Rog==} - engines: {node: '>=10.0.0'} - abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -628,8 +596,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true @@ -705,8 +673,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - bson@6.9.0: - resolution: {integrity: sha512-X9hJeyeM0//Fus+0pc5dSUMhhrrmWwQUtdavaQeF3Ta6m69matZkGWV/MrBcnwUeLC8W9kwwc2hfkZgUuCX3Ig==} + bson@6.10.3: + resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} engines: {node: '>=16.20.1'} cacheable-lookup@7.0.0: @@ -729,6 +697,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -779,8 +751,9 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cron@3.2.1: - resolution: {integrity: sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==} + cron@4.1.0: + resolution: {integrity: sha512-wmcuXr2qP0UZStYgwruG6jC2AYSO9n5VMm2t93hmcEXEjWY3S2bsXe3sfGUrTs/uQ1AvRCrZ0Pp9Q032L/V9tw==} + engines: {node: '>=18.x'} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} @@ -800,8 +773,8 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -835,9 +808,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - discord-api-types@0.37.107: - resolution: {integrity: sha512-XOxmxnhtYIRH55kLTrc/JS3nJV1l3wfBtTptFiRGdGDOe2qdCT4DltpxSgskasfDrKfw71Z5quG4tYqTxyPJ7g==} - discord-api-types@0.37.119: resolution: {integrity: sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==} @@ -847,19 +817,6 @@ packages: peerDependencies: discord.js: '>=14.0.0' - discord-player-youtubei@1.3.5: - resolution: {integrity: sha512-yx7tExZUwR0MgtjZxFXmv5wVq8bYUALfzub0JiRCPcYkmo4aT6WHf2ZK1g/RGQ4nYuy6nud/zNIT0yoe1XuihQ==} - hasBin: true - - discord-player@6.7.1: - resolution: {integrity: sha512-ScQmChpZebpVzs+RMsSkCXSORUIXUR3aHsEssGZSLKrbWnregt3jVc39emftTt6EfarZ2TvTK262mXeAYPzpcQ==} - peerDependencies: - '@discord-player/extractor': ^4.5.0 - - discord-voip@0.1.3: - resolution: {integrity: sha512-9DWY5/BLPXeldVwPr8/ggGjggTYOTw77aGQc3+4n5K54bRbbiJ9DUJc+mJzDiSLoHN3f286eRGACJYtrUu27xA==} - engines: {node: '>=16.9.0'} - discord.js@14.18.0: resolution: {integrity: sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==} engines: {node: '>=18'} @@ -881,8 +838,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -891,8 +848,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} engines: {node: '>=18'} hasBin: true @@ -926,8 +883,8 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.16.0: - resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + eslint@9.21.0: + resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -967,8 +924,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -977,8 +934,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -992,10 +949,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1012,8 +965,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} @@ -1035,8 +988,8 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - gamedig@5.1.4: - resolution: {integrity: sha512-MgSbNVGh5QMdrmRTrZ3W7W6sC5/Mx+dMgTy2uZCKQ9vns9eFXkQj61Pw2Y2FNHNMMp4DXFSUMYAPJWLcR16Wwg==} + gamedig@5.2.0: + resolution: {integrity: sha512-YAk9KmQnbiThASSXYiL2LPeppgfthMjG8PIQK4UK8DveF/X/zhwYaUKqi+op05d0iLLoCzvx5J2Q2vUr+OVzQg==} engines: {node: '>=16.20.0'} hasBin: true @@ -1049,15 +1002,12 @@ packages: resolution: {integrity: sha512-SMehu6Y6ndq2Qgp9VxAb8Np3f+UUD+RWoW2SAMaxzGS96rWXyr4T1GGkecO0HHtxeH1m7pEh4FJWB8a/6aM2XQ==} engines: {node: '>=0.10'} - genius-lyrics@4.4.7: - resolution: {integrity: sha512-cgO5nSeFqtLZAUyWB+8XWMRBIRzPUSUC42N3CoDGRgKX1anGAyDUhM6/RVIJXCNnQa6XHZHswKcKgHaRiyl+GQ==} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1079,8 +1029,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + globals@16.0.0: + resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} engines: {node: '>=18'} globby@11.1.0: @@ -1105,13 +1055,6 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - himalaya@1.1.0: - resolution: {integrity: sha512-LLase1dHCRMel68/HZTFft0N0wti0epHr3nNY7ynpLbyZpmrKMQ8YIpiOV77TM97cNpC8Wb2n6f66IRggwdWPw==} - htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -1129,8 +1072,8 @@ packages: i18next-fs-backend@2.6.0: resolution: {integrity: sha512-3ZlhNoF9yxnM8pa8bWp5120/Ob6t4lVl1l/tbLmkml/ei3ud8IWySCHt2lrY5xWRlSU5D9IV2sm5bEbGuTqwTw==} - i18next@24.0.0: - resolution: {integrity: sha512-ORGCwMrXxpmB/AljFbGEe0UK/9Pz6umb9aZgLZ9qJGE+kjKhlnLj423WX2mt+N0MlEJ78pQXFMBmeMzrkLxriQ==} + i18next@24.2.2: + resolution: {integrity: sha512-NE6i86lBCKRYZa5TaUDkU5S4HFgLIEJRLr3Whf2psgaxBleQ2LC1YW1Vc+SCgkAW7VEzndT6al6+CzegSUHcTQ==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -1141,15 +1084,12 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} imurmurhash@0.1.4: @@ -1207,12 +1147,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-unfetch@4.0.2: - resolution: {integrity: sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==} - - jintr@3.0.2: - resolution: {integrity: sha512-5g2EBudeJFOopjAX4exAv5OCCW1DgUISfoioCsm1h9Q9HJ41LmnZ6J52PCsqBlQihsmp0VDuxreAVzM7yk5nFA==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1240,12 +1174,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libsodium-wrappers@0.7.15: - resolution: {integrity: sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ==} - - libsodium@0.7.15: - resolution: {integrity: sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw==} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1337,15 +1265,15 @@ packages: engines: {node: '>=10'} hasBin: true - mongodb-connection-string-url@3.0.1: - resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} - mongodb@6.10.0: - resolution: {integrity: sha512-gP9vduuYWb9ZkDM546M+MP2qKVk5ZG2wPF63OvSRuUbqCR+11ZCAE1mOfllhlAG0wcoJY5yDL/rV3OmYEwXIzg==} + mongodb@6.14.2: + resolution: {integrity: sha512-kMEHNo0F3P6QKDq17zcDuPeaywK/YaJVCEQRzPF3TOM/Bl9MFg64YE5Tu7ifj37qZJMhwU1tl2Ioivws5gRG5Q==} engines: {node: '>=16.20.1'} peerDependencies: '@aws-sdk/credential-providers': ^3.188.0 - '@mongodb-js/zstd': ^1.1.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 gcp-metadata: ^5.2.0 kerberos: ^2.0.1 mongodb-client-encryption: '>=6.0.0 <7' @@ -1367,8 +1295,8 @@ packages: socks: optional: true - mongoose@8.8.2: - resolution: {integrity: sha512-jCTSqDANfRzk909v4YoZQi7jlGRB2MTvgG+spVBc/BA4tOs1oWJr//V6yYujqNq9UybpOtsSfBqxI0dSOEFJHQ==} + mongoose@8.12.1: + resolution: {integrity: sha512-UW22y8QFVYmrb36hm8cGncfn4ARc/XsYWQwRTaj0gxtQk1rDuhzDO1eBantS+hTTatfAIS96LlRCJrcNHvW5+Q==} engines: {node: '>=16.20.1'} mpath@0.9.0: @@ -1389,8 +1317,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-addon-api@5.1.0: - resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + node-addon-api@8.3.1: + resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==} + engines: {node: ^18 || ^20 || >= 21} node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} @@ -1409,9 +1338,6 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-html-parser@6.1.13: - resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -1481,14 +1407,14 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} - picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + plimit-lit@1.6.1: resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} engines: {node: '>=12'} @@ -1509,8 +1435,8 @@ packages: svelte-eslint-parser: optional: true - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -1569,10 +1495,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} - engines: {node: '>=8'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1597,13 +1519,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - reverbnation-scraper@2.0.0: - resolution: {integrity: sha512-t1Mew5QC9QEVEry5DXyagvci2O+TgXTGoMHbNoW5NRz6LTOzK/DLHUpnrQwloX8CVX5z1a802vwHM3YgUVOvKg==} - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -1632,8 +1551,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -1669,20 +1588,9 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - soundcloud.ts@0.5.5: - resolution: {integrity: sha512-bygjhC1w/w26Nk0Y+4D4cWSEJ1TdxLaE6+w4pCazFzPF+J4mzuB62ggWmFa7BiwnirzNf9lgPbjzrQYGege4Ew==} - sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - spotify-uri@4.1.0: - resolution: {integrity: sha512-SFpBt8pQqO7DOFBsdUjv3GxGZAKYP7UqcTflfE7h3YL1lynl/6Motq7NERoJJR8eF9kXQRSpcdMmV5ou84rbng==} - engines: {node: '>= 16'} - - spotify-url-info@3.2.16: - resolution: {integrity: sha512-szXt1PLt8lqhaXsTNYH7zPd+EBj6Ha0xtqitqicCijGX6x/jYvn6wgGaK2F1OQfJzx8lxDNfZbtarn4DxzaZ2Q==} - engines: {node: '>= 12'} - sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -1714,10 +1622,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} - supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} @@ -1733,23 +1637,16 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - tiny-typed-emitter@2.1.0: - resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@4.1.1: - resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} - engines: {node: '>=14'} + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} @@ -1757,8 +1654,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-api-utils@2.0.0: - resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -1766,15 +1663,15 @@ packages: ts-mixer@6.0.4: resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} - tsc-alias@1.8.10: - resolution: {integrity: sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==} + tsc-alias@1.8.11: + resolution: {integrity: sha512-2DuEQ58A9Rj2NE2c1+/qaGKlshni9MCK95MJzRGhQG0CYLw0bE/ACgbhhTSf/p1svLelwqafOd8stQate2bYbg==} hasBin: true - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -1786,33 +1683,18 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - undici@6.19.8: - resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} - engines: {node: '>=18.17'} - - undici@6.21.0: - resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} - engines: {node: '>=18.17'} - undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} engines: {node: '>=18.17'} - unfetch@5.0.0: - resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -1839,9 +1721,9 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - whatwg-url@13.0.0: - resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} - engines: {node: '>=16'} + whatwg-url@14.1.1: + resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} + engines: {node: '>=18'} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -1861,8 +1743,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1888,43 +1770,12 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youtube-sr@4.3.11: - resolution: {integrity: sha512-3oHiS2x7PpMiDRW7Cq8nz1bkAIBOJHoOwkPl/oncM/+A9/3xxMDgMLGW2dsBEP1DHFyRXYTVABgfbdwHF8sXXQ==} - - youtubei.js@11.0.1: - resolution: {integrity: sha512-ZsbOd+5XF2Ofi3FrLMfYd+f9g9H8xswlouFhjhOqbwT68dMJtX6CRGsHNj5VTFCR/+L/865x1lnUlllB2dDDTA==} - snapshots: - '@babel/runtime@7.25.6': + '@babel/runtime@7.26.9': dependencies: regenerator-runtime: 0.14.1 - '@bufbuild/protobuf@2.1.0': {} - - '@discord-player/equalizer@0.2.3': {} - - '@discord-player/extractor@4.5.1': - dependencies: - file-type: 16.5.4 - genius-lyrics: 4.4.7 - isomorphic-unfetch: 4.0.2 - node-html-parser: 6.1.13 - reverbnation-scraper: 2.0.0 - soundcloud.ts: 0.5.5 - spotify-url-info: 3.2.16 - youtube-sr: 4.3.11 - transitivePeerDependencies: - - encoding - - '@discord-player/ffmpeg@0.1.0': {} - - '@discord-player/opus@0.1.2': {} - - '@discord-player/utils@0.2.2': - dependencies: - '@discordjs/collection': 1.5.3 - '@discordjs/builders@1.10.1': dependencies: '@discordjs/formatters': 0.6.0 @@ -1933,7 +1784,7 @@ snapshots: discord-api-types: 0.37.119 fast-deep-equal: 3.1.3 ts-mixer: 6.0.4 - tslib: 2.7.0 + tslib: 2.8.1 '@discordjs/collection@1.5.3': {} @@ -1952,16 +1803,16 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 transitivePeerDependencies: - encoding - supports-color - '@discordjs/opus@0.9.0': + '@discordjs/opus@0.10.0': dependencies: '@discordjs/node-pre-gyp': 0.4.5 - node-addon-api: 5.1.0 + node-addon-api: 8.3.1 transitivePeerDependencies: - encoding - supports-color @@ -1970,23 +1821,23 @@ snapshots: dependencies: '@discordjs/collection': 2.1.1 '@discordjs/util': 1.1.1 - '@sapphire/async-queue': 1.5.3 + '@sapphire/async-queue': 1.5.5 '@sapphire/snowflake': 3.5.3 '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.119 magic-bytes.js: 1.10.0 - tslib: 2.7.0 + tslib: 2.8.1 undici: 6.21.1 '@discordjs/util@1.1.1': {} - '@discordjs/voice@0.18.0(@discordjs/opus@0.9.0)': + '@discordjs/voice@0.18.0(@discordjs/opus@0.10.0)': dependencies: - '@types/ws': 8.5.12 - discord-api-types: 0.37.107 - prism-media: 1.3.5(@discordjs/opus@0.9.0) - tslib: 2.7.0 - ws: 8.18.0 + '@types/ws': 8.18.0 + discord-api-types: 0.37.119 + prism-media: 1.3.5(@discordjs/opus@0.10.0) + tslib: 2.8.1 + ws: 8.18.1 transitivePeerDependencies: - '@discordjs/opus' - bufferutil @@ -2000,134 +1851,137 @@ snapshots: '@discordjs/collection': 2.1.1 '@discordjs/rest': 2.4.3 '@discordjs/util': 1.1.1 - '@sapphire/async-queue': 1.5.3 - '@types/ws': 8.5.12 + '@sapphire/async-queue': 1.5.5 + '@types/ws': 8.18.0 '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.119 - tslib: 2.7.0 - ws: 8.18.0 + tslib: 2.8.1 + ws: 8.18.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@esbuild/aix-ppc64@0.23.1': + '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.23.1': + '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.23.1': + '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.23.1': + '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.23.1': + '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-x64@0.23.1': + '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.23.1': + '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.23.1': + '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/linux-arm64@0.23.1': + '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm@0.23.1': + '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-ia32@0.23.1': + '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-loong64@0.23.1': + '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-mips64el@0.23.1': + '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-ppc64@0.23.1': + '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.23.1': + '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-s390x@0.23.1': + '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-x64@0.23.1': + '@esbuild/linux-x64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.23.1': + '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-arm64@0.23.1': + '@esbuild/netbsd-x64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.23.1': + '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/sunos-x64@0.23.1': + '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/win32-arm64@0.23.1': + '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/win32-ia32@0.23.1': + '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-x64@0.23.1': + '@esbuild/win32-ia32@0.25.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + '@esbuild/win32-x64@0.25.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.16.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': dependencies: - eslint: 9.16.0 + eslint: 9.21.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.1': + '@eslint/config-array@0.19.2': dependencies: - '@eslint/object-schema': 2.1.5 - debug: 4.3.7 + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.9.1': + '@eslint/core@0.12.0': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.2.0': + '@eslint/eslintrc@3.3.0': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -2136,16 +1990,15 @@ snapshots: '@eslint/js@8.57.1': {} - '@eslint/js@9.16.0': {} + '@eslint/js@9.21.0': {} - '@eslint/object-schema@2.1.5': {} + '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.4': + '@eslint/plugin-kit@0.2.7': dependencies: + '@eslint/core': 0.12.0 levn: 0.4.1 - '@fastify/busboy@2.1.1': {} - '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -2156,7 +2009,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2167,58 +2020,58 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.1': {} + '@humanwhocodes/retry@0.4.2': {} '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - '@mongodb-js/saslprep@1.1.9': + '@mongodb-js/saslprep@1.2.0': dependencies: sparse-bitfield: 3.0.3 - '@napi-rs/canvas-android-arm64@0.1.63': + '@napi-rs/canvas-android-arm64@0.1.68': optional: true - '@napi-rs/canvas-darwin-arm64@0.1.63': + '@napi-rs/canvas-darwin-arm64@0.1.68': optional: true - '@napi-rs/canvas-darwin-x64@0.1.63': + '@napi-rs/canvas-darwin-x64@0.1.68': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.63': + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68': optional: true - '@napi-rs/canvas-linux-arm64-gnu@0.1.63': + '@napi-rs/canvas-linux-arm64-gnu@0.1.68': optional: true - '@napi-rs/canvas-linux-arm64-musl@0.1.63': + '@napi-rs/canvas-linux-arm64-musl@0.1.68': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@0.1.63': + '@napi-rs/canvas-linux-riscv64-gnu@0.1.68': optional: true - '@napi-rs/canvas-linux-x64-gnu@0.1.63': + '@napi-rs/canvas-linux-x64-gnu@0.1.68': optional: true - '@napi-rs/canvas-linux-x64-musl@0.1.63': + '@napi-rs/canvas-linux-x64-musl@0.1.68': optional: true - '@napi-rs/canvas-win32-x64-msvc@0.1.63': + '@napi-rs/canvas-win32-x64-msvc@0.1.68': optional: true - '@napi-rs/canvas@0.1.63': + '@napi-rs/canvas@0.1.68': optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.63 - '@napi-rs/canvas-darwin-arm64': 0.1.63 - '@napi-rs/canvas-darwin-x64': 0.1.63 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.63 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.63 - '@napi-rs/canvas-linux-arm64-musl': 0.1.63 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.63 - '@napi-rs/canvas-linux-x64-gnu': 0.1.63 - '@napi-rs/canvas-linux-x64-musl': 0.1.63 - '@napi-rs/canvas-win32-x64-msvc': 0.1.63 + '@napi-rs/canvas-android-arm64': 0.1.68 + '@napi-rs/canvas-darwin-arm64': 0.1.68 + '@napi-rs/canvas-darwin-x64': 0.1.68 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.68 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.68 + '@napi-rs/canvas-linux-arm64-musl': 0.1.68 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.68 + '@napi-rs/canvas-linux-x64-gnu': 0.1.68 + '@napi-rs/canvas-linux-x64-musl': 0.1.68 + '@napi-rs/canvas-win32-x64-msvc': 0.1.68 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2230,9 +2083,9 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.1 - '@sapphire/async-queue@1.5.3': {} + '@sapphire/async-queue@1.5.5': {} '@sapphire/shapeshift@4.0.0': dependencies: @@ -2245,18 +2098,22 @@ snapshots: '@sindresorhus/is@5.6.0': {} - '@stylistic/eslint-plugin-js@2.11.0(eslint@9.16.0)': + '@stylistic/eslint-plugin@4.2.0(eslint@9.21.0)(typescript@5.8.2)': dependencies: - eslint: 9.16.0 + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.8.2) + eslint: 9.21.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + transitivePeerDependencies: + - supports-color + - typescript '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - '@tokenizer/token@0.3.0': {} - '@types/estree@1.0.6': {} '@types/http-cache-semantics@4.0.4': {} @@ -2267,9 +2124,9 @@ snapshots: '@types/md5@2.3.5': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} - '@types/node@22.10.5': + '@types/node@22.13.9': dependencies: undici-types: 6.20.0 @@ -2279,49 +2136,49 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 - '@types/ws@8.5.12': + '@types/ws@8.18.0': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.13.9 - '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.16.0)(typescript@5.7.3))(eslint@9.16.0)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.8.2))(eslint@9.21.0)(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.19.1(eslint@9.16.0)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/type-utils': 8.19.1(eslint@9.16.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.19.1(eslint@9.16.0)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.19.1 - eslint: 9.16.0 + '@typescript-eslint/parser': 8.26.0(eslint@9.21.0)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/type-utils': 8.26.0(eslint@9.21.0)(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 + eslint: 9.21.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.0(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7 + debug: 4.4.0 eslint: 8.57.1 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.19.1(eslint@9.16.0)(typescript@5.7.3)': + '@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.8.2)': dependencies: - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.19.1 - debug: 4.3.7 - eslint: 9.16.0 - typescript: 5.7.3 + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 + debug: 4.4.0 + eslint: 9.21.0 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -2330,63 +2187,63 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@8.19.1': + '@typescript-eslint/scope-manager@8.26.0': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 - '@typescript-eslint/type-utils@8.19.1(eslint@9.16.0)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.26.0(eslint@9.21.0)(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.19.1(eslint@9.16.0)(typescript@5.7.3) - debug: 4.3.7 - eslint: 9.16.0 - ts-api-utils: 2.0.0(typescript@5.7.3) - typescript: 5.7.3 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.8.2) + debug: 4.4.0 + eslint: 9.21.0 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@8.19.1': {} + '@typescript-eslint/types@8.26.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.3) + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.8.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 - debug: 4.3.7 - fast-glob: 3.3.2 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 + debug: 4.4.0 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 2.0.0(typescript@5.7.3) - typescript: 5.7.3 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.19.1(eslint@9.16.0)(typescript@5.7.3)': + '@typescript-eslint/utils@8.26.0(eslint@9.21.0)(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) - eslint: 9.16.0 - typescript: 5.7.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + eslint: 9.21.0 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -2395,28 +2252,26 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.19.1': + '@typescript-eslint/visitor-keys@8.26.0': dependencies: - '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.3.0': {} '@vladfrangu/async_event_emitter@2.4.6': {} - '@web-scrobbler/metadata-filter@3.2.0': {} - abbrev@1.1.1: {} - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 - acorn@8.14.0: {} + acorn@8.14.1: {} agent-base@6.0.2: dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -2480,7 +2335,7 @@ snapshots: dependencies: fill-range: 7.1.1 - bson@6.9.0: {} + bson@6.10.3: {} cacheable-lookup@7.0.0: {} @@ -2509,6 +2364,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.4.1: {} + charenc@0.0.2: {} cheerio-select@2.1.0: @@ -2518,14 +2375,14 @@ snapshots: css-what: 6.1.0 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 cheerio@1.0.0-rc.12: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 htmlparser2: 8.0.2 parse5: 7.2.1 parse5-htmlparser2-tree-adapter: 7.1.0 @@ -2564,7 +2421,7 @@ snapshots: core-util-is@1.0.3: {} - cron@3.2.1: + cron@4.1.0: dependencies: '@types/luxon': 3.4.2 luxon: 3.5.0 @@ -2582,14 +2439,14 @@ snapshots: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-what@6.1.0: {} data-uri-to-buffer@4.0.1: {} - debug@4.3.7: + debug@4.4.0: dependencies: ms: 2.1.3 @@ -2611,8 +2468,6 @@ snapshots: dependencies: path-type: 4.0.0 - discord-api-types@0.37.107: {} - discord-api-types@0.37.119: {} discord-giveaways@6.0.1(discord.js@14.18.0): @@ -2621,46 +2476,6 @@ snapshots: discord.js: 14.18.0 serialize-javascript: 6.0.2 - discord-player-youtubei@1.3.5: - dependencies: - tiny-typed-emitter: 2.1.0 - undici: 6.21.0 - youtubei.js: 11.0.1 - - discord-player@6.7.1(@discord-player/extractor@4.5.1)(@discordjs/opus@0.9.0): - dependencies: - '@discord-player/equalizer': 0.2.3 - '@discord-player/extractor': 4.5.1 - '@discord-player/ffmpeg': 0.1.0 - '@discord-player/utils': 0.2.2 - '@web-scrobbler/metadata-filter': 3.2.0 - discord-voip: 0.1.3(@discordjs/opus@0.9.0) - libsodium-wrappers: 0.7.15 - transitivePeerDependencies: - - '@discordjs/opus' - - bufferutil - - ffmpeg-static - - node-opus - - opusscript - - utf-8-validate - - discord-voip@0.1.3(@discordjs/opus@0.9.0): - dependencies: - '@discord-player/ffmpeg': 0.1.0 - '@discord-player/opus': 0.1.2 - '@types/ws': 8.5.12 - discord-api-types: 0.37.107 - prism-media: 1.3.5(@discordjs/opus@0.9.0) - tslib: 2.7.0 - ws: 8.18.0 - transitivePeerDependencies: - - '@discordjs/opus' - - bufferutil - - ffmpeg-static - - node-opus - - opusscript - - utf-8-validate - discord.js@14.18.0: dependencies: '@discordjs/builders': 1.10.1 @@ -2673,7 +2488,7 @@ snapshots: discord-api-types: 0.37.119 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 - tslib: 2.7.0 + tslib: 2.8.1 undici: 6.21.1 transitivePeerDependencies: - bufferutil @@ -2697,7 +2512,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -2707,32 +2522,33 @@ snapshots: entities@4.5.0: {} - esbuild@0.23.1: + esbuild@0.25.0: optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 escape-string-regexp@1.0.5: {} @@ -2754,18 +2570,18 @@ snapshots: eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -2795,24 +2611,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.16.0: + eslint@9.21.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.4 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.21.0 + '@eslint/plugin-kit': 0.2.7 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 + '@humanwhocodes/retry': 0.4.2 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -2836,14 +2652,14 @@ snapshots: espree@10.3.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esquery@1.6.0: @@ -2862,7 +2678,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -2874,9 +2690,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.17.1: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fetch-blob@3.2.0: dependencies: @@ -2891,12 +2707,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-type@16.5.4: - dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 6.3.0 - token-types: 4.2.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -2908,16 +2718,16 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.1 + flatted: 3.3.3 keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.3 keyv: 4.5.4 - flatted@3.3.1: {} + flatted@3.3.3: {} form-data-encoder@2.1.4: {} @@ -2934,7 +2744,7 @@ snapshots: fsevents@2.3.3: optional: true - gamedig@5.1.4: + gamedig@5.2.0: dependencies: cheerio: 1.0.0-rc.12 gbxremote: 0.2.1 @@ -2965,14 +2775,9 @@ snapshots: string-to-stream: 1.1.1 xmlrpc: 1.3.2 - genius-lyrics@4.4.7: - dependencies: - node-html-parser: 6.1.13 - undici: 6.19.8 - get-stream@6.0.1: {} - get-tsconfig@4.8.1: + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -2999,13 +2804,13 @@ snapshots: globals@14.0.0: {} - globals@15.13.0: {} + globals@16.0.0: {} globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -3034,15 +2839,11 @@ snapshots: has-unicode@2.0.1: {} - he@1.2.0: {} - - himalaya@1.1.0: {} - htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 http-cache-semantics@4.1.1: {} @@ -3055,27 +2856,25 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color i18next-fs-backend@2.6.0: {} - i18next@24.0.0(typescript@5.7.3): + i18next@24.2.2(typescript@5.8.2): dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.9 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - ignore@5.3.2: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -3121,15 +2920,6 @@ snapshots: isexe@2.0.0: {} - isomorphic-unfetch@4.0.2: - dependencies: - node-fetch: 3.3.2 - unfetch: 5.0.0 - - jintr@3.0.2: - dependencies: - acorn: 8.14.0 - js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -3154,12 +2944,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libsodium-wrappers@0.7.15: - dependencies: - libsodium: 0.7.15 - - libsodium@0.7.15: {} - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -3235,24 +3019,24 @@ snapshots: mkdirp@1.0.4: {} - mongodb-connection-string-url@3.0.1: + mongodb-connection-string-url@3.0.2: dependencies: '@types/whatwg-url': 11.0.5 - whatwg-url: 13.0.0 + whatwg-url: 14.1.1 - mongodb@6.10.0(socks@2.8.3): + mongodb@6.14.2(socks@2.8.3): dependencies: - '@mongodb-js/saslprep': 1.1.9 - bson: 6.9.0 - mongodb-connection-string-url: 3.0.1 + '@mongodb-js/saslprep': 1.2.0 + bson: 6.10.3 + mongodb-connection-string-url: 3.0.2 optionalDependencies: socks: 2.8.3 - mongoose@8.8.2(socks@2.8.3): + mongoose@8.12.1(socks@2.8.3): dependencies: - bson: 6.9.0 + bson: 6.10.3 kareem: 2.6.3 - mongodb: 6.10.0(socks@2.8.3) + mongodb: 6.14.2(socks@2.8.3) mpath: 0.9.0 mquery: 5.0.0 ms: 2.1.3 @@ -3271,7 +3055,7 @@ snapshots: mquery@5.0.0: dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -3281,7 +3065,7 @@ snapshots: natural-compare@1.4.0: {} - node-addon-api@5.1.0: {} + node-addon-api@8.3.1: {} node-domexception@1.0.0: {} @@ -3295,11 +3079,6 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-html-parser@6.1.13: - dependencies: - css-select: 5.1.0 - he: 1.2.0 - nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -3365,10 +3144,10 @@ snapshots: path-type@4.0.0: {} - peek-readable@4.1.0: {} - picomatch@2.3.1: {} + picomatch@4.0.2: {} + plimit-lit@1.6.1: dependencies: queue-lit: 1.5.2 @@ -3377,22 +3156,22 @@ snapshots: prettier-eslint@16.3.0: dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) common-tags: 1.8.2 dlv: 1.1.3 eslint: 8.57.1 indent-string: 4.0.0 lodash.merge: 4.6.2 loglevel-colored-level-prefix: 1.0.0 - prettier: 3.4.2 + prettier: 3.5.3 pretty-format: 29.7.0 require-relative: 0.8.7 - typescript: 5.7.3 + typescript: 5.8.2 vue-eslint-parser: 9.4.3(eslint@8.57.1) transitivePeerDependencies: - supports-color - prettier@3.4.2: {} + prettier@3.5.3: {} pretty-format@29.7.0: dependencies: @@ -3400,9 +3179,9 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prism-media@1.3.5(@discordjs/opus@0.9.0): + prism-media@1.3.5(@discordjs/opus@0.10.0): optionalDependencies: - '@discordjs/opus': 0.9.0 + '@discordjs/opus': 0.10.0 process-nextick-args@2.0.1: {} @@ -3443,10 +3222,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-web-to-node-stream@3.0.2: - dependencies: - readable-stream: 3.6.2 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -3465,13 +3240,7 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - reusify@1.0.4: {} - - reverbnation-scraper@2.0.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding + reusify@1.1.0: {} rimraf@3.0.2: dependencies: @@ -3495,7 +3264,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} + semver@7.7.1: {} serialize-javascript@6.0.2: dependencies: @@ -3524,21 +3293,10 @@ snapshots: smart-buffer: 4.2.0 optional: true - soundcloud.ts@0.5.5: - dependencies: - undici: 6.19.8 - sparse-bitfield@3.0.3: dependencies: memory-pager: 1.5.0 - spotify-uri@4.1.0: {} - - spotify-url-info@3.2.16: - dependencies: - himalaya: 1.1.0 - spotify-uri: 4.1.0 - sprintf-js@1.1.3: optional: true @@ -3573,11 +3331,6 @@ snapshots: strip-json-comments@3.1.1: {} - strtok3@6.3.0: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 4.1.0 - supports-color@2.0.0: {} supports-color@7.2.0: @@ -3595,34 +3348,27 @@ snapshots: text-table@0.2.0: {} - tiny-typed-emitter@2.1.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - token-types@4.2.1: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - tr46@0.0.3: {} - tr46@4.1.1: + tr46@5.0.0: dependencies: punycode: 2.3.1 - ts-api-utils@1.4.3(typescript@5.7.3): + ts-api-utils@1.4.3(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 - ts-api-utils@2.0.0(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 ts-mixer@6.0.4: {} - tsc-alias@1.8.10: + tsc-alias@1.8.11: dependencies: chokidar: 3.6.0 commander: 9.5.0 @@ -3631,12 +3377,12 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tslib@2.7.0: {} + tslib@2.8.1: {} - tsx@4.19.2: + tsx@4.19.3: dependencies: - esbuild: 0.23.1 - get-tsconfig: 4.8.1 + esbuild: 0.25.0 + get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -3646,22 +3392,12 @@ snapshots: type-fest@0.20.2: {} - typescript@5.7.3: {} + typescript@5.8.2: {} undici-types@6.20.0: {} - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - - undici@6.19.8: {} - - undici@6.21.0: {} - undici@6.21.1: {} - unfetch@5.0.0: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -3672,14 +3408,14 @@ snapshots: vue-eslint-parser@9.4.3(eslint@8.57.1): dependencies: - debug: 4.3.7 + debug: 4.4.0 eslint: 8.57.1 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.6.0 lodash: 4.17.21 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -3689,9 +3425,9 @@ snapshots: webidl-conversions@7.0.0: {} - whatwg-url@13.0.0: + whatwg-url@14.1.1: dependencies: - tr46: 4.1.1 + tr46: 5.0.0 webidl-conversions: 7.0.0 whatwg-url@5.0.0: @@ -3711,7 +3447,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.18.0: {} + ws@8.18.1: {} xmlbuilder@8.2.2: {} @@ -3723,12 +3459,3 @@ snapshots: yallist@4.0.0: {} yocto-queue@0.1.0: {} - - youtube-sr@4.3.11: {} - - youtubei.js@11.0.1: - dependencies: - '@bufbuild/protobuf': 2.1.0 - jintr: 3.0.2 - tslib: 2.7.0 - undici: 5.28.4 diff --git a/src/commands/Administration/addemoji.ts b/src/commands/Administration/addemoji.ts index c40bbc8a..65246891 100644 --- a/src/commands/Administration/addemoji.ts +++ b/src/commands/Administration/addemoji.ts @@ -1,17 +1,17 @@ import { replyError, replySuccess } from "@/helpers/extenders.js"; import { CommandData, SlashCommandProps } from "@/types.js"; import useClient from "@/utils/use-client.js"; -import { ApplicationCommandOptionType, ApplicationIntegrationType, InteractionContextType } from "discord.js"; +import { ApplicationCommandOptionType, ApplicationIntegrationType, InteractionContextType, MessageFlags } from "discord.js"; const client = useClient(); export const data: CommandData = { name: "addemoji", - description: client.translate("administration/addemoji:DESCRIPTION"), + description: client.i18n.translate("administration/addemoji:DESCRIPTION"), // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("administration/addemoji:DESCRIPTION", { lng: "uk-UA" }), - ru: client.translate("administration/addemoji:DESCRIPTION", { lng: "ru-RU" }), + ru: client.i18n.translate("administration/addemoji:DESCRIPTION", { lng: "ru-RU" }), + uk: client.i18n.translate("administration/addemoji:DESCRIPTION", { lng: "uk-UA" }), }, // eslint-disable-next-line camelcase integration_types: [ApplicationIntegrationType.GuildInstall], @@ -19,34 +19,34 @@ export const data: CommandData = { options: [ { name: "link", - description: client.translate("common:LINK"), + description: client.i18n.translate("common:LINK"), type: ApplicationCommandOptionType.String, required: true, // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("common:LINK", { lng: "uk-UA" }), - ru: client.translate("common:LINK", { lng: "ru-RU" }), + ru: client.i18n.translate("common:LINK", { lng: "ru-RU" }), + uk: client.i18n.translate("common:LINK", { lng: "uk-UA" }), }, }, { name: "name", - description: client.translate("common:NAME"), + description: client.i18n.translate("common:NAME"), type: ApplicationCommandOptionType.String, required: true, // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("common:NAME", { lng: "uk-UA" }), - ru: client.translate("common:NAME", { lng: "ru-RU" }), + ru: client.i18n.translate("common:NAME", { lng: "ru-RU" }), + uk: client.i18n.translate("common:NAME", { lng: "uk-UA" }), }, }, ], }; export const run = async ({ interaction }: SlashCommandProps) => { - await interaction.deferReply({ ephemeral: true }); + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); - const attachment = interaction.options.getString("link") || "", - name = interaction.options.getString("name") || ""; + const attachment = interaction.options.getString("link") || ""; + const name = interaction.options.getString("name") || ""; try { const emoji = await interaction.guild?.emojis.create({ name, attachment }); diff --git a/src/commands/Administration/config.ts b/src/commands/Administration/config.ts new file mode 100644 index 00000000..8a2c5964 --- /dev/null +++ b/src/commands/Administration/config.ts @@ -0,0 +1,229 @@ +import { replyError, translateContext } from "@/helpers/extenders.js"; +import { CommandData, SlashCommandProps } from "@/types.js"; +import { createEmbed } from "@/utils/create-embed.js"; +import useClient from "@/utils/use-client.js"; +import { ApplicationCommandOptionType, ApplicationIntegrationType, ChannelType, ChatInputCommandInteraction, InteractionContextType, MessageFlags, PermissionsBitField } from "discord.js"; + +const client = useClient(); + +export const data: CommandData = { + name: "config", + description: client.i18n.translate("administration/config:DESCRIPTION"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("administration/config:DESCRIPTION", { lng: "ru-RU" }), + uk: client.i18n.translate("administration/config:DESCRIPTION", { lng: "uk-UA" }), + }, + // eslint-disable-next-line camelcase + integration_types: [ApplicationIntegrationType.GuildInstall], + contexts: [InteractionContextType.Guild], + // eslint-disable-next-line camelcase + default_member_permissions: String(PermissionsBitField.Flags.ManageGuild), + options: [ + { + name: "list", + description: client.i18n.translate("administration/config:LIST"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("administration/config:LIST", { lng: "ru-RU" }), + uk: client.i18n.translate("administration/config:LIST", { lng: "uk-UA" }), + }, + type: ApplicationCommandOptionType.Subcommand, + }, + { + name: "set", + description: client.i18n.translate("administration/config:SET"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("administration/config:SET", { lng: "ru-RU" }), + uk: client.i18n.translate("administration/config:SET", { lng: "uk-UA" }), + }, + type: ApplicationCommandOptionType.Subcommand, + options: [ + { + name: "parameter", + description: client.i18n.translate("administration/config:PARAMETER"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("administration/config:PARAMETER", { lng: "ru-RU" }), + uk: client.i18n.translate("administration/config:PARAMETER", { lng: "uk-UA" }), + }, + type: ApplicationCommandOptionType.String, + required: true, + choices: [ + { name: client.i18n.translate("administration/config:BIRTHDAYS"), value: "birthdays" }, + { name: client.i18n.translate("administration/config:MODLOGS"), value: "modlogs" }, + { name: client.i18n.translate("administration/config:REPORTS"), value: "reports" }, + { name: client.i18n.translate("administration/config:SUGGESTIONS"), value: "suggestions" }, + { name: client.i18n.translate("administration/config:TICKETSCATEGORY"), value: "tickets.ticketsCategory" }, + { name: client.i18n.translate("administration/config:TICKETLOGS"), value: "tickets.ticketLogs" }, + { name: client.i18n.translate("administration/config:TRANSCRIPTIONLOGS"), value: "tickets.transcriptionLogs" }, + { name: client.i18n.translate("administration/config:MESSAGEUPDATE"), value: "monitoring.messageUpdate" }, + { name: client.i18n.translate("administration/config:MESSAGEDELETE"), value: "monitoring.messageDelete" }, + ], + }, + { + name: "boolean", + description: client.i18n.translate("common:STATE"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("common:STATE", { lng: "ru-RU" }), + uk: client.i18n.translate("common:STATE", { lng: "uk-UA" }), + }, + type: ApplicationCommandOptionType.Boolean, + required: true, + }, + { + name: "channel", + description: client.i18n.translate("common:CHANNEL"), + // eslint-disable-next-line camelcase + description_localizations: { + ru: client.i18n.translate("common:CHANNEL", { lng: "ru-RU" }), + uk: client.i18n.translate("common:CHANNEL", { lng: "uk-UA" }), + }, + type: ApplicationCommandOptionType.Channel, + required: false, + }, + ], + }, + ], +}; + +export const run = async ({ interaction }: SlashCommandProps) => { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.guild) return replyError(interaction, "misc:GUILD_ONLY", null, { edit: true }); + + const guildData = await client.getGuildData(interaction.guild.id); + const command = interaction.options.getSubcommand(); + + if (command === "list") { + const embed = createEmbed({ + author: { + name: interaction.guild.name, + iconURL: interaction.guild.iconURL() || "", + }, + fields: [ + { + name: await translateContext(interaction, "administration/config:WELCOME_TITLE"), + value: guildData.plugins.welcome.enabled + ? await translateContext(interaction, "administration/config:WELCOME_CONTENT", { + channel: `<#${guildData.plugins.welcome.channel}>`, + withImage: guildData.plugins.welcome.withImage ? await translateContext(interaction, "common:YES") : await translateContext(interaction, "common:NO"), + }) + : await translateContext(interaction, "common:DISABLED"), + inline: true, + }, + { + name: await translateContext(interaction, "administration/config:GOODBYE_TITLE"), + value: guildData.plugins.goodbye.enabled + ? await translateContext(interaction, "administration/config:GOODBYE_CONTENT", { + channel: `<#${guildData.plugins.goodbye.channel}>`, + withImage: guildData.plugins.goodbye.withImage ? await translateContext(interaction, "common:YES") : await translateContext(interaction, "common:NO"), + }) + : await translateContext(interaction, "common:DISABLED"), + inline: true, + }, + { + name: await translateContext(interaction, "administration/config:MONITORING_CHANNELS"), + value: + `${await translateContext(interaction, "administration/config:MESSAGEUPDATE")}: ${guildData.plugins?.monitoring?.messageUpdate ? `<#${guildData.plugins?.monitoring?.messageUpdate}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:MESSAGEDELETE")}: ${guildData.plugins?.monitoring?.messageDelete ? `<#${guildData.plugins?.monitoring?.messageDelete}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n`, + }, + { + name: await translateContext(interaction, "administration/config:SPECIAL_CHANNELS"), + value: + `${await translateContext(interaction, "administration/config:BIRTHDAYS")}: ${guildData.plugins?.birthdays ? `<#${guildData.plugins.birthdays}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:MODLOGS")}: ${guildData.plugins?.modlogs ? `<#${guildData.plugins.modlogs}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:REPORTS")}: ${guildData.plugins?.reports ? `<#${guildData.plugins.reports}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:SUGGESTIONS")}: ${guildData.plugins?.suggestions ? `<#${guildData.plugins.suggestions}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:TICKETSCATEGORY")}: ${guildData.plugins?.tickets?.ticketsCategory ? `<#${guildData.plugins?.tickets?.ticketsCategory}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:TICKETLOGS")}: ${guildData.plugins?.tickets?.ticketLogs ? `<#${guildData.plugins?.tickets?.ticketLogs}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n` + + `${await translateContext(interaction, "administration/config:TRANSCRIPTIONLOGS")}: ${guildData.plugins?.tickets?.transcriptionLogs ? `<#${guildData.plugins?.tickets?.transcriptionLogs}>` : `*${await translateContext(interaction, "common:NOT_DEFINED")}*`}\n`, + }, + ], + }); + + return interaction.editReply({ + embeds: [embed], + }); + } else { + const parameter = interaction.options.getString("parameter", true), + state = interaction.options.getBoolean("state", true), + channel = interaction.options.getChannel("channel"); + + await changeSetting(interaction, guildData, parameter, state, channel); + } +}; + +async function changeSetting(interaction: ChatInputCommandInteraction, data: any, parameter: string, state: boolean, channel: any) { // TODO: Proper type for channel + const parameterSplitted = parameter.split("."); + + if (parameterSplitted.length === 2) { + if (data.plugins[parameterSplitted[0]] === undefined) data.plugins[parameterSplitted[0]] = {}; + + if (!state) { + data.plugins[parameterSplitted[0]][parameterSplitted[1]] = null; + + data.markModified(`plugins.${parameter}`); + await data.save(); + + return interaction.reply({ + content: `${await translateContext(interaction, `administration/config:${parameterSplitted.length === 2 ? parameterSplitted[1].toUpperCase() : parameter.toUpperCase()}`)}: **${await translateContext(interaction, "common:DISABLED")}**`, + ephemeral: true, + }); + } else { + if (parameterSplitted[1] === "ticketsCategory" && channel?.type !== ChannelType.GuildCategory) return interaction.reply({ content: await translateContext(interaction, "administration/config:TICKETS_NOT_CATEGORY"), ephemeral: true }); + + if (channel) { + data.plugins[parameterSplitted[0]][parameterSplitted[1]] = channel.id; + + data.markModified(`plugins.${parameter}`); + await data.save(); + + return interaction.reply({ + content: `${await translateContext(interaction, `administration/config:${parameterSplitted.length === 2 ? parameterSplitted[1].toUpperCase() : parameter.toUpperCase()}`)}: **${await translateContext(interaction, "common:ENABLED")}** (${channel.toString()})`, + ephemeral: true, + }); + } else { + return interaction.reply({ + content: `${await translateContext(interaction, `administration/config:${parameterSplitted.length === 2 ? parameterSplitted[1].toUpperCase() : parameter.toUpperCase()}`)}: ${ + data.plugins[parameter] ? `**${await translateContext(interaction, "common:ENABLED")}** (<#${data.plugins[parameter]}>)` : `**${await translateContext(interaction, "common:DISABLED")}**` + }`, + ephemeral: true, + }); + } + }; + } else { + if (!state) { + data.plugins[parameter] = null; + + data.markModified(`plugins.${parameter}`); + await data.save(); + + return interaction.reply({ + content: `${client.i18n.translate(`administration/config:${parameter.toUpperCase()}`)}: **${client.i18n.translate("common:DISABLED")}**`, + ephemeral: true, + }); + } else { + if (channel) { + data.plugins[parameter] = channel.id; + + data.markModified(`plugins.${parameter}`); + await data.save(); + + return interaction.reply({ + content: `${client.i18n.translate(`administration/config:${parameter.toUpperCase()}`)}: **${client.i18n.translate("common:ENABLED")}** (${channel.toString()})`, + ephemeral: true, + }); + } else { + return interaction.reply({ + content: `${client.i18n.translate(`administration/config:${parameter.toUpperCase()}`)}: ${ + data.plugins[parameter] ? `**${client.i18n.translate("common:ENABLED")}** (<#${data.plugins[parameter]}>)` : `**${client.i18n.translate("common:DISABLED")}**` + }`, + ephemeral: true, + }); + } + } + } +} diff --git a/src/commands/Economy/birthdate.ts b/src/commands/Economy/birthdate.ts index 3e703f90..b8abca05 100644 --- a/src/commands/Economy/birthdate.ts +++ b/src/commands/Economy/birthdate.ts @@ -1,17 +1,17 @@ import { replyError, replySuccess } from "@/helpers/extenders.js"; import { CommandData, SlashCommandProps } from "@/types.js"; import useClient from "@/utils/use-client.js"; -import { ApplicationCommandOptionType, ApplicationIntegrationType, InteractionContextType } from "discord.js"; +import { ApplicationCommandOptionType, ApplicationIntegrationType, InteractionContextType, MessageFlags } from "discord.js"; const client = useClient(); export const data: CommandData = { name: "birthdate", - description: client.translate("economy/birthdate:DESCRIPTION"), + description: client.i18n.translate("economy/birthdate:DESCRIPTION"), // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("economy/birthdate:DESCRIPTION", { lng: "uk-UA" }), - ru: client.translate("economy/birthdate:DESCRIPTION", { lng: "ru-RU" }), + uk: client.i18n.translate("economy/birthdate:DESCRIPTION", { lng: "uk-UA" }), + ru: client.i18n.translate("economy/birthdate:DESCRIPTION", { lng: "ru-RU" }), }, // eslint-disable-next-line camelcase integration_types: [ApplicationIntegrationType.GuildInstall, ApplicationIntegrationType.UserInstall], @@ -19,75 +19,73 @@ export const data: CommandData = { options: [ { name: "day", - description: client.translate("economy/birthdate:DAY"), + description: client.i18n.translate("economy/birthdate:DAY"), type: ApplicationCommandOptionType.Integer, // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("economy/birthdate:DAY", { lng: "uk-UA" }), - ru: client.translate("economy/birthdate:DAY", { lng: "ru-RU" }), + uk: client.i18n.translate("economy/birthdate:DAY", { lng: "uk-UA" }), + ru: client.i18n.translate("economy/birthdate:DAY", { lng: "ru-RU" }), }, }, { name: "month", - description: client.translate("economy/birthdate:MONTH"), + description: client.i18n.translate("economy/birthdate:MONTH"), type: ApplicationCommandOptionType.Integer, // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("economy/birthdate:MONTH", { lng: "uk-UA" }), - ru: client.translate("economy/birthdate:MONTH", { lng: "ru-RU" }), + uk: client.i18n.translate("economy/birthdate:MONTH", { lng: "uk-UA" }), + ru: client.i18n.translate("economy/birthdate:MONTH", { lng: "ru-RU" }), }, choices: [ - { name: client.translate("misc:MONTHS:JANUARY"), value: 1 }, - { name: client.translate("misc:MONTHS:FEBRUARY"), value: 2 }, - { name: client.translate("misc:MONTHS:MARCH"), value: 3 }, - { name: client.translate("misc:MONTHS:APRIL"), value: 4 }, - { name: client.translate("misc:MONTHS:MAY"), value: 5 }, - { name: client.translate("misc:MONTHS:JUNE"), value: 6 }, - { name: client.translate("misc:MONTHS:JULY"), value: 7 }, - { name: client.translate("misc:MONTHS:AUGUST"), value: 8 }, - { name: client.translate("misc:MONTHS:SEPTEMBER"), value: 9 }, - { name: client.translate("misc:MONTHS:OCTOBER"), value: 10 }, - { name: client.translate("misc:MONTHS:NOVEMBER"), value: 11 }, - { name: client.translate("misc:MONTHS:DECEMBER"), value: 12 }, + { name: client.i18n.translate("misc:MONTHS:JANUARY"), value: 1 }, + { name: client.i18n.translate("misc:MONTHS:FEBRUARY"), value: 2 }, + { name: client.i18n.translate("misc:MONTHS:MARCH"), value: 3 }, + { name: client.i18n.translate("misc:MONTHS:APRIL"), value: 4 }, + { name: client.i18n.translate("misc:MONTHS:MAY"), value: 5 }, + { name: client.i18n.translate("misc:MONTHS:JUNE"), value: 6 }, + { name: client.i18n.translate("misc:MONTHS:JULY"), value: 7 }, + { name: client.i18n.translate("misc:MONTHS:AUGUST"), value: 8 }, + { name: client.i18n.translate("misc:MONTHS:SEPTEMBER"), value: 9 }, + { name: client.i18n.translate("misc:MONTHS:OCTOBER"), value: 10 }, + { name: client.i18n.translate("misc:MONTHS:NOVEMBER"), value: 11 }, + { name: client.i18n.translate("misc:MONTHS:DECEMBER"), value: 12 }, ], }, { name: "year", - description: client.translate("economy/birthdate:YEAR"), + description: client.i18n.translate("economy/birthdate:YEAR"), type: ApplicationCommandOptionType.Integer, // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("economy/birthdate:YEAR", { lng: "uk-UA" }), - ru: client.translate("economy/birthdate:YEAR", { lng: "ru-RU" }), + uk: client.i18n.translate("economy/birthdate:YEAR", { lng: "uk-UA" }), + ru: client.i18n.translate("economy/birthdate:YEAR", { lng: "ru-RU" }), }, }, { name: "clear", type: ApplicationCommandOptionType.Boolean, - description: client.translate("economy/birthdate:CLEAR"), + description: client.i18n.translate("economy/birthdate:CLEAR"), // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("economy/birthdate:CLEAR", { lng: "uk-UA" }), - ru: client.translate("economy/birthdate:CLEAR", { lng: "ru-RU" }), + uk: client.i18n.translate("economy/birthdate:CLEAR", { lng: "uk-UA" }), + ru: client.i18n.translate("economy/birthdate:CLEAR", { lng: "ru-RU" }), }, }, { name: "ephemeral", type: ApplicationCommandOptionType.Boolean, - description: client.translate("misc:EPHEMERAL_RESPONSE"), + description: client.i18n.translate("misc:EPHEMERAL_RESPONSE"), // eslint-disable-next-line camelcase description_localizations: { - uk: client.translate("misc:EPHEMERAL_RESPONSE", { lng: "uk-UA" }), - ru: client.translate("misc:EPHEMERAL_RESPONSE", { lng: "ru-RU" }), + uk: client.i18n.translate("misc:EPHEMERAL_RESPONSE", { lng: "uk-UA" }), + ru: client.i18n.translate("misc:EPHEMERAL_RESPONSE", { lng: "ru-RU" }), }, }, ], }; -export const run = async ({ interaction, client }: SlashCommandProps) => { - await interaction.deferReply({ - ephemeral: interaction.options.getBoolean("ephemeral") || false, - }); +export const run = async ({ interaction }: SlashCommandProps) => { + await interaction.deferReply({ flags: interaction.options.getBoolean("ephemeral") ? MessageFlags.Ephemeral : undefined }); const userData = await client.getUserData(interaction.user.id); @@ -95,24 +93,18 @@ export const run = async ({ interaction, client }: SlashCommandProps) => { userData.birthdate = null; await userData.save(); - return replySuccess( - interaction, - "economy/birthdate:SUCCESS", - { date: "none" }, - { - edit: true, - }, - ); + return replySuccess(interaction, "economy/birthdate:SUCCESS", { date: "none" }, { edit: true }); } - const day = interaction.options.getInteger("day")!, - month = interaction.options.getInteger("month")!, - year = interaction.options.getInteger("year")!, + const day = interaction.options.getInteger("day", true), + month = interaction.options.getInteger("month", true), + year = interaction.options.getInteger("year", true), date = new Date(year, month - 1, day); - date.setHours(12); + // This should be the same day in all timezones + date.setHours(13); - const d = Math.floor(date.getTime() / 1000); + const d = date.getTime(); if (!(day === date.getDate() && month - 1 === date.getMonth() && year === date.getFullYear())) return replyError(interaction, "economy/birthdate:INVALID_DATE", null, { edit: true }); if (date.getTime() > Date.now()) return replyError(interaction, "economy/birthdate:DATE_TOO_HIGH", null, { edit: true }); @@ -126,7 +118,7 @@ export const run = async ({ interaction, client }: SlashCommandProps) => { interaction, "economy/birthdate:SUCCESS", { - date: ``, + date: ``, }, { edit: true, diff --git a/src/constants/index.ts b/src/constants/index.ts index ad8b6bb8..84896d00 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -9,7 +9,7 @@ export const CLIENT_INTENTS = [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildModeration, - GatewayIntentBits.GuildEmojisAndStickers, + GatewayIntentBits.GuildExpressions, GatewayIntentBits.GuildIntegrations, GatewayIntentBits.GuildInvites, GatewayIntentBits.GuildVoiceStates, diff --git a/src/events/Ready.ts b/src/events/Ready.ts index 9ea56c61..6caf6ed1 100644 --- a/src/events/Ready.ts +++ b/src/events/Ready.ts @@ -15,7 +15,7 @@ export const data = { export async function run(client: ExtendedClient) { let guildsCount = client.guilds.cache.size; - const status = ["Use /help to see all the commands!", `I'm in ${guildsCount} ${getNoun(guildsCount, [client.translate("misc:NOUNS:SERVER:1"), client.translate("misc:NOUNS:SERVER:2"), client.translate("misc:NOUNS:SERVER:5")])}!`]; + const status = ["Use /help to see all the commands!", `I'm in ${guildsCount} ${getNoun(guildsCount, [client.i18n.translate("misc:NOUNS:SERVER:1"), client.i18n.translate("misc:NOUNS:SERVER:2"), client.i18n.translate("misc:NOUNS:SERVER:5")])}!`]; logger.ready(`${getUsername(client.user)} is online! Serving ${guildsCount}`); diff --git a/src/handlers/event-handler/index.ts b/src/handlers/event-handler/index.ts index a3980c8a..dc7472d0 100644 --- a/src/handlers/event-handler/index.ts +++ b/src/handlers/event-handler/index.ts @@ -2,7 +2,7 @@ import { resolve } from "node:path"; import logger from "@/helpers/logger.js"; import { getFilePaths } from "@/utils/get-path.js"; import { toFileURL } from "@/utils/resolve-file.js"; -import { GuildQueueEvents, useMainPlayer } from "discord-player"; +// import { GuildQueueEvents, useMainPlayer } from "discord-player"; import { ExtendedClient } from "@/structures/client.js"; import { ClientEvents } from "discord.js"; @@ -63,15 +63,14 @@ export class EventHandler { } $registerEvents() { - const player = useMainPlayer(); + // const player = useMainPlayer(); + this.events.forEach(event => { - if (event.data.player) { - player.events.on(event.data.name as keyof GuildQueueEvents, event.run); - } else if (event.data.once) { - this.client.once(event.data.name, event.run); - } else { - this.client.on(event.data.name, event.run); - } + /* if (event.data.player) player.events.on(event.data.name as keyof GuildQueueEvents, event.run); + else */ + + if (event.data.once) this.client.once(event.data.name, event.run); + else this.client.on(event.data.name, event.run); }); } } diff --git a/src/helpers/extenders.ts b/src/helpers/extenders.ts index e603c259..a85db99c 100644 --- a/src/helpers/extenders.ts +++ b/src/helpers/extenders.ts @@ -1,10 +1,11 @@ -import { BaseInteraction, CacheType, Interaction, InteractionReplyOptions, Message, User } from "discord.js"; +import { BaseInteraction, CacheType, Interaction, InteractionReplyOptions, Message, MessageFlags, User } from "discord.js"; import useClient from "@/utils/use-client.js"; interface Options extends InteractionReplyOptions { prefixEmoji?: string; locale?: string; edit?: boolean; + ephemeral?: boolean; mention?: boolean; } @@ -22,47 +23,54 @@ const getAppEmojis = () => { const formatReply = (message: string, prefixEmoji?: string) => { const emojis = getAppEmojis(); - const emoji = emojis.find(emoji => emoji.name === prefixEmoji); - return prefixEmoji ? `${emoji?.toString()} ${message}` : `${message}`; + const emoji = emojis.find(emoji => emoji.name === prefixEmoji) || ":white_small_square:"; + return prefixEmoji ? `${emoji.toString()} ${message}` : `${message}`; }; export const getUsername = (user: User) => (user.discriminator === "0" ? user.username : user.tag); -export const replyTranslated = async (context: Interaction | Message, key: string, args: Record | null, options: Options) => { +export const translateContext = async (context: Interaction | Message, key: string, args?: Record | null, options?: Options) => { const client = useClient(); - const locale = options.locale || client.configService.get("defaultLang"); - const translated = client.translate(key, { + const inGuild = context.guild ? await getLocale(context.guild.id) : ""; + + const locale = options?.locale || inGuild || client.configService.get("defaultLang"); + const translated = client.i18n.translate(key, { lng: locale, ...args, }); - const content = formatReply(translated, options.prefixEmoji); + return translated; +}; + +export const replyTranslated = async (context: Interaction | Message, key: string, args?: Record | null, options?: Options) => { + const translated = await translateContext(context, key, args, options); + const content = formatReply(translated, options?.prefixEmoji); if (context instanceof BaseInteraction) { if (!context.isRepliable()) return; - if (options.edit) return await context.editReply({ content }); + if (options?.edit) return await context.editReply({ content }); await context.reply({ content, - ephemeral: options.ephemeral || false, + flags: options?.ephemeral ? MessageFlags.Ephemeral : undefined, }); return; } - if (options.edit) return await context.edit({ content, allowedMentions: { repliedUser: options.mention || false } }); + if (options?.edit) return await context.edit({ content, allowedMentions: { repliedUser: options.mention || false } }); await context.reply({ content, - allowedMentions: { repliedUser: options.mention || false }, + allowedMentions: { repliedUser: options?.mention || false }, }); }; export const replySuccess = async (context: Interaction | Message, key: string, args: Record | null, - options: Options = { prefixEmoji: "success" }) => await replyTranslated(context, key, args, options); + options: Options = { prefixEmoji: "success" }) => await replyTranslated(context, key, args, { prefixEmoji: "success", ...options }); export const replyError = async (context: Interaction | Message, key: string, args: Record | null, - options: Options = { prefixEmoji: "error" }) => await replyTranslated(context, key, args, options); + options: Options = { prefixEmoji: "error" }) => await replyTranslated(context, key, args, { prefixEmoji: "error", ...options }); diff --git a/src/helpers/tasks/birthdays.ts b/src/helpers/tasks/birthdays.ts index 2dab5e60..9580ba19 100644 --- a/src/helpers/tasks/birthdays.ts +++ b/src/helpers/tasks/birthdays.ts @@ -49,13 +49,13 @@ export const data = { }, fields: [ { - name: client.translate("economy/birthdate:HAPPY_BIRTHDAY", { + name: client.i18n.translate("economy/birthdate:HAPPY_BIRTHDAY", { lng: data.language, }), - value: client.translate("economy/birthdate:HAPPY_BIRTHDAY_MESSAGE", { + value: client.i18n.translate("economy/birthdate:HAPPY_BIRTHDAY_MESSAGE", { lng: data.language, user: user.id, - age: `**${age}** ${getNoun(age, [client.translate("misc:NOUNS:AGE:1", data.language), client.translate("misc:NOUNS:AGE:2", data.language), client.translate("misc:NOUNS:AGE:5", data.language)])}`, + age: `**${age}** ${getNoun(age, [client.i18n.translate("misc:NOUNS:AGE:1", data.language), client.i18n.translate("misc:NOUNS:AGE:2", data.language), client.i18n.translate("misc:NOUNS:AGE:5", data.language)])}`, }), }, ], diff --git a/src/helpers/tasks/checkReminds.ts b/src/helpers/tasks/checkReminds.ts index 073da450..ac3f1923 100644 --- a/src/helpers/tasks/checkReminds.ts +++ b/src/helpers/tasks/checkReminds.ts @@ -33,21 +33,21 @@ export const data: CronTaskData = { mustSent.forEach(async r => { const embed = createEmbed({ author: { - name: client.translate("general/remindme:EMBED_TITLE"), + name: client.i18n.translate("general/remindme:EMBED_TITLE"), }, fields: [ { - name: client.translate("general/remindme:EMBED_CREATED"), + name: client.i18n.translate("general/remindme:EMBED_CREATED"), value: ``, inline: true, }, { - name: client.translate("general/remindme:EMBED_TIME"), + name: client.i18n.translate("general/remindme:EMBED_TIME"), value: ``, inline: true, }, { - name: client.translate("common:MESSAGE"), + name: client.i18n.translate("common:MESSAGE"), value: r.message, }, ], diff --git a/src/services/languages/index.ts b/src/services/languages/index.ts index dd6482d1..9561aed6 100644 --- a/src/services/languages/index.ts +++ b/src/services/languages/index.ts @@ -59,8 +59,8 @@ export default class InternationalizationService { options?: | TOptionsBase | { - [key: string]: string; - }, + [key: string]: string; + }, ) { const lng = options?.lng || this.options.defaultLanguage; return i18next.t(key, { lng, ...options }); diff --git a/src/services/languages/locales/en-US/administration/config.json b/src/services/languages/locales/en-US/administration/config.json index 29fc99cf..657c31c5 100644 --- a/src/services/languages/locales/en-US/administration/config.json +++ b/src/services/languages/locales/en-US/administration/config.json @@ -29,7 +29,7 @@ "KICK_NOT_DEFINED": "Kick: Not set", "LIST": "Display server settings", "SET": "Modify server settings", - "SETTING": "Settings", + "PARAMETER": "Parameter", "WELCOME_TITLE": "Welcome", "WELCOME_CONTENT": "Channel: {{channel}}\nCard: {{withImage}}" } \ No newline at end of file diff --git a/src/services/languages/locales/ru-RU/administration/config.json b/src/services/languages/locales/ru-RU/administration/config.json index eb229e73..8ae9fbfb 100644 --- a/src/services/languages/locales/ru-RU/administration/config.json +++ b/src/services/languages/locales/ru-RU/administration/config.json @@ -29,7 +29,7 @@ "KICK_NOT_DEFINED": "Кик: Не назначено", "LIST": "Показать настройки сервера", "SET": "Изменить настройки сервера", - "SETTING": "Параметр", + "PARAMETER": "Параметр", "WELCOME_TITLE": "Приветствие", "WELCOME_CONTENT": "Канал: {{channel}}\nКарточка: {{withImage}}" } \ No newline at end of file diff --git a/src/services/languages/locales/uk-UA/administration/config.json b/src/services/languages/locales/uk-UA/administration/config.json index 63c4c186..5863d2e5 100644 --- a/src/services/languages/locales/uk-UA/administration/config.json +++ b/src/services/languages/locales/uk-UA/administration/config.json @@ -29,7 +29,7 @@ "KICK_NOT_DEFINED": "Кік: Не призначено", "LIST": "Показати налаштування серверу", "SET": "Змінити налаштування серверу ", - "SETTING": "Параметр", + "PARAMETER": "Параметр", "WELCOME_TITLE": "Привітання", "WELCOME_CONTENT": "Канал: {{channel}}\nКартка: {{withImage}}" } \ No newline at end of file diff --git a/src/structures/client.ts b/src/structures/client.ts index dca3650e..194cdde9 100644 --- a/src/structures/client.ts +++ b/src/structures/client.ts @@ -7,7 +7,7 @@ import ConfigService from "@/services/config/index.js"; import InternationalizationService from "@/services/languages/index.js"; import { SUPER_CONTEXT } from "@/constants/index.js"; import { cacheRemindsData } from "@/types.js"; -import { Player } from "discord-player"; +// import { Player } from "discord-player"; export class ExtendedClient extends Client { configService = new ConfigService(); @@ -27,15 +27,15 @@ export class ExtendedClient extends Client { }); constructor(options: ClientOptions) { - if (SUPER_CONTEXT.getStore()) { - return SUPER_CONTEXT.getStore() as ExtendedClient; - } + if (SUPER_CONTEXT.getStore()) return SUPER_CONTEXT.getStore() as ExtendedClient; + super(options); new Handlers(this); // @ts-ignore - because ExtendedClient != Client from discord.js - new Player(this); + // new Player(this); + SUPER_CONTEXT.enterWith(this); }