diff --git a/commands/admin/addbonus.js b/commands/admin/addbonus.js index 8629561..99a4811 100644 --- a/commands/admin/addbonus.js +++ b/commands/admin/addbonus.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class AddBonus extends Command { constructor (client) { @@ -13,28 +22,57 @@ class AddBonus extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let bonus = args[0]; - if(!bonus) return message.channel.send(message.language.addbonus.errors.bonus.missing(data.guild.prefix)); - if(isNaN(bonus) || (parseInt(bonus) < 1) || parseInt(bonus) >= 10000 || !Number.isInteger(parseInt(bonus))) return message.channel.send(message.language.addbonus.errors.bonus.incorrect(data.guild.prefix)); + if (!bonus) return message.channel.send(componentsV2.errorEmbed('Error', message.language.addbonus.errors.bonus.missing(data.guild.prefix))); + if (isNaN(bonus) || (parseInt(bonus) < 1) || parseInt(bonus) >= 10000 || !Number.isInteger(parseInt(bonus))) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.addbonus.errors.bonus.incorrect(data.guild.prefix))); + } let member = message.mentions.members.first() || await this.client.resolveMember(args.slice(1).join(" "), message.guild); - if(!member) return message.channel.send(message.language.addbonus.errors.member.missing(data.guild.prefix)); + if (!member) return message.channel.send(componentsV2.errorEmbed('Error', message.language.addbonus.errors.member.missing(data.guild.prefix))); let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id, bot: member.user.bot }); memberData.bonus += parseInt(bonus); memberData.markModified("bonus"); await memberData.save(); - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.addbonus.title() }) - .setDescription(message.language.addbonus.field(data.guild.prefix, member)) - .setColor(data.color) - .setFooter({ text: data.footer }); + const container = new ContainerBuilder() + .setAccentColor(color); - message.channel.send({ embeds: [embed] }); - } + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.addbonus.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`Added **${bonus}** bonus invites to **${member.user.tag}**\n\n${message.language.addbonus.field(data.guild.prefix, member)}`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = AddBonus; diff --git a/commands/admin/removebonus.js b/commands/admin/removebonus.js index dbea9da..66d1728 100644 --- a/commands/admin/removebonus.js +++ b/commands/admin/removebonus.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class RemoveBonus extends Command { constructor (client) { @@ -13,28 +22,57 @@ class RemoveBonus extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let bonus = args[0]; - if(!bonus) return message.channel.send(message.language.removebonus.errors.bonus.missing(data.guild.prefix)); - if(isNaN(bonus) || parseInt(bonus) < 1 || !Number.isInteger(parseInt(bonus))) return message.channel.send(message.language.removebonus.errors.bonus.incorrect(data.guild.prefix)); + if (!bonus) return message.channel.send(componentsV2.errorEmbed('Error', message.language.removebonus.errors.bonus.missing(data.guild.prefix))); + if (isNaN(bonus) || parseInt(bonus) < 1 || !Number.isInteger(parseInt(bonus))) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.removebonus.errors.bonus.incorrect(data.guild.prefix))); + } let member = message.mentions.members.first() || await this.client.resolveMember(args.slice(1).join(" "), message.guild); - if(!member) return message.channel.send(message.language.removebonus.errors.member.missing(data.guild.prefix)); + if (!member) return message.channel.send(componentsV2.errorEmbed('Error', message.language.removebonus.errors.member.missing(data.guild.prefix))); let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id, bot: member.user.bot }); memberData.bonus -= parseInt(bonus); memberData.markModified("bonus"); await memberData.save(); - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.removebonus.title() }) - .setDescription(message.language.removebonus.field(data.guild.prefix, member)) - .setColor(data.color) - .setFooter({ text: data.footer }); + const container = new ContainerBuilder() + .setAccentColor(color); - message.channel.send({ embeds: [embed] }); - } + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.removebonus.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`Removed **${bonus}** bonus invites from **${member.user.tag}**\n\n${message.language.removebonus.field(data.guild.prefix, member)}`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = RemoveBonus; diff --git a/commands/admin/removeinvites.js b/commands/admin/removeinvites.js index 8b593c6..810259b 100644 --- a/commands/admin/removeinvites.js +++ b/commands/admin/removeinvites.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class RemoveInvites extends Command { constructor (client) { @@ -13,10 +22,13 @@ class RemoveInvites extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let member = args[0] ? await this.client.resolveMember(args.join(" "), message.guild) : null; let msg = await (member ? message.channel.send(message.language.removeinvites.loading.member(data.guild.prefix, member)) : message.channel.send(message.language.removeinvites.loading.all(data.guild.prefix))); - if(member){ + + if (member) { let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id }); memberData.old_invites = memberData.invites; memberData.invites = 0; @@ -42,19 +54,44 @@ class RemoveInvites extends Command { }); } - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.removeinvites.title() }) - .setDescription((member ? + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.removeinvites.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(member ? message.language.removeinvites.titles.member(data.guild.prefix, member) : message.language.removeinvites.titles.all(data.guild.prefix) - )) - .setColor(data.color) - .setFooter({ text: data.footer }); + ); + container.addTextDisplayComponents(descText); - msg.edit({ content: null, embeds: [embed] }); + container.addSeparatorComponents(new SeparatorBuilder()); - } + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + msg.edit({ + content: null, + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = RemoveInvites; diff --git a/commands/admin/restoreinvites.js b/commands/admin/restoreinvites.js index a26973a..537ee8b 100644 --- a/commands/admin/restoreinvites.js +++ b/commands/admin/restoreinvites.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class RestoreInvites extends Command { constructor (client) { @@ -13,12 +22,14 @@ class RestoreInvites extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let member = args[0] ? await this.client.resolveMember(args.join(" "), message.guild) : null; - if(member) member.data = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id }); + if (member) member.data = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id }); let members = null; let memberCount = { invites: 0, leaves: 0, fake: 0, bonus: 0 }; - if(!member){ + if (!member) { members = await this.client.guildMembersData.find({ guildID: message.guild.id }); members.forEach((m) => { memberCount.invites += m.old_invites; @@ -39,11 +50,11 @@ class RestoreInvites extends Command { return conf.edit(message.language.restoreinvites.confirmations.cancelled()); } - if(collected.first().content === "cancel") return conf.edit(message.language.restoreinvites.confirmations.cancelled()); + if (collected.first().content === "cancel") return conf.edit(message.language.restoreinvites.confirmations.cancelled()); collected.first().delete().catch(() => {}); await (member ? conf.edit(message.language.restoreinvites.loading.member(data.guild.prefix, member)) : conf.edit(message.language.restoreinvites.loading.all(data.guild.prefix))); - if(member){ + if (member) { member.data.invites = member.data.old_invites; member.data.fake = member.data.old_fake; member.data.leaves = member.data.old_leaves; @@ -59,18 +70,44 @@ class RestoreInvites extends Command { }); } - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.restoreinvites.title() }) - .setDescription((member ? + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.restoreinvites.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(member ? message.language.restoreinvites.titles.member(data.guild.prefix, member) : message.language.restoreinvites.titles.all(data.guild.prefix) - )) - .setColor(data.color) - .setFooter({ text: data.footer }); + ); + container.addTextDisplayComponents(descText); - conf.edit({ content: null, embeds: [embed] }); - } + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + conf.edit({ + content: null, + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = RestoreInvites; diff --git a/commands/admin/sync-invites.js b/commands/admin/sync-invites.js index 0abbf08..cb10d97 100644 --- a/commands/admin/sync-invites.js +++ b/commands/admin/sync-invites.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class SyncInvites extends Command { constructor (client) { @@ -13,8 +23,11 @@ class SyncInvites extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + let guildInvites = await message.guild.invites.fetch(); - if(guildInvites.size === 0) return message.channel.send(message.language.syncinvites.no()); + if (guildInvites.size === 0) return message.channel.send(message.language.syncinvites.no()); let invitesCount = [...guildInvites.values()].map((i) => i.uses).reduce((p, c) => p + c); let conf = await message.channel.send(message.language.syncinvites.confirmations.all(invitesCount)); @@ -25,7 +38,7 @@ class SyncInvites extends Command { return conf.edit(message.language.syncinvites.confirmations.cancelled()); } - if(collected.first().content === "cancel") return conf.edit(message.language.syncinvites.confirmations.cancelled()); + if (collected.first().content === "cancel") return conf.edit(message.language.syncinvites.confirmations.cancelled()); collected.first().delete().catch(() => {}); let users = new Set([...guildInvites.values()].map((i) => i.inviter.id)); await this.client.functions.asyncForEach(Array.from(users), async (user) => { @@ -33,14 +46,42 @@ class SyncInvites extends Command { memberData.invites = [...guildInvites.values()].filter((i) => i.inviter.id === user).map((i) => i.uses).reduce((p, c) => p + c); await memberData.save(); }); - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.syncinvites.title() }) - .setDescription(message.language.restoreinvites.titles.all()) - .setColor(data.color) - .setFooter({ text: data.footer }); - conf.edit({ content: null, embeds: [embed] }); - } + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.syncinvites.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.restoreinvites.titles.all()); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + conf.edit({ + content: null, + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = SyncInvites; diff --git a/commands/configuration/config.js b/commands/configuration/config.js index a5171de..fa0f2d2 100644 --- a/commands/configuration/config.js +++ b/commands/configuration/config.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Config extends Command { constructor (client) { @@ -13,6 +22,8 @@ class Config extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let joinSuccess = data.guild.join.enabled && data.guild.join.message @@ -27,16 +38,55 @@ class Config extends Command { && data.guild.leave.channel && message.guild.channels.cache.get(data.guild.leave.channel); - let embed = new EmbedBuilder() - .setTitle(message.language.config.title(message.guild.name)) - .addFields( - { name: message.language.config.join.title(joinSuccess), value: message.language.config.join.content(message.guild, data), inline: true }, - { name: message.language.config.leave.title(leaveSuccess), value: message.language.config.leave.content(message.guild, data), inline: true }, - { name: message.language.config.joinDM.title(joinDMSuccess), value: message.language.config.joinDM.content(message.guild, data), inline: true } - ) - .setColor(data.color) - .setFooter({ text: data.footer }); - message.channel.send({ embeds: [embed] }); + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.config.title(message.guild.name)}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const joinSection = new TextDisplayBuilder() + .setContent(`${message.language.config.join.title(joinSuccess)}\n${message.language.config.join.content(message.guild, data)}`); + container.addTextDisplayComponents(joinSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const leaveSection = new TextDisplayBuilder() + .setContent(`${message.language.config.leave.title(leaveSuccess)}\n${message.language.config.leave.content(message.guild, data)}`); + container.addTextDisplayComponents(leaveSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const joinDMSection = new TextDisplayBuilder() + .setContent(`${message.language.config.joinDM.title(joinDMSuccess)}\n${message.language.config.joinDM.content(message.guild, data)}`); + container.addTextDisplayComponents(joinDMSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('config_refresh', ownerId)) + .setLabel('Refresh') + .setStyle(ButtonStyle.Primary), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } }; diff --git a/commands/configuration/setprefix.js b/commands/configuration/setprefix.js index e1e3368..a276916 100644 --- a/commands/configuration/setprefix.js +++ b/commands/configuration/setprefix.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class SetPrefix extends Command { constructor (client) { @@ -13,13 +22,51 @@ class SetPrefix extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + let prefix = args[0]; - if(!prefix || prefix.length > 5) return message.channel.send(message.language.setprefix.missing()); + if (!prefix || prefix.length > 5) { + return message.channel.send(componentsV2.errorEmbed( + 'Error', + message.language.setprefix.missing(), + { color: '#FF0000' } + )); + } + data.guild.prefix = prefix; await data.guild.save(); - message.channel.send(message.language.setprefix.success()); + + const container = new ContainerBuilder() + .setAccentColor(parseInt('00FF00', 16)); + + const title = new TextDisplayBuilder() + .setContent(`## Prefix Updated`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.setprefix.success() + `\n\n**New Prefix:** \`${prefix}\``); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } }; - module.exports = SetPrefix; diff --git a/commands/configuration/testdmjoin.js b/commands/configuration/testdmjoin.js index f195d25..6da16c2 100644 --- a/commands/configuration/testdmjoin.js +++ b/commands/configuration/testdmjoin.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class TestDMJoin extends Command { constructor (client) { @@ -13,21 +24,73 @@ class TestDMJoin extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.testdmjoin.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.testdmjoin.description()); - let embed = new EmbedBuilder() - .setTitle(message.language.testdmjoin.title()) - .setDescription(message.language.testdmjoin.description()) - .addFields( - { name: message.language.testdmjoin.fields.enabled(), value: (data.guild.joinDM.enabled ? message.language.testdmjoin.enabled(data.guild.prefix) : message.language.testdmjoin.disabled(data.guild.prefix)) }, - { name: message.language.testdmjoin.fields.message(), value: (data.guild.joinDM.message || message.language.testdmjoin.notDefineds.message(data.guild.prefix)) } - ) - .setThumbnail(message.author.avatarURL()) - .setColor(data.color) - .setFooter({ text: data.footer }) - .setTimestamp(); - message.channel.send({ embeds: [embed] }); - - if(data.guild.joinDM.enabled && data.guild.joinDM.message){ + const avatarUrl = message.author.avatarURL(); + if (avatarUrl) { + try { + const descSection = new SectionBuilder() + .addTextDisplayComponents(descText) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('Your Avatar') + ); + container.addSectionComponents(descSection); + } catch (e) { + container.addTextDisplayComponents(descText); + } + } else { + container.addTextDisplayComponents(descText); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const enabledSection = new TextDisplayBuilder() + .setContent(`${message.language.testdmjoin.fields.enabled()}\n${(data.guild.joinDM.enabled ? message.language.testdmjoin.enabled(data.guild.prefix) : message.language.testdmjoin.disabled(data.guild.prefix))}`); + container.addTextDisplayComponents(enabledSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const messageSection = new TextDisplayBuilder() + .setContent(`${message.language.testdmjoin.fields.message()}\n${(data.guild.joinDM.message || message.language.testdmjoin.notDefineds.message(data.guild.prefix))}`); + container.addTextDisplayComponents(messageSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + + if (data.guild.joinDM.enabled && data.guild.joinDM.message) { message.author.send(this.client.functions.formatMessage( data.guild.joinDM.message, message.member, @@ -48,7 +111,6 @@ class TestDMJoin extends Command { return message.channel.send(message.language.errors.sendPerm()); }); } - } } diff --git a/commands/configuration/testjoin.js b/commands/configuration/testjoin.js index 3c96680..3fbf1b2 100644 --- a/commands/configuration/testjoin.js +++ b/commands/configuration/testjoin.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class TestJoin extends Command { constructor (client) { @@ -13,22 +24,79 @@ class TestJoin extends Command { } async run (message, args, data) { - - let embed = new EmbedBuilder() - .setTitle(message.language.testjoin.title()) - .setDescription(message.language.testjoin.description()) - .addFields( - { name: message.language.testjoin.fields.enabled(), value: (data.guild.join.enabled ? message.language.testjoin.enabled(data.guild.prefix) : message.language.testjoin.disabled(data.guild.prefix)) }, - { name: message.language.testjoin.fields.message(), value: (data.guild.join.message || message.language.testjoin.notDefineds.message(data.guild.prefix)) }, - { name: message.language.testjoin.fields.channel(), value: (data.guild.join.channel ? `<#${data.guild.join.channel}>` : message.language.testjoin.notDefineds.channel(data.guild.prefix)) } - ) - .setThumbnail(message.author.avatarURL()) - .setColor(data.color) - .setFooter({ text: data.footer }) - .setTimestamp(); - message.channel.send({ embeds: [embed] }); + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.testjoin.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.testjoin.description()); + + const avatarUrl = message.author.avatarURL(); + if (avatarUrl) { + try { + const descSection = new SectionBuilder() + .addTextDisplayComponents(descText) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('Your Avatar') + ); + container.addSectionComponents(descSection); + } catch (e) { + container.addTextDisplayComponents(descText); + } + } else { + container.addTextDisplayComponents(descText); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const enabledSection = new TextDisplayBuilder() + .setContent(`${message.language.testjoin.fields.enabled()}\n${(data.guild.join.enabled ? message.language.testjoin.enabled(data.guild.prefix) : message.language.testjoin.disabled(data.guild.prefix))}`); + container.addTextDisplayComponents(enabledSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const messageSection = new TextDisplayBuilder() + .setContent(`${message.language.testjoin.fields.message()}\n${(data.guild.join.message || message.language.testjoin.notDefineds.message(data.guild.prefix))}`); + container.addTextDisplayComponents(messageSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const channelSection = new TextDisplayBuilder() + .setContent(`${message.language.testjoin.fields.channel()}\n${(data.guild.join.channel ? `<#${data.guild.join.channel}>` : message.language.testjoin.notDefineds.channel(data.guild.prefix))}`); + container.addTextDisplayComponents(channelSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); - if(data.guild.join.enabled && data.guild.join.message && data.guild.join.channel && message.guild.channels.cache.get(data.guild.join.channel)){ + if (data.guild.join.enabled && data.guild.join.message && data.guild.join.channel && message.guild.channels.cache.get(data.guild.join.channel)) { message.guild.channels.cache.get(data.guild.join.channel).send(this.client.functions.formatMessage( data.guild.join.message, message.member, diff --git a/commands/configuration/testleave.js b/commands/configuration/testleave.js index f45f699..db95558 100644 --- a/commands/configuration/testleave.js +++ b/commands/configuration/testleave.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class TestLeave extends Command { constructor (client) { @@ -13,22 +24,79 @@ class TestLeave extends Command { } async run (message, args, data) { - - let embed = new EmbedBuilder() - .setTitle(message.language.testleave.title()) - .setDescription(message.language.testleave.description()) - .addFields( - { name: message.language.testleave.fields.enabled(), value: (data.guild.leave.enabled ? message.language.testleave.enabled(data.guild.prefix) : message.language.testleave.disabled(data.guild.prefix)) }, - { name: message.language.testleave.fields.message(), value: (data.guild.leave.message || message.language.testleave.notDefineds.message(data.guild.prefix)) }, - { name: message.language.testleave.fields.channel(), value: (data.guild.leave.channel ? `<#${data.guild.leave.channel}>` : message.language.testleave.notDefineds.channel(data.guild.prefix)) } - ) - .setThumbnail(message.author.avatarURL()) - .setColor(data.color) - .setFooter({ text: data.footer }) - .setTimestamp(); - message.channel.send({ embeds: [embed] }); + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.testleave.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.testleave.description()); + + const avatarUrl = message.author.avatarURL(); + if (avatarUrl) { + try { + const descSection = new SectionBuilder() + .addTextDisplayComponents(descText) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('Your Avatar') + ); + container.addSectionComponents(descSection); + } catch (e) { + container.addTextDisplayComponents(descText); + } + } else { + container.addTextDisplayComponents(descText); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const enabledSection = new TextDisplayBuilder() + .setContent(`${message.language.testleave.fields.enabled()}\n${(data.guild.leave.enabled ? message.language.testleave.enabled(data.guild.prefix) : message.language.testleave.disabled(data.guild.prefix))}`); + container.addTextDisplayComponents(enabledSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const messageSection = new TextDisplayBuilder() + .setContent(`${message.language.testleave.fields.message()}\n${(data.guild.leave.message || message.language.testleave.notDefineds.message(data.guild.prefix))}`); + container.addTextDisplayComponents(messageSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const channelSection = new TextDisplayBuilder() + .setContent(`${message.language.testleave.fields.channel()}\n${(data.guild.leave.channel ? `<#${data.guild.leave.channel}>` : message.language.testleave.notDefineds.channel(data.guild.prefix))}`); + container.addTextDisplayComponents(channelSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); - if(data.guild.leave.enabled && data.guild.leave.message && data.guild.leave.channel && message.guild.channels.cache.get(data.guild.leave.channel)){ + if (data.guild.leave.enabled && data.guild.leave.message && data.guild.leave.channel && message.guild.channels.cache.get(data.guild.leave.channel)) { message.guild.channels.cache.get(data.guild.leave.channel).send(this.client.functions.formatMessage( data.guild.leave.message, message.member, diff --git a/commands/giveaways/gend.js b/commands/giveaways/gend.js index c584fc6..0d115d6 100644 --- a/commands/giveaways/gend.js +++ b/commands/giveaways/gend.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), - { EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class gend extends Command { constructor(client) { @@ -13,13 +23,18 @@ class gend extends Command { } async run(message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + if (!message.member.permissions.has(PermissionFlagsBits.ManageGuild)) { - return message.channel.send(message.language.errors.perms()); + return message.channel.send(componentsV2.errorEmbed('Error', message.language.errors.perms())); } + const messageID = args[0]; if (!messageID) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | Please provide a valid message ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'Please provide a valid message ID.')); } + try { let toend = message.client.giveawaysManager.giveaways.find(g => g.messageId === messageID); if (toend) { @@ -27,15 +42,43 @@ class gend extends Command { setEndTimestamp: Date.now() }); const numberOfSecondsMax = message.client.giveawaysManager.options.updateCountdownEvery / 1000; - return message.channel.send("⌚ Giveaway will be ended in " + numberOfSecondsMax + "s..."); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Giveaway Ending`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`Giveaway will be ended in **${numberOfSecondsMax}s**...`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } else { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | No giveaway found with this ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'No giveaway found with this ID.')); } } catch (err) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | No giveaway found with this ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'No giveaway found with this ID.')); } } - }; module.exports = gend; diff --git a/commands/giveaways/glist.js b/commands/giveaways/glist.js index 9caa046..407eace 100644 --- a/commands/giveaways/glist.js +++ b/commands/giveaways/glist.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), - { EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class glist extends Command { constructor(client) { @@ -13,22 +23,59 @@ class glist extends Command { } async run(message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + if (!message.member.permissions.has(PermissionFlagsBits.ManageGuild)) { - return message.channel.send(message.language.errors.perms()); + return message.channel.send(componentsV2.errorEmbed('Error', message.language.errors.perms())); } const currentGiveaways = message.client.giveawaysManager.giveaways.filter((g) => g.guildId === message.guild.id && !g.ended); if (currentGiveaways.length == 0) { - return message.channel.send(message.language.glist.err()); + return message.channel.send(componentsV2.errorEmbed('No Giveaways', message.language.glist.err())); } - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.glist.title() }) - .setDescription(message.language.glist.description(data.guild.prefix)) - .addFields({ name: message.language.glist.fields.name(data.guild.prefix), value: message.language.glist.fields.message(currentGiveaways) || message.language.glist.err() }) - .setColor(data.color); - return message.channel.send({ embeds: [embed] }); - } + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.glist.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.glist.description(data.guild.prefix)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const giveawaysContent = message.language.glist.fields.message(currentGiveaways) || message.language.glist.err(); + const listSection = new TextDisplayBuilder() + .setContent(`${message.language.glist.fields.name(data.guild.prefix)}\n${giveawaysContent}`); + container.addTextDisplayComponents(listSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('glist_refresh', ownerId)) + .setLabel('Refresh') + .setStyle(ButtonStyle.Primary), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = glist; diff --git a/commands/giveaways/glogs.js b/commands/giveaways/glogs.js index 5078815..eb4af16 100644 --- a/commands/giveaways/glogs.js +++ b/commands/giveaways/glogs.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), - { EmbedBuilder, PermissionFlagsBits, ChannelType } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + ChannelType, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class GiveawayLogs extends Command { constructor(client) { @@ -13,25 +24,59 @@ class GiveawayLogs extends Command { } async run(message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + if (!message.member.permissions.has(PermissionFlagsBits.ManageGuild)) { - return message.channel.send(message.language.errors.perms()); + return message.channel.send(componentsV2.errorEmbed('Error', message.language.errors.perms())); } + let channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]); - if (!channel) return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription(message.language.configjoin.errors.channelNotFound(args[0])).setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + if (!channel) { + return message.channel.send(componentsV2.errorEmbed('Giveaway System', message.language.configjoin.errors.channelNotFound(args[0]))); + } if (channel.type === ChannelType.GuildCategory) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription(message.language.configjoin.errors.channelNotFound(args[0])).setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', message.language.configjoin.errors.channelNotFound(args[0]))); } if (channel.type === ChannelType.GuildVoice) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription(message.language.configjoin.errors.channelNotFound(args[0])).setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', message.language.configjoin.errors.channelNotFound(args[0]))); } data.guild.glogs = channel.id; await data.guild.save(); - message.channel.send(message.language.glogs.success()); - } + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Giveaway Logs Updated`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`${message.language.glogs.success()}\n\n**Channel:** ${channel}`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = GiveawayLogs; diff --git a/commands/giveaways/greroll.js b/commands/giveaways/greroll.js index 6d0af83..27f0221 100644 --- a/commands/giveaways/greroll.js +++ b/commands/giveaways/greroll.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), - { EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class GiveawayReroll extends Command { constructor(client) { @@ -13,29 +23,62 @@ class GiveawayReroll extends Command { } async run(message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + if (!message.member.permissions.has(PermissionFlagsBits.ManageGuild)) { - return message.channel.send(message.language.errors.perms()); + return message.channel.send(componentsV2.errorEmbed('Error', message.language.errors.perms())); } + const messageID = args[0]; if (!messageID) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | Please provide a valid message ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'Please provide a valid message ID.')); } + try { let toend = message.client.giveawaysManager.giveaways.find(g => g.messageId === messageID); if (toend) { message.client.giveawaysManager.reroll(messageID, { - congrat: '🏆 Congratulations, {winners} ! You won **{prize}**!\n{messageURL}', + congrat: 'Congratulations, {winners} ! You won **{prize}**!\n{messageURL}', error: `Giveaway cancelled, no valid participations.` }); - message.react('👌🏼'); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Giveaway Rerolled`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`Successfully rerolled the giveaway!`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } else { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | No giveaway found with this ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'No giveaway found with this ID.')); } } catch (e) { - return message.channel.send({ embeds: [new EmbedBuilder().setColor("#E07C2D").setDescription("<:error:851490719934840872> | No giveaway found with this ID.").setAuthor({ name: "🎁 Giveaway System", iconURL: this.client.user.displayAvatarURL() })] }); + return message.channel.send(componentsV2.errorEmbed('Giveaway System', 'No giveaway found with this ID.')); } } - }; module.exports = GiveawayReroll; diff --git a/commands/info/add.js b/commands/info/add.js index 175aabf..c417bd0 100644 --- a/commands/info/add.js +++ b/commands/info/add.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Add extends Command { constructor (client) { @@ -13,16 +22,47 @@ class Add extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(this.client.config.color); - let embed = new EmbedBuilder() - .setAuthor({ name: "InviteCount", iconURL: this.client.user.displayAvatarURL() }) - .setDescription(message.language.add.content(this.client.user.id)) - .setColor(this.client.config.color) - .setFooter({ text: message.language.add.requested(message.author.username), iconURL: message.author.displayAvatarURL() }); - message.channel.send({ embeds: [embed] }); + const container = new ContainerBuilder() + .setAccentColor(color); - } + const title = new TextDisplayBuilder() + .setContent(`## InviteCount`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.add.content(this.client.user.id)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Add to Server') + .setStyle(ButtonStyle.Link) + .setURL(`https://discordapp.com/api/oauth2/authorize?client_id=${this.client.user.id}&permissions=8&scope=bot`), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# Requested by ${message.author.username}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Add; diff --git a/commands/info/credits.js b/commands/info/credits.js index f7fb14d..37e6f5f 100644 --- a/commands/info/credits.js +++ b/commands/info/credits.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Credits extends Command { constructor (client) { @@ -13,22 +22,71 @@ class Credits extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); - let embed = new EmbedBuilder() - .setColor(data.color) - .setFooter({ text: data.footer }) - .setTitle(message.language.credits.title()) - .setDescription(message.language.credits.content(message.guild.name, data.guild.prefix)) - .setAuthor({ name: "InviteCount | v2.0.0", iconURL: this.client.user.displayAvatarURL() }) - .addFields( - { name: message.language.credits.dev.title(), value: message.language.credits.dev.content(), inline: true }, - { name: message.language.credits.statistics.title(), value: message.language.credits.statistics.content(), inline: false }, - { name: message.language.credits.link.title(), value: message.language.credits.link.content(), inline: false } + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.credits.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const authorText = new TextDisplayBuilder() + .setContent(`**InviteCount | v2.0.0**`); + container.addTextDisplayComponents(authorText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.credits.content(message.guild.name, data.guild.prefix)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const devSection = new TextDisplayBuilder() + .setContent(`${message.language.credits.dev.title()}\n${message.language.credits.dev.content()}`); + container.addTextDisplayComponents(devSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const inspiredSection = new TextDisplayBuilder() + .setContent(`${message.language.credits.statistics.title()}\n${message.language.credits.statistics.content()}`); + container.addTextDisplayComponents(inspiredSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const thanksSection = new TextDisplayBuilder() + .setContent(`${message.language.credits.link.title()}\n${message.language.credits.link.content()}`); + container.addTextDisplayComponents(thanksSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Support Server') + .setStyle(ButtonStyle.Link) + .setURL(require("../../config").discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) ); - message.channel.send({ embeds: [embed] }); - } + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Credits; diff --git a/commands/info/help.js b/commands/info/help.js index d9a95df..dfe78f3 100644 --- a/commands/info/help.js +++ b/commands/info/help.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + StringSelectMenuBuilder, + StringSelectMenuOptionBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Help extends Command { constructor (client) { @@ -13,21 +24,126 @@ class Help extends Command { } async run (message, args, data) { - - let embed = new EmbedBuilder() - .setTitle(message.language.help.title()) - .setDescription(message.language.help.description(message.guild.name, data.guild.prefix)) - .addFields( - { name: message.language.help.admin.title(), value: message.language.help.admin.content(data.guild.prefix) }, - { name: message.language.help.moderation.title(), value: message.language.help.moderation.content(data.guild.prefix) }, - { name: message.language.help.joinDM.title(), value: message.language.help.joinDM.content(data.guild.prefix) }, - { name: message.language.help.join.title(), value: message.language.help.join.content(data.guild.prefix) }, - { name: message.language.help.giveaway.title(), value: message.language.help.giveaway.content(data.guild.prefix) } - ) - .setColor(data.color) - .setFooter({ text: data.footer }); - - message.channel.send({ embeds: [embed] }); + const color = componentsV2.parseColor(data.color); + const prefix = data.guild.prefix; + const lang = message.language.help; + const ownerId = message.author.id; + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${lang.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const description = new TextDisplayBuilder() + .setContent(lang.description(message.guild.name, prefix)); + container.addTextDisplayComponents(description); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const adminSection = new TextDisplayBuilder() + .setContent(`${lang.admin.title()}\n${lang.admin.content(prefix)}`); + container.addTextDisplayComponents(adminSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const moderationSection = new TextDisplayBuilder() + .setContent(`${lang.moderation.title()}\n${lang.moderation.content(prefix)}`); + container.addTextDisplayComponents(moderationSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const generalSection = new TextDisplayBuilder() + .setContent(`${lang.joinDM.title()}\n${lang.joinDM.content(prefix)}`); + container.addTextDisplayComponents(generalSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const configSection = new TextDisplayBuilder() + .setContent(`${lang.join.title()}\n${lang.join.content(prefix)}`); + container.addTextDisplayComponents(configSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const giveawaySection = new TextDisplayBuilder() + .setContent(`${lang.giveaway.title()}\n${lang.giveaway.content(prefix)}`); + container.addTextDisplayComponents(giveawaySection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const dropdown = new StringSelectMenuBuilder() + .setCustomId(componentsV2.encodeCustomId('help_category', ownerId)) + .setPlaceholder('Select a category for more info') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('Administration') + .setDescription('Admin commands') + .setValue('admin') + .setEmoji('⚙️'), + new StringSelectMenuOptionBuilder() + .setLabel('Moderation') + .setDescription('Moderation commands') + .setValue('moderation') + .setEmoji('🛡️'), + new StringSelectMenuOptionBuilder() + .setLabel('General') + .setDescription('General commands') + .setValue('general') + .setEmoji('💻'), + new StringSelectMenuOptionBuilder() + .setLabel('Configuration') + .setDescription('Configuration commands') + .setValue('configuration') + .setEmoji('🔧'), + new StringSelectMenuOptionBuilder() + .setLabel('Giveaways') + .setDescription('Giveaway commands') + .setValue('giveaways') + .setEmoji('🎁') + ); + + const dropdownRow = new ActionRowBuilder() + .addComponents(dropdown); + + container.addActionRowComponents(dropdownRow); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const linksSection = new TextDisplayBuilder() + .setContent(`${lang.tip(prefix)}\n${lang.links(this.client.user.id)}`); + container.addTextDisplayComponents(linksSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Support Server') + .setStyle(ButtonStyle.Link) + .setURL(require("../../config").discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setLabel('Invite Bot') + .setStyle(ButtonStyle.Link) + .setURL(`https://discordapp.com/api/oauth2/authorize?client_id=${this.client.user.id}&permissions=8&scope=bot`), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# Requested by ${message.author.username} | Prefix: ${prefix}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } } diff --git a/commands/info/infos.js b/commands/info/infos.js index 6d0afe3..dcb6b94 100644 --- a/commands/info/infos.js +++ b/commands/info/infos.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Infos extends Command { constructor (client) { @@ -13,6 +22,8 @@ class Infos extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let totalSeconds = (this.client.uptime / 1000); let days = Math.floor(totalSeconds / 86400); @@ -22,46 +33,86 @@ class Infos extends Command { let minutes = Math.floor(totalSeconds / 60); let seconds = Math.floor(totalSeconds % 60); let uptime = `${days} days, ${hours} hours, ${minutes} minutes and ${seconds} seconds`; + let guildsCounts = await this.client.shard.fetchClientValues("guilds.cache.size"); let guildsCount = guildsCounts.reduce((p, count) => p + count); - let channelsCounts = await this.client.shard.fetchClientValues("channels.cache.size"); - let channelsCount = message.client.channels.cache.size - let usersCounts = await this.client.shard.fetchClientValues("users.cache.size"); - let usersCount = message.client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0) - let title = message.language.infos.statistics.title(this.client.shard.ids[0], false); + let channelsCount = message.client.channels.cache.size; - let results = await this.client.shard.broadcastEval((c) => { - return [ - Math.round((process.memoryUsage().heapUsed / 1024 / 1024)), - c.guilds.cache.size, - c.channels.cache.size, - c.shard.ids[0], - Math.round(c.ws.ping) - ]; - }); let resultsa = await this.client.shard.broadcastEval((c) => { return [...c.guilds.cache.values()].map(g => ({ memberCount: g.memberCount })); }); let guilds = []; resultsa.forEach((a) => guilds = [...guilds, ...a]); let usersCountW = 0; - guilds.forEach(g => usersCountW = usersCountW + g.memberCount) - - let embed = new EmbedBuilder() - .setColor(data.color) - .setFooter({ text: data.footer }) - .setTitle(message.language.infos.title()) - .setDescription(message.language.infos.content(message.guild.name, data.guild.prefix)) - .setAuthor({ name: "InviteCount | v2.0.0", iconURL: this.client.user.displayAvatarURL() }) - .addFields( - { name: message.language.infos.dev.title(), value: message.language.infos.dev.content(uptime), inline: true }, - { name: title, value: message.language.infos.statistics.content(guildsCount, channelsCount, usersCountW), inline: false }, - { name: message.language.infos.link.title(), value: message.language.infos.link.content(), inline: false } + guilds.forEach(g => usersCountW = usersCountW + g.memberCount); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.infos.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const authorText = new TextDisplayBuilder() + .setContent(`**InviteCount | v2.0.0**`); + container.addTextDisplayComponents(authorText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.infos.content(message.guild.name, data.guild.prefix)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const devSection = new TextDisplayBuilder() + .setContent(`${message.language.infos.dev.title()}\n${message.language.infos.dev.content(uptime)}`); + container.addTextDisplayComponents(devSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const statsTitle = message.language.infos.statistics.title(this.client.shard.ids[0], false); + const statsSection = new TextDisplayBuilder() + .setContent(`${statsTitle}\n${message.language.infos.statistics.content(guildsCount, channelsCount, usersCountW)}`); + container.addTextDisplayComponents(statsSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const linksSection = new TextDisplayBuilder() + .setContent(`${message.language.infos.link.title()}\n${message.language.infos.link.content()}`); + container.addTextDisplayComponents(linksSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Support Server') + .setStyle(ButtonStyle.Link) + .setURL(require("../../config").discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setLabel('Invite Bot') + .setStyle(ButtonStyle.Link) + .setURL(`https://discordapp.com/api/oauth2/authorize?client_id=${this.client.user.id}&permissions=8&scope=bot`), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) ); - message.channel.send({ embeds: [embed] }); - } + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Infos; diff --git a/commands/info/invite.js b/commands/info/invite.js index 17fe2fc..e81745a 100644 --- a/commands/info/invite.js +++ b/commands/info/invite.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Invite extends Command { constructor (client) { @@ -13,6 +24,8 @@ class Invite extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let member = await this.client.resolveMember(args.join(" "), message.guild) || message.member; let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id, bot: member.user.bot }); @@ -23,20 +36,62 @@ class Invite extends Command { let superior = (rank.inviteCount >= (memberData.invites + memberData.bonus - memberData.leaves - memberData.fake)); let found = member.guild.roles.cache.get(rank.roleID); let superiorFound = (nextRank ? rank.inviteCount < nextRank.inviteCount : true); - if(superior && found && superiorFound) nextRank = rank; + if (superior && found && superiorFound) nextRank = rank; }); let description = message.language.invite.description(member, memberData, (member.id === message.member.id), nextRank, (nextRank ? message.guild.roles.cache.get(nextRank.roleID) : null)); + + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${componentsV2.sanitizeMention(member.user.tag)}`); - let embed = new EmbedBuilder() - .setAuthor({ name: member.user.tag, iconURL: member.user.displayAvatarURL() }) - .setDescription(description) - .setColor(data.color) - .setFooter({ text: data.footer }); + const avatarUrl = member.user.displayAvatarURL({ dynamic: true, size: 256 }); + if (avatarUrl) { + try { + const titleSection = new SectionBuilder() + .addTextDisplayComponents(title) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('User Avatar') + ); + container.addSectionComponents(titleSection); + } catch (e) { + container.addTextDisplayComponents(title); + } + } else { + container.addTextDisplayComponents(title); + } - message.channel.send({ embeds: [embed] }); - } + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(description); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Invite; diff --git a/commands/info/inviter.js b/commands/info/inviter.js index 147756e..da29b76 100644 --- a/commands/info/inviter.js +++ b/commands/info/inviter.js @@ -1,5 +1,16 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Inviter extends Command { constructor (client) { @@ -13,6 +24,8 @@ class Inviter extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let member = await this.client.resolveMember(args.join(" "), message.guild) || message.member; let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id, bot: member.user.bot }); @@ -29,15 +42,57 @@ class Inviter extends Command { } } - let embed = new EmbedBuilder() - .setAuthor({ name: member.user.tag, iconURL: member.user.displayAvatarURL() }) - .setDescription(message.language.inviter.description(member, inviterName)) - .setColor(data.color) - .setFooter({ text: data.footer }); + const container = new ContainerBuilder() + .setAccentColor(color); - message.channel.send({ embeds: [embed] }); - } + const title = new TextDisplayBuilder() + .setContent(`## ${componentsV2.sanitizeMention(member.user.tag)}`); + + const avatarUrl = member.user.displayAvatarURL({ dynamic: true, size: 256 }); + if (avatarUrl) { + try { + const titleSection = new SectionBuilder() + .addTextDisplayComponents(title) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('User Avatar') + ); + container.addSectionComponents(titleSection); + } catch (e) { + container.addTextDisplayComponents(title); + } + } else { + container.addTextDisplayComponents(title); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.inviter.description(member, inviterName)); + container.addTextDisplayComponents(descText); + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Inviter; diff --git a/commands/info/leaderboard.js b/commands/info/leaderboard.js index 64d1b57..72ebfe0 100644 --- a/commands/info/leaderboard.js +++ b/commands/info/leaderboard.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Leaderboard extends Command { constructor (client) { @@ -13,6 +22,8 @@ class Leaderboard extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let membersData = await this.client.guildMembersData.find({ guildID: message.guild.id, @@ -23,12 +34,36 @@ class Leaderboard extends Command { } }).lean(); - if(membersData.length <= 0){ - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.leaderboard.empty.title() }) - .setDescription(message.language.leaderboard.empty.content()) - .setColor(data.color); - return message.channel.send({ embeds: [embed] }); + if (membersData.length <= 0) { + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.leaderboard.empty.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.leaderboard.empty.content()); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); } let members = []; @@ -51,7 +86,7 @@ class Leaderboard extends Command { for (const member of topMembers) { let user = this.client.users.cache.get(member.id) || (message.guild.members.cache.get(member.id) || {}).user; - if(!user) { + if (!user) { try { user = await this.client.users.fetch(member.id); } catch (e) { @@ -66,15 +101,44 @@ class Leaderboard extends Command { description += `${message.language.leaderboard.user(user, member, lb)}\n`; } - let embed = new EmbedBuilder() - .setTitle(message.language.leaderboard.title()) - .setDescription(description || "No members found") - .setColor(data.color) - .setFooter({ text: data.footer }); + const container = new ContainerBuilder() + .setAccentColor(color); - message.channel.send({ embeds: [embed] }); - } + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.leaderboard.title()}`); + container.addTextDisplayComponents(title); + container.addSeparatorComponents(new SeparatorBuilder()); + + const leaderboardText = new TextDisplayBuilder() + .setContent(description || "No members found"); + container.addTextDisplayComponents(leaderboardText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('lb_refresh', ownerId)) + .setLabel('Refresh') + .setStyle(ButtonStyle.Primary), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Leaderboard; diff --git a/commands/info/membercount.js b/commands/info/membercount.js index 51b36d9..f5b67c3 100644 --- a/commands/info/membercount.js +++ b/commands/info/membercount.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class MemberCount extends Command { constructor (client) { @@ -13,16 +22,45 @@ class MemberCount extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let guild = message.guild; - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.membercount.title(message.guild.name) }) - .setDescription(message.language.membercount.description(guild)) - .setColor(data.color) - .setFooter({ text: data.footer }); - message.channel.send({ embeds: [embed] }); - } + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.membercount.title(message.guild.name)}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.membercount.description(guild)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = MemberCount; diff --git a/commands/info/messages.js b/commands/info/messages.js index cad5449..16cc201 100644 --- a/commands/info/messages.js +++ b/commands/info/messages.js @@ -1,8 +1,19 @@ const Command = require("../../structures/Command.js"), moment = require('moment'), - { EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); -class Invite extends Command { +class Messages extends Command { constructor(client) { super(client, { name: "messages", @@ -14,19 +25,63 @@ class Invite extends Command { } async run(message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let member = await this.client.resolveMember(args.join(" "), message.guild) || message.member; let memberData = await this.client.findOrCreateGuildMember({ id: member.id, guildID: message.guild.id, bot: member.user.bot }); - let embed = new EmbedBuilder() - .setAuthor({ name: member.user.tag, iconURL: member.user.displayAvatarURL() }) - .setDescription(`<:horloge3:851486762928701551> Statistics since ${moment(message.guild.members.me.joinedTimestamp).locale(data.guild.language.substr(0, 2)).fromNow()}\n<:channel:851482936787730472> You have sent \`${memberData.messagesCount}\` on this server`) - .setColor(data.color) - .setFooter({ text: data.footer, iconURL: message.client.user.displayAvatarURL({ extension: 'png', size: 512 }) }); + const container = new ContainerBuilder() + .setAccentColor(color); - message.channel.send({ embeds: [embed] }); - } + const title = new TextDisplayBuilder() + .setContent(`## ${componentsV2.sanitizeMention(member.user.tag)}`); + + const avatarUrl = member.user.displayAvatarURL({ dynamic: true, size: 256 }); + if (avatarUrl) { + try { + const titleSection = new SectionBuilder() + .addTextDisplayComponents(title) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('User Avatar') + ); + container.addSectionComponents(titleSection); + } catch (e) { + container.addTextDisplayComponents(title); + } + } else { + container.addTextDisplayComponents(title); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const statsText = new TextDisplayBuilder() + .setContent(`**Statistics since ${moment(message.guild.members.me.joinedTimestamp).locale(data.guild.language.substr(0, 2)).fromNow()}**\nYou have sent **${memberData.messagesCount}** messages on this server`); + container.addTextDisplayComponents(statsText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; -module.exports = Invite; +module.exports = Messages; diff --git a/commands/info/support.js b/commands/info/support.js index b8be70a..2129883 100644 --- a/commands/info/support.js +++ b/commands/info/support.js @@ -1,5 +1,14 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Support extends Command { constructor (client) { @@ -13,16 +22,47 @@ class Support extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(this.client.config.color); - let embed = new EmbedBuilder() - .setAuthor({ name: "InviteCount", iconURL: this.client.user.displayAvatarURL() }) - .setDescription(message.language.support.content(this.client.user.id)) - .setColor(this.client.config.color) - .setFooter({ text: message.language.support.requested(message.author.username), iconURL: message.author.displayAvatarURL() }); - message.channel.send({ embeds: [embed] }); + const container = new ContainerBuilder() + .setAccentColor(color); - } + const title = new TextDisplayBuilder() + .setContent(`## InviteCount`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.support.content(this.client.user.id)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Join Support Server') + .setStyle(ButtonStyle.Link) + .setURL(require("../../config").discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# Requested by ${message.author.username}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Support; diff --git a/commands/info/userinfo.js b/commands/info/userinfo.js index 88181ec..14d8271 100644 --- a/commands/info/userinfo.js +++ b/commands/info/userinfo.js @@ -1,6 +1,17 @@ const Command = require("../../structures/Command.js"), moment = require("moment"), -{ EmbedBuilder } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + SectionBuilder, + ThumbnailBuilder, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Userinfo extends Command { constructor (client) { @@ -14,6 +25,8 @@ class Userinfo extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); let user = message.mentions.users.first() || await this.client.resolveUser(args[0]) || message.author; let member = await message.guild.members.fetch(user.id).catch(() => {}); @@ -26,42 +39,106 @@ class Userinfo extends Command { let creationDate = moment(user.createdAt, "YYYYMMDD").fromNow(); let joinDate = member ? moment(member.joinedAt, "YYYYMMDD").fromNow() : null; - let embed = new EmbedBuilder() - .setAuthor({ name: message.language.userinfo.title(user), iconURL: user.displayAvatarURL() }) - .addFields( - { name: fields.bot.title(), value: fields.bot.content(user), inline: true }, - { name: fields.createdAt.title(), value: creationDate.charAt(0).toUpperCase() + creationDate.substr(1, creationDate.length), inline: true } - ) - .setColor(data.color) - .setFooter({ text: data.footer }); + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${message.language.userinfo.title(user)}`); - if(member){ - let joinData = memberData.joinData || (memberData.invitedBy ? { type: "normal", invite: { inviter: memberData.invitedBy } } : { type: "unknown" } ); + const avatarUrl = user.displayAvatarURL({ dynamic: true, size: 256 }); + if (avatarUrl) { + try { + const titleSection = new SectionBuilder() + .addTextDisplayComponents(title) + .setThumbnailAccessory( + new ThumbnailBuilder() + .setURL(avatarUrl) + .setDescription('User Avatar') + ); + container.addSectionComponents(titleSection); + } catch (e) { + container.addTextDisplayComponents(title); + } + } else { + container.addTextDisplayComponents(title); + } + + container.addSeparatorComponents(new SeparatorBuilder()); + + const botInfo = new TextDisplayBuilder() + .setContent(`${fields.bot.title()}\n${fields.bot.content(user)}`); + container.addTextDisplayComponents(botInfo); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const createdInfo = new TextDisplayBuilder() + .setContent(`${fields.createdAt.title()}\n${creationDate.charAt(0).toUpperCase() + creationDate.substr(1, creationDate.length)}`); + container.addTextDisplayComponents(createdInfo); + + if (member) { + container.addSeparatorComponents(new SeparatorBuilder()); + + let joinData = memberData.joinData || (memberData.invitedBy ? { type: "normal", invite: { inviter: memberData.invitedBy } } : { type: "unknown" }); let joinWay = fields.joinWay.unknown(user); - if(joinData.type === "normal"){ - let inviter = await this.client.users.fetch(joinData.invite.inviter); - joinWay = fields.joinWay.invite(inviter); - } else if(joinData.type === "vanity"){ + if (joinData.type === "normal") { + let inviter = await this.client.users.fetch(joinData.invite.inviter).catch(() => null); + if (inviter) joinWay = fields.joinWay.invite(inviter); + } else if (joinData.type === "vanity") { joinWay = fields.joinWay.vanity(); - } else if(joinData.type === "oauth" || user.bot){ + } else if (joinData.type === "oauth" || user.bot) { joinWay = fields.joinWay.oauth(); } + + const joinedInfo = new TextDisplayBuilder() + .setContent(`${fields.joinedAt.title()}\n${joinDate.charAt(0).toUpperCase() + joinDate.substr(1, joinDate.length)}`); + container.addTextDisplayComponents(joinedInfo); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const invitesInfo = new TextDisplayBuilder() + .setContent(`${fields.invites.title()}\n${fields.invites.content(memberData)}`); + container.addTextDisplayComponents(invitesInfo); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const joinWayInfo = new TextDisplayBuilder() + .setContent(`${fields.joinWay.title()}\n${joinWay}`); + container.addTextDisplayComponents(joinWayInfo); + + container.addSeparatorComponents(new SeparatorBuilder()); + await message.guild.members.fetch(); - const members = [...message.guild.members.cache.values()].sort((a,b) => a.joinedTimestamp - b.joinedTimestamp); + const members = [...message.guild.members.cache.values()].sort((a, b) => a.joinedTimestamp - b.joinedTimestamp); let joinPos = members.map((u) => u.id).indexOf(member.id); let previous = members[joinPos - 1] ? members[joinPos - 1].user : null; let next = members[joinPos + 1] ? members[joinPos + 1].user : null; - embed.addFields( - { name: fields.joinedAt.title(), value: joinDate.charAt(0).toUpperCase() + joinDate.substr(1, joinDate.length), inline: true }, - { name: fields.invites.title(), value: fields.invites.content(memberData) }, - { name: fields.joinWay.title(), value: joinWay }, - { name: fields.joinOrder.title(), value: fields.joinOrder.content(previous, next, user) } - ); + + const joinOrderInfo = new TextDisplayBuilder() + .setContent(`${fields.joinOrder.title()}\n${fields.joinOrder.content(previous, next, user)}`); + container.addTextDisplayComponents(joinOrderInfo); } - message.channel.send({ embeds: [embed] }); - } + container.addSeparatorComponents(new SeparatorBuilder()); + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } }; module.exports = Userinfo; diff --git a/commands/mod/ban.js b/commands/mod/ban.js index b9f8b5b..2c0de51 100644 --- a/commands/mod/ban.js +++ b/commands/mod/ban.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Ban extends Command { constructor (client) { @@ -13,34 +23,68 @@ class Ban extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + if (!message.member.permissions.has(PermissionFlagsBits.BanMembers)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.ban.errors.missingPerms)); + } - if (!message.member.permissions.has(PermissionFlagsBits.BanMembers)) return message.channel.send(message.language.ban.errors.missingPerms); const member = message.mentions.members.first(); - if (!member) return message.channel.send(message.language.ban.errors.nouser); + if (!member) return message.channel.send(componentsV2.errorEmbed('Error', message.language.ban.errors.nouser)); + let reason = args.slice(1).join(" "); if (!reason) { - reason = "No Reason Specified" + reason = "No Reason Specified"; } + const memberPosition = member.roles.highest.position; const moderationPosition = message.member.roles.highest.position; - if(message.guild.ownerId !== message.author.id && !(moderationPosition > memberPosition)){ - return message.channel.send(message.language.ban.errors.supperior); + if (message.guild.ownerId !== message.author.id && !(moderationPosition > memberPosition)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.ban.errors.supperior)); } - if(!member.bannable) { - return message.channel.send(message.language.ban.errors.noperm); + if (!member.bannable) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.ban.errors.noperm)); } await member.send(message.language.ban.banneddm(message.guild.name, message.member.user.tag, reason)).catch(() => {}); + member.ban({ reason: reason }).then(() => { - const kickembed = new EmbedBuilder() - .setColor(data.color) - .setAuthor({ name: message.member.user.tag, iconURL: message.member.user.displayAvatarURL() }) - .setDescription(message.language.ban.description) - .setFooter({ text: data.footer }); - message.channel.send({ embeds: [kickembed] }); - }).catch(() => {}); + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Member Banned`); + container.addTextDisplayComponents(title); + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`${message.language.ban.description}\n\n**User:** ${member.user.tag}\n**Reason:** ${reason}\n**Moderator:** ${message.author.tag}`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + }).catch(() => {}); } } diff --git a/commands/mod/kick.js b/commands/mod/kick.js index e2f20db..23ae285 100644 --- a/commands/mod/kick.js +++ b/commands/mod/kick.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class Kick extends Command { constructor (client) { @@ -13,34 +23,68 @@ class Kick extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + if (!message.member.permissions.has(PermissionFlagsBits.KickMembers)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.kick.errors.missingPerms)); + } - if (!message.member.permissions.has(PermissionFlagsBits.KickMembers)) return message.channel.send(message.language.kick.errors.missingPerms); const member = message.mentions.members.first(); - if (!member) return message.channel.send(message.language.kick.errors.nouser); + if (!member) return message.channel.send(componentsV2.errorEmbed('Error', message.language.kick.errors.nouser)); + let reason = args.slice(1).join(" "); if (!reason) { - reason = "No Reason Specified" + reason = "No Reason Specified"; } + const memberPosition = member.roles.highest.position; const moderationPosition = message.member.roles.highest.position; - if(message.guild.ownerId !== message.author.id && !(moderationPosition > memberPosition)){ - return message.channel.send(message.language.kick.errors.supperior); + if (message.guild.ownerId !== message.author.id && !(moderationPosition > memberPosition)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.kick.errors.supperior)); } - if(!member.kickable) { - return message.channel.send(message.language.kick.errors.noperm); + if (!member.kickable) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.kick.errors.noperm)); } await member.send(message.language.kick.banneddm(message.guild.name, message.member.user.tag, reason)).catch(() => {}); + member.kick(reason).then(() => { - const kickembed = new EmbedBuilder() - .setColor(data.color) - .setAuthor({ name: message.member.user.tag, iconURL: message.member.user.displayAvatarURL() }) - .setDescription(message.language.kick.description) - .setFooter({ text: data.footer }); - message.channel.send({ embeds: [kickembed] }); - }).catch((error) => {console.log(error)}); + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Member Kicked`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`${message.language.kick.description}\n\n**User:** ${member.user.tag}\n**Reason:** ${reason}\n**Moderator:** ${message.author.tag}`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + }).catch((error) => { console.log(error); }); } } diff --git a/commands/mod/unban.js b/commands/mod/unban.js index 0b949e4..279837f 100644 --- a/commands/mod/unban.js +++ b/commands/mod/unban.js @@ -1,5 +1,15 @@ const Command = require("../../structures/Command.js"), -{ EmbedBuilder, PermissionFlagsBits } = require("discord.js"); +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + PermissionFlagsBits, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); class UnBan extends Command { constructor (client) { @@ -13,30 +23,60 @@ class UnBan extends Command { } async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); - if (!message.member.permissions.has(PermissionFlagsBits.BanMembers)) return message.channel.send(message.language.kick.errors.missingPerms); + if (!message.member.permissions.has(PermissionFlagsBits.BanMembers)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.kick.errors.missingPerms)); + } let banneduser = args.slice(0).join(" "); if (!banneduser || isNaN(banneduser) || banneduser.length < 17) { - return message.channel.send(message.language.unban.noid); + return message.channel.send(componentsV2.errorEmbed('Error', message.language.unban.noid)); } const banned = await message.guild.bans.fetch(); - if(![...banned.values()].some((e) => e.user.id === banneduser)){ - return message.channel.send(message.language.unban.noban) + if (![...banned.values()].some((e) => e.user.id === banneduser)) { + return message.channel.send(componentsV2.errorEmbed('Error', message.language.unban.noban)); } message.guild.members.unban(banneduser) .then(user => { - const debanembed = new EmbedBuilder() - .setColor(data.color) - .setAuthor({ name: message.member.user.tag, iconURL: message.member.user.displayAvatarURL() }) - .setDescription(message.language.unban.success(user.tag)) - .setFooter({ text: data.footer }); - message.channel.send({ embeds: [debanembed] }); + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## Member Unbanned`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(message.language.unban.success(user.tag)); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); }) .catch(console.error); - } } diff --git a/commands/owner/noprefix.js b/commands/owner/noprefix.js new file mode 100644 index 0000000..cc186ab --- /dev/null +++ b/commands/owner/noprefix.js @@ -0,0 +1,186 @@ +const Command = require("../../structures/Command.js"), +{ + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + MessageFlags +} = require("discord.js"), +componentsV2 = require("../../helpers/componentsV2.js"); + +class NoPrefix extends Command { + constructor (client) { + super(client, { + name: "noprefix", + enabled: true, + aliases: [ "np", "nopre" ], + clientPermissions: [ "EmbedLinks" ], + permLevel: 5 + }); + } + + async run (message, args, data) { + const ownerId = message.author.id; + const color = componentsV2.parseColor(data.color); + + if (!this.client.config.owners.includes(message.author.id)) { + return message.channel.send(componentsV2.errorEmbed('Error', 'This command can only be used by the bot owner.')); + } + + const action = args[0]?.toLowerCase(); + + if (!action || !['enable', 'disable', 'status'].includes(action)) { + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Mode`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const currentStatus = data.guild.noPrefix ? 'Enabled' : 'Disabled'; + const descText = new TextDisplayBuilder() + .setContent(`**Current Status:** ${currentStatus}\n\n**Usage:**\n\`${data.guild.prefix}noprefix enable\` - Enable no prefix mode\n\`${data.guild.prefix}noprefix disable\` - Disable no prefix mode\n\`${data.guild.prefix}noprefix status\` - Check current status\n\n**Note:** When enabled, users can use commands without the prefix.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('noprefix_enable', ownerId)) + .setLabel('Enable') + .setStyle(ButtonStyle.Success) + .setDisabled(data.guild.noPrefix === true), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('noprefix_disable', ownerId)) + .setLabel('Disable') + .setStyle(ButtonStyle.Secondary) + .setDisabled(data.guild.noPrefix === false), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# ${data.footer}`); + container.addTextDisplayComponents(footer); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + + if (action === 'status') { + const currentStatus = data.guild.noPrefix ? 'Enabled' : 'Disabled'; + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Status`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`**Current Status:** ${currentStatus}\n\nNo prefix mode is currently **${currentStatus.toLowerCase()}** for this server.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + + if (action === 'enable') { + data.guild.noPrefix = true; + await data.guild.save(); + + const container = new ContainerBuilder() + .setAccentColor(parseInt('00FF00', 16)); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Enabled`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`No prefix mode has been **enabled** for this server.\n\nUsers can now use commands without the \`${data.guild.prefix}\` prefix.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + + if (action === 'disable') { + data.guild.noPrefix = false; + await data.guild.save(); + + const container = new ContainerBuilder() + .setAccentColor(parseInt('FF6600', 16)); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Disabled`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`No prefix mode has been **disabled** for this server.\n\nUsers must now use the \`${data.guild.prefix}\` prefix to run commands.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + return message.channel.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + } +}; + +module.exports = NoPrefix; diff --git a/creators.json b/creators.json index 0a48921..8aa954a 100644 --- a/creators.json +++ b/creators.json @@ -1,7 +1,7 @@ [ { "title": "Qui sont les créateurs d'InviteCount ?", - "text": "InviteCount créé par **AlexM (531547952880156673)**.\n\n**● Date de création:** Crée le 12 Mai 2019\n**● SiteWeb:** https://invite-count.xyz\n**● Thanks:** Special thanks to Androz for helping us with **ManageInvite** !\nAnd thanks to [NPG](https://github.com/ThisDudeBoy) for the rewrite.", + "text": "InviteCount créé par **Npg (1052620216443601076)**.\n\n**● Date de création:** Crée le 12 Mai 2019\n**● SiteWeb:** https://invite-count.xyz\n**● Thanks:** Special thanks to Androz for helping us with **ManageInvite** !\nAnd thanks to [Pauldb09](https://green-bot.app) for the giveaway system", "url": "https://invite-count.xyz" } ] diff --git a/events/interactionCreate.js b/events/interactionCreate.js new file mode 100644 index 0000000..595f944 --- /dev/null +++ b/events/interactionCreate.js @@ -0,0 +1,375 @@ +const { + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + StringSelectMenuBuilder, + StringSelectMenuOptionBuilder, + MessageFlags +} = require("discord.js"); +const config = require("../config"); +const componentsV2 = require("../helpers/componentsV2.js"); + +module.exports = class { + + constructor (client) { + this.client = client; + } + + async run (interaction) { + if (!interaction.guild) return; + + const data = { color: this.client.config.color, footer: this.client.config.footer }; + let guildData = await this.client.findOrCreateGuild({ id: interaction.guild.id }); + data.guild = guildData; + const lang = require("../languages/" + data.guild.language); + const prefix = data.guild.prefix; + const color = componentsV2.parseColor(data.color); + + if (interaction.isStringSelectMenu()) { + const { action, ownerId, extra } = componentsV2.decodeCustomId(interaction.customId); + + if (!componentsV2.validateOwner(interaction, ownerId)) { + return componentsV2.sendOwnerError(interaction); + } + + if (action === 'help_category') { + const category = interaction.values[0]; + + const container = new ContainerBuilder() + .setAccentColor(color); + + let categoryTitle = ''; + let categoryCommands = ''; + + switch (category) { + case 'admin': + categoryTitle = lang.help.admin.title(); + categoryCommands = lang.help.admin.content(prefix); + break; + case 'moderation': + categoryTitle = lang.help.moderation.title(); + categoryCommands = lang.help.moderation.content(prefix); + break; + case 'general': + categoryTitle = lang.help.joinDM.title(); + categoryCommands = lang.help.joinDM.content(prefix); + break; + case 'configuration': + categoryTitle = lang.help.join.title(); + categoryCommands = lang.help.join.content(prefix); + break; + case 'giveaways': + categoryTitle = lang.help.giveaway.title(); + categoryCommands = lang.help.giveaway.content(prefix); + break; + } + + const title = new TextDisplayBuilder() + .setContent(`## ${categoryTitle}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const commandsList = categoryCommands.replace('> ', '').split(', '); + let formattedCommands = ''; + commandsList.forEach((cmd) => { + const cmdName = cmd.replace(/`/g, '').trim(); + formattedCommands += `**${prefix}${cmdName}**\n`; + }); + + const commandsSection = new TextDisplayBuilder() + .setContent(`**Available Commands:**\n${formattedCommands}`); + container.addTextDisplayComponents(commandsSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const dropdown = new StringSelectMenuBuilder() + .setCustomId(componentsV2.encodeCustomId('help_category', ownerId)) + .setPlaceholder('Select a category for more info') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('Administration') + .setDescription('Admin commands') + .setValue('admin') + .setEmoji('⚙️') + .setDefault(category === 'admin'), + new StringSelectMenuOptionBuilder() + .setLabel('Moderation') + .setDescription('Moderation commands') + .setValue('moderation') + .setEmoji('🛡️') + .setDefault(category === 'moderation'), + new StringSelectMenuOptionBuilder() + .setLabel('General') + .setDescription('General commands') + .setValue('general') + .setEmoji('💻') + .setDefault(category === 'general'), + new StringSelectMenuOptionBuilder() + .setLabel('Configuration') + .setDescription('Configuration commands') + .setValue('configuration') + .setEmoji('🔧') + .setDefault(category === 'configuration'), + new StringSelectMenuOptionBuilder() + .setLabel('Giveaways') + .setDescription('Giveaway commands') + .setValue('giveaways') + .setEmoji('🎁') + .setDefault(category === 'giveaways') + ); + + const dropdownRow = new ActionRowBuilder() + .addComponents(dropdown); + + container.addActionRowComponents(dropdownRow); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('help_home', ownerId)) + .setLabel('Back to Home') + .setStyle(ButtonStyle.Primary), + new ButtonBuilder() + .setLabel('Support Server') + .setStyle(ButtonStyle.Link) + .setURL(config.discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# Requested by ${interaction.user.username} | Prefix: ${prefix}`); + container.addTextDisplayComponents(footer); + + await interaction.update({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + } + + if (interaction.isButton()) { + const { action, ownerId, extra } = componentsV2.decodeCustomId(interaction.customId); + + if (!componentsV2.validateOwner(interaction, ownerId)) { + return componentsV2.sendOwnerError(interaction); + } + + if (action === 'close') { + await interaction.message.delete().catch(() => {}); + } + + if (action === 'noprefix_enable') { + if (!this.client.config.owners.includes(interaction.user.id)) { + return interaction.reply({ + content: 'This action can only be performed by the bot owner.', + ephemeral: true + }); + } + + guildData.noPrefix = true; + await guildData.save(); + + const container = new ContainerBuilder() + .setAccentColor(parseInt('00FF00', 16)); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Enabled`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`No prefix mode has been **enabled** for this server.\n\nUsers can now use commands without the \`${prefix}\` prefix.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + await interaction.update({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + + if (action === 'noprefix_disable') { + if (!this.client.config.owners.includes(interaction.user.id)) { + return interaction.reply({ + content: 'This action can only be performed by the bot owner.', + ephemeral: true + }); + } + + guildData.noPrefix = false; + await guildData.save(); + + const container = new ContainerBuilder() + .setAccentColor(parseInt('FF6600', 16)); + + const title = new TextDisplayBuilder() + .setContent(`## No Prefix Disabled`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const descText = new TextDisplayBuilder() + .setContent(`No prefix mode has been **disabled** for this server.\n\nUsers must now use the \`${prefix}\` prefix to run commands.`); + container.addTextDisplayComponents(descText); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + await interaction.update({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + + if (action === 'help_home') { + const container = new ContainerBuilder() + .setAccentColor(color); + + const title = new TextDisplayBuilder() + .setContent(`## ${lang.help.title()}`); + container.addTextDisplayComponents(title); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const description = new TextDisplayBuilder() + .setContent(lang.help.description(interaction.guild.name, prefix)); + container.addTextDisplayComponents(description); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const adminSection = new TextDisplayBuilder() + .setContent(`${lang.help.admin.title()}\n${lang.help.admin.content(prefix)}`); + container.addTextDisplayComponents(adminSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const moderationSection = new TextDisplayBuilder() + .setContent(`${lang.help.moderation.title()}\n${lang.help.moderation.content(prefix)}`); + container.addTextDisplayComponents(moderationSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const generalSection = new TextDisplayBuilder() + .setContent(`${lang.help.joinDM.title()}\n${lang.help.joinDM.content(prefix)}`); + container.addTextDisplayComponents(generalSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const configSection = new TextDisplayBuilder() + .setContent(`${lang.help.join.title()}\n${lang.help.join.content(prefix)}`); + container.addTextDisplayComponents(configSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const giveawaySection = new TextDisplayBuilder() + .setContent(`${lang.help.giveaway.title()}\n${lang.help.giveaway.content(prefix)}`); + container.addTextDisplayComponents(giveawaySection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const dropdown = new StringSelectMenuBuilder() + .setCustomId(componentsV2.encodeCustomId('help_category', ownerId)) + .setPlaceholder('Select a category for more info') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('Administration') + .setDescription('Admin commands') + .setValue('admin') + .setEmoji('⚙️'), + new StringSelectMenuOptionBuilder() + .setLabel('Moderation') + .setDescription('Moderation commands') + .setValue('moderation') + .setEmoji('🛡️'), + new StringSelectMenuOptionBuilder() + .setLabel('General') + .setDescription('General commands') + .setValue('general') + .setEmoji('💻'), + new StringSelectMenuOptionBuilder() + .setLabel('Configuration') + .setDescription('Configuration commands') + .setValue('configuration') + .setEmoji('🔧'), + new StringSelectMenuOptionBuilder() + .setLabel('Giveaways') + .setDescription('Giveaway commands') + .setValue('giveaways') + .setEmoji('🎁') + ); + + const dropdownRow = new ActionRowBuilder() + .addComponents(dropdown); + + container.addActionRowComponents(dropdownRow); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const linksSection = new TextDisplayBuilder() + .setContent(`${lang.help.tip(prefix)}\n${lang.help.links(this.client.user.id)}`); + container.addTextDisplayComponents(linksSection); + + container.addSeparatorComponents(new SeparatorBuilder()); + + const buttonRow = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setLabel('Support Server') + .setStyle(ButtonStyle.Link) + .setURL(config.discord || 'https://discord.gg/support'), + new ButtonBuilder() + .setLabel('Invite Bot') + .setStyle(ButtonStyle.Link) + .setURL(`https://discordapp.com/api/oauth2/authorize?client_id=${this.client.user.id}&permissions=8&scope=bot`), + new ButtonBuilder() + .setCustomId(componentsV2.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger) + ); + + container.addActionRowComponents(buttonRow); + + const footer = new TextDisplayBuilder() + .setContent(`-# Requested by ${interaction.user.username} | Prefix: ${prefix}`); + container.addTextDisplayComponents(footer); + + await interaction.update({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } + } + } +}; diff --git a/events/messageCreate.js b/events/messageCreate.js index 3543284..63e8c25 100644 --- a/events/messageCreate.js +++ b/events/messageCreate.js @@ -29,7 +29,29 @@ module.exports = class { let memberData = await this.client.findOrCreateGuildMember({ id: message.author.id, guildID: message.guild.id, bot: message.author.bot }); data.member = memberData; - if(!message.content.toLowerCase().startsWith(guildData.prefix)){ + let usedPrefix = false; + let usedNoPrefix = false; + let commandName = null; + let args = []; + + if (message.content.toLowerCase().startsWith(guildData.prefix)) { + usedPrefix = true; + args = message.content.slice(guildData.prefix.length).trim().split(/ +/g); + commandName = args.shift().toLowerCase(); + } else if (guildData.noPrefix) { + const messageArgs = message.content.trim().split(/ +/g); + const potentialCommand = messageArgs[0].toLowerCase(); + + const cmd = this.client.commands.get(potentialCommand) || this.client.commands.get(this.client.aliases.get(potentialCommand)); + + if (cmd) { + usedNoPrefix = true; + commandName = potentialCommand; + args = messageArgs.slice(1); + } + } + + if (!usedPrefix && !usedNoPrefix) { memberData.messagesCount = memberData.messagesCount + 1; memberData.markModified("messagesCount"); await memberData.save(); @@ -50,10 +72,7 @@ module.exports = class { cooldown.delete(message.author.id) }, cseconds * 1000) - const args = message.content.slice(guildData.prefix.length).trim().split(/ +/g); - const command = args.shift().toLowerCase(); - - const cmd = this.client.commands.get(command) || this.client.commands.get(this.client.aliases.get(command)); + const cmd = this.client.commands.get(commandName) || this.client.commands.get(this.client.aliases.get(commandName)); if(!cmd) return; else message.cmd = cmd; diff --git a/helpers/componentsV2.js b/helpers/componentsV2.js new file mode 100644 index 0000000..58ba728 --- /dev/null +++ b/helpers/componentsV2.js @@ -0,0 +1,290 @@ +const { + ContainerBuilder, + TextDisplayBuilder, + SeparatorBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + StringSelectMenuBuilder, + StringSelectMenuOptionBuilder, + MediaGalleryBuilder, + MediaGalleryItemBuilder, + MessageFlags +} = require("discord.js"); +const config = require("../config"); + +class ComponentsV2Helper { + constructor() { + this.defaultColor = parseInt((config.color || "#2f3136").replace('#', ''), 16); + this.supportUrl = config.discord || 'https://discord.gg/support'; + } + + parseColor(color) { + if (!color) return this.defaultColor; + if (typeof color === 'number') return color; + return parseInt(color.replace('#', ''), 16); + } + + encodeCustomId(action, ownerId, extra = '') { + return extra ? `${action}:${ownerId}:${extra}` : `${action}:${ownerId}`; + } + + decodeCustomId(customId) { + const parts = customId.split(':'); + return { + action: parts[0] || '', + ownerId: parts[1] || '', + extra: parts.slice(2).join(':') || '' + }; + } + + validateOwner(interaction, ownerId) { + if (interaction.user.id !== ownerId) { + return false; + } + return true; + } + + async sendOwnerError(interaction) { + const container = new ContainerBuilder() + .setAccentColor(parseInt('FF0000', 16)); + + const errorText = new TextDisplayBuilder() + .setContent('## Not Your Request!\nThis interaction was not requested by you. Run the command yourself to use it!'); + container.addTextDisplayComponents(errorText); + + return interaction.reply({ + components: [container], + flags: MessageFlags.IsComponentsV2 | MessageFlags.Ephemeral + }); + } + + createContainer(options = {}) { + const container = new ContainerBuilder(); + container.setAccentColor(this.parseColor(options.color)); + return container; + } + + addTitle(container, title) { + const titleText = new TextDisplayBuilder() + .setContent(`## ${title}`); + container.addTextDisplayComponents(titleText); + return container; + } + + addSeparator(container) { + container.addSeparatorComponents(new SeparatorBuilder()); + return container; + } + + addText(container, content) { + const text = new TextDisplayBuilder() + .setContent(content); + container.addTextDisplayComponents(text); + return container; + } + + addField(container, name, value, addSeparator = true) { + const fieldText = new TextDisplayBuilder() + .setContent(`**${name}**\n${value}`); + container.addTextDisplayComponents(fieldText); + if (addSeparator) { + this.addSeparator(container); + } + return container; + } + + addFields(container, fields) { + fields.forEach((field, index) => { + this.addField(container, field.name, field.value, index < fields.length - 1); + }); + return container; + } + + addThumbnail(container, url) { + if (!url) return container; + try { + const thumbnailItem = new MediaGalleryItemBuilder() + .setURL(url); + const gallery = new MediaGalleryBuilder() + .addItems([thumbnailItem]); + container.addMediaGalleryComponents(gallery); + } catch (e) { + } + return container; + } + + addFooter(container, text) { + const footer = new TextDisplayBuilder() + .setContent(`-# ${text}`); + container.addTextDisplayComponents(footer); + return container; + } + + createCloseButton(ownerId) { + return new ButtonBuilder() + .setCustomId(this.encodeCustomId('close', ownerId)) + .setLabel('Close') + .setStyle(ButtonStyle.Danger); + } + + createSupportButton() { + return new ButtonBuilder() + .setLabel('Support') + .setStyle(ButtonStyle.Link) + .setURL(this.supportUrl); + } + + createInviteButton(clientId) { + return new ButtonBuilder() + .setLabel('Invite Bot') + .setStyle(ButtonStyle.Link) + .setURL(`https://discordapp.com/api/oauth2/authorize?client_id=${clientId}&permissions=8&scope=bot`); + } + + addCloseButton(container, ownerId) { + const row = new ActionRowBuilder() + .addComponents(this.createCloseButton(ownerId)); + container.addActionRowComponents(row); + return container; + } + + addStandardButtons(container, ownerId, clientId, includeHome = false, homeAction = 'help_home') { + const buttons = []; + + if (includeHome) { + buttons.push( + new ButtonBuilder() + .setCustomId(this.encodeCustomId(homeAction, ownerId)) + .setLabel('Back to Home') + .setStyle(ButtonStyle.Primary) + ); + } + + buttons.push(this.createSupportButton()); + buttons.push(this.createInviteButton(clientId)); + buttons.push(this.createCloseButton(ownerId)); + + const row = new ActionRowBuilder().addComponents(buttons); + container.addActionRowComponents(row); + return container; + } + + successEmbed(title, description, options = {}) { + const container = this.createContainer({ color: options.color || '#00FF00' }); + this.addTitle(container, title); + this.addSeparator(container); + this.addText(container, description); + + if (options.footer) { + this.addSeparator(container); + this.addFooter(container, options.footer); + } + + if (options.ownerId) { + this.addSeparator(container); + this.addCloseButton(container, options.ownerId); + } + + return { + components: [container], + flags: MessageFlags.IsComponentsV2 + }; + } + + errorEmbed(title, description, options = {}) { + const container = this.createContainer({ color: options.color || '#FF0000' }); + this.addTitle(container, title); + this.addSeparator(container); + this.addText(container, description); + + if (options.footer) { + this.addSeparator(container); + this.addFooter(container, options.footer); + } + + return { + components: [container], + flags: MessageFlags.IsComponentsV2 + }; + } + + infoEmbed(title, description, options = {}) { + const container = this.createContainer({ color: options.color }); + this.addTitle(container, title); + this.addSeparator(container); + this.addText(container, description); + + if (options.fields && options.fields.length > 0) { + this.addSeparator(container); + this.addFields(container, options.fields); + } + + if (options.footer) { + this.addSeparator(container); + this.addFooter(container, options.footer); + } + + if (options.ownerId) { + this.addSeparator(container); + this.addCloseButton(container, options.ownerId); + } + + return { + components: [container], + flags: MessageFlags.IsComponentsV2 + }; + } + + buildMessage(container) { + return { + components: [container], + flags: MessageFlags.IsComponentsV2 + }; + } + + sanitizeMention(text) { + if (!text) return text; + return String(text).replace(/<@!?&?(\d+)>/g, (match, id) => { + if (match.startsWith('<@&')) return 'role'; + if (match.startsWith('<@!') || match.startsWith('<@')) return 'user'; + return match; + }).replace(/@everyone|@here/g, (match) => match.substring(1)); + } + + createPaginationButtons(ownerId, currentPage, totalPages, actionPrefix) { + const row = new ActionRowBuilder(); + + row.addComponents( + new ButtonBuilder() + .setCustomId(this.encodeCustomId(`${actionPrefix}_first`, ownerId, '1')) + .setLabel('<<') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage <= 1), + new ButtonBuilder() + .setCustomId(this.encodeCustomId(`${actionPrefix}_prev`, ownerId, String(currentPage - 1))) + .setLabel('<') + .setStyle(ButtonStyle.Primary) + .setDisabled(currentPage <= 1), + new ButtonBuilder() + .setCustomId(this.encodeCustomId(`${actionPrefix}_page`, ownerId)) + .setLabel(`${currentPage}/${totalPages}`) + .setStyle(ButtonStyle.Secondary) + .setDisabled(true), + new ButtonBuilder() + .setCustomId(this.encodeCustomId(`${actionPrefix}_next`, ownerId, String(currentPage + 1))) + .setLabel('>') + .setStyle(ButtonStyle.Primary) + .setDisabled(currentPage >= totalPages), + new ButtonBuilder() + .setCustomId(this.encodeCustomId(`${actionPrefix}_last`, ownerId, String(totalPages))) + .setLabel('>>') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage >= totalPages) + ); + + return row; + } +} + +module.exports = new ComponentsV2Helper(); diff --git a/languages/albanian.js b/languages/albanian.js index 1c50f6a..344cab3 100644 --- a/languages/albanian.js +++ b/languages/albanian.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/belarusian.js b/languages/belarusian.js index a44ab90..3e95c74 100644 --- a/languages/belarusian.js +++ b/languages/belarusian.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/brazilian.js b/languages/brazilian.js index e9964fd..6de3b9f 100644 --- a/languages/brazilian.js +++ b/languages/brazilian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informações**`, - content: (uptime) => `<:arrow:766358167382523944> **Desenvolvedores:** Alex\n <:arrow:766358167382523944> **Biblioteca:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo de Funcionamento** ${uptime}\n <:arrow:766358167382523944> **Data de Criação:** 12 de maio de 2019` + content: (uptime) => `<:arrow:766358167382523944> **Desenvolvedores:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Biblioteca:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo de Funcionamento** ${uptime}\n <:arrow:766358167382523944> **Data de Criação:** 12 de maio de 2019` }, statistics: { title: () => `**Estatísticas**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Desenvolvedores :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirado por :**`, diff --git a/languages/bulgarian.js b/languages/bulgarian.js index c60cf02..87e0294 100644 --- a/languages/bulgarian.js +++ b/languages/bulgarian.js @@ -85,7 +85,7 @@ module.exports = { dev: { title: () => `**Информация**`, - content: (uptime) => `<:arrow:766358167382523944> **Разработчици:** Alex\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Време на работа** ${uptime}\n <:arrow:766358167382523944> **Дата на създаване:** 12 май 2019 г.` + content: (uptime) => `<:arrow:766358167382523944> **Разработчици:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Време на работа** ${uptime}\n <:arrow:766358167382523944> **Дата на създаване:** 12 май 2019 г.` }, statistics: { title: () => `**Статистика**`, @@ -103,7 +103,7 @@ module.exports = { dev: { title: () => `**Разработчици :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Вдъхновено от :**`, diff --git a/languages/croatian.js b/languages/croatian.js index d5cff0d..d779c49 100644 --- a/languages/croatian.js +++ b/languages/croatian.js @@ -85,7 +85,7 @@ module.exports = { dev: { title: () => `**Informacije**`, - content: (uptime) => `<:arrow:766358167382523944> **Programeri:** Alex\n <:arrow:766358167382523944> **Knjižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Vrijeme rada** ${uptime}\n <:arrow:766358167382523944> **Datum stvaranja:** 12. svibanj 2019.` + content: (uptime) => `<:arrow:766358167382523944> **Programeri:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knjižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Vrijeme rada** ${uptime}\n <:arrow:766358167382523944> **Datum stvaranja:** 12. svibanj 2019.` }, statistics: { title: () => `**Statistika**`, @@ -103,7 +103,7 @@ module.exports = { dev: { title: () => `**Programeri :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirirano :**`, diff --git a/languages/czech.js b/languages/czech.js index 9278b3f..4687c5f 100644 --- a/languages/czech.js +++ b/languages/czech.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informace**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojáři:** Alex\n <:arrow:766358167382523944> **Knihovna:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Doba provozu** ${uptime}\n <:arrow:766358167382523944> **Datum vytvoření:** 12. května 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojáři:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knihovna:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Doba provozu** ${uptime}\n <:arrow:766358167382523944> **Datum vytvoření:** 12. května 2019` }, statistics: { title: () => `**Statistiky**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Vývojáři :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirováno :**`, diff --git a/languages/danish.js b/languages/danish.js index 70a2c69..f5a8f15 100644 --- a/languages/danish.js +++ b/languages/danish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Information**`, - content: (uptime) => `<:arrow:766358167382523944> **Udviklere:** Alex\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Oppetid** ${uptime}\n <:arrow:766358167382523944> **Oprettelsesdato:** 12. maj 2019` + content: (uptime) => `<:arrow:766358167382523944> **Udviklere:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Oppetid** ${uptime}\n <:arrow:766358167382523944> **Oprettelsesdato:** 12. maj 2019` }, statistics: { title: () => `**Statistik**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Udviklere :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspireret af :**`, diff --git a/languages/dutch.js b/languages/dutch.js index 7a9c9c9..f9c3ccc 100644 --- a/languages/dutch.js +++ b/languages/dutch.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informatie**`, - content: (uptime) => `<:arrow:766358167382523944> **Ontwikkelaars:** Alex\n <:arrow:766358167382523944> **Bibliotheek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Creatiedatum:** 12 mei 2019` + content: (uptime) => `<:arrow:766358167382523944> **Ontwikkelaars:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliotheek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Creatiedatum:** 12 mei 2019` }, statistics: { title: () => `**Statistieken**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Ontwikkelaars :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Geïnspireerd door :**`, diff --git a/languages/english.js b/languages/english.js index 13627ae..c270644 100644 --- a/languages/english.js +++ b/languages/english.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informations**`, - content: (uptime) => `<:arrow:766358167382523944> **Developers:** Alex\n <:arrow:766358167382523944> **Library:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Creation Date:** 12 mai 2019` + content: (uptime) => `<:arrow:766358167382523944> **Developers:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Library:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Creation Date:** 12 mai 2019` }, statistics: { title: () => `**Statistics**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Developers :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspired from :**`, @@ -210,10 +210,10 @@ module.exports = { description: (guild) => ` Total of **${guild.members.cache.size}** members (**${guild.members.cache.filter((m) => !m.user.bot).size}** humans and **${guild.members.cache.filter((m) => m.user.bot).size}** bots) - ➔ ${emojis.dnd} | ${guild.members.cache.filter((m) => m.presence.status === "dnd" && !m.user.bot).size} members dnd - ➔ ${emojis.online} | ${guild.members.cache.filter((m) => m.presence.status === "online" && !m.user.bot).size} members online - ➔ ${emojis.idle} | ${guild.members.cache.filter((m) => m.presence.status === "idle" && !m.user.bot).size} members idle - ➔ ${emojis.offline} | ${guild.members.cache.filter((m) => m.presence.status === "offline" && !m.user.bot).size} members offline` + ➔ ${emojis.dnd} | ${guild.members.cache.filter((m) => m.presence && m.presence.status === "dnd" && !m.user.bot).size} members dnd + ➔ ${emojis.online} | ${guild.members.cache.filter((m) => m.presence && m.presence.status === "online" && !m.user.bot).size} members online + ➔ ${emojis.idle} | ${guild.members.cache.filter((m) => m.presence && m.presence.status === "idle" && !m.user.bot).size} members idle + ➔ ${emojis.offline} | ${guild.members.cache.filter((m) => m.presence && m.presence.status === "offline" && !m.user.bot).size} members offline` }, addbonus: { diff --git a/languages/finnish.js b/languages/finnish.js index 7a1983f..ee64197 100644 --- a/languages/finnish.js +++ b/languages/finnish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Tiedot**`, - content: (uptime) => `<:arrow:766358167382523944> **Kehittäjät:** Alex\n <:arrow:766358167382523944> **Kirjasto:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Käyttöaika** ${uptime}\n <:arrow:766358167382523944> **Luontipäivä:** 12. toukokuuta 2019` + content: (uptime) => `<:arrow:766358167382523944> **Kehittäjät:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Kirjasto:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Käyttöaika** ${uptime}\n <:arrow:766358167382523944> **Luontipäivä:** 12. toukokuuta 2019` }, statistics: { title: () => `**Tilastot**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Kehittäjät :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspiroi :**`, diff --git a/languages/french.js b/languages/french.js index 15a2038..ab3dec9 100644 --- a/languages/french.js +++ b/languages/french.js @@ -102,7 +102,7 @@ module.exports = { dev: { title: () => `**Informations**`, - content: (uptime) => `<:arrow:766358167382523944> **Développeurs:** Alex\n <:arrow:766358167382523944> **Librairie:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Date de création:** 12 mai 2019` + content: (uptime) => `<:arrow:766358167382523944> **Développeurs:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Librairie:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Uptime** ${uptime}\n <:arrow:766358167382523944> **Date de création:** 12 mai 2019` }, statistics: { title: () => `**Statistiques**`, @@ -120,7 +120,7 @@ module.exports = { dev: { title: () => `**Développeurs :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspiré de :**`, diff --git a/languages/german.js b/languages/german.js index 9a431aa..11337d9 100644 --- a/languages/german.js +++ b/languages/german.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Information**`, - content: (uptime) => `<:arrow:766358167382523944> **Entwickler:** Alex\n <:arrow:766358167382523944> **Bibliothek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Betriebszeit** ${uptime}\n <:arrow:766358167382523944> **Erstellungsdatum:** 12. Mai 2019` + content: (uptime) => `<:arrow:766358167382523944> **Entwickler:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliothek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Betriebszeit** ${uptime}\n <:arrow:766358167382523944> **Erstellungsdatum:** 12. Mai 2019` }, statistics: { title: () => `**Statistiken**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Entwickler :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspiriert von :**`, diff --git a/languages/greek.js b/languages/greek.js index e9d4b27..15e6a8a 100644 --- a/languages/greek.js +++ b/languages/greek.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Πληροφορίες**`, - content: (uptime) => `<:arrow:766358167382523944> **Ανάπτυξη:** Alex\n <:arrow:766358167382523944> **Βιβλιοθήκη:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Χρόνος λειτουργίας** ${uptime}\n <:arrow:766358167382523944> **Ημερομηνία δημιουργίας:** 12 Μαΐου 2019` + content: (uptime) => `<:arrow:766358167382523944> **Ανάπτυξη:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Βιβλιοθήκη:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Χρόνος λειτουργίας** ${uptime}\n <:arrow:766358167382523944> **Ημερομηνία δημιουργίας:** 12 Μαΐου 2019` }, statistics: { title: () => `**Στατιστικά**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Ανάπτυξη :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Εμπνευσμένα από :**`, diff --git a/languages/hindi.js b/languages/hindi.js index 25c325e..66cf627 100644 --- a/languages/hindi.js +++ b/languages/hindi.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**जानकारी**`, - content: (uptime) => `<:arrow:766358167382523944> **डेवलपर्स:** Alex\n <:arrow:766358167382523944> **लाइब्रेरी:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **अपटाइम** ${uptime}\n <:arrow:766358167382523944> **निर्माण तिथि:** 12 मई 2019` + content: (uptime) => `<:arrow:766358167382523944> **डेवलपर्स:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **लाइब्रेरी:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **अपटाइम** ${uptime}\n <:arrow:766358167382523944> **निर्माण तिथि:** 12 मई 2019` }, statistics: { title: () => `**आंकड़े**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**डेवलपर :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**से प्रेरित :**`, diff --git a/languages/hungarian.js b/languages/hungarian.js index ed22dca..017a7e4 100644 --- a/languages/hungarian.js +++ b/languages/hungarian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Információ**`, - content: (uptime) => `<:arrow:766358167382523944> **Fejlesztők:** Alex\n <:arrow:766358167382523944> **Könyvtár:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Üzemidő** ${uptime}\n <:arrow:766358167382523944> **Létrehozás dátuma:** 2019. május 12.` + content: (uptime) => `<:arrow:766358167382523944> **Fejlesztők:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Könyvtár:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Üzemidő** ${uptime}\n <:arrow:766358167382523944> **Létrehozás dátuma:** 2019. május 12.` }, statistics: { title: () => `**Statisztika**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Fejlesztők :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirálva :**`, diff --git a/languages/icelandic.js b/languages/icelandic.js index c2bfd80..8ea16ed 100644 --- a/languages/icelandic.js +++ b/languages/icelandic.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/italian.js b/languages/italian.js index bc8f50b..2137990 100644 --- a/languages/italian.js +++ b/languages/italian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informazioni**`, - content: (uptime) => `<:arrow:766358167382523944> **Sviluppatori:** Alex\n <:arrow:766358167382523944> **Libreria:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo di attività** ${uptime}\n <:arrow:766358167382523944> **Data di creazione:** 12 maggio 2019` + content: (uptime) => `<:arrow:766358167382523944> **Sviluppatori:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Libreria:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo di attività** ${uptime}\n <:arrow:766358167382523944> **Data di creazione:** 12 maggio 2019` }, statistics: { title: () => `**Statistiche**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Sviluppatori :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Ispirato da :**`, diff --git a/languages/japanese.js b/languages/japanese.js index 0d4fceb..d04f33d 100644 --- a/languages/japanese.js +++ b/languages/japanese.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**情報**`, - content: (uptime) => `<:arrow:766358167382523944> **開発者:** Alex\n <:arrow:766358167382523944> **ライブラリ:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **稼働時間** ${uptime}\n <:arrow:766358167382523944> **作成日:** 2019年5月12日` + content: (uptime) => `<:arrow:766358167382523944> **開発者:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **ライブラリ:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **稼働時間** ${uptime}\n <:arrow:766358167382523944> **作成日:** 2019年5月12日` }, statistics: { title: () => `**統計**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**開発者 :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**インスピレーション元 :**`, diff --git a/languages/lithuanian.js b/languages/lithuanian.js index 63b01f0..72748dc 100644 --- a/languages/lithuanian.js +++ b/languages/lithuanian.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/norwegian.js b/languages/norwegian.js index cf1ea50..556baf2 100644 --- a/languages/norwegian.js +++ b/languages/norwegian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informasjon**`, - content: (uptime) => `<:arrow:766358167382523944> **Utviklær:** Alex\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Oppetid** ${uptime}\n <:arrow:766358167382523944> **Opprettelsesdato:** 12. mai 2019` + content: (uptime) => `<:arrow:766358167382523944> **Utviklær:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Oppetid** ${uptime}\n <:arrow:766358167382523944> **Opprettelsesdato:** 12. mai 2019` }, statistics: { title: () => `**Statistikk**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Utviklær :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirert av :**`, diff --git a/languages/polish.js b/languages/polish.js index 46edcf6..0639396 100644 --- a/languages/polish.js +++ b/languages/polish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informacje**`, - content: (uptime) => `<:arrow:766358167382523944> **Twórcy:** Alex\n <:arrow:766358167382523944> **Biblioteka:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Czas pracy** ${uptime}\n <:arrow:766358167382523944> **Data utworzenia:** 12 maja 2019` + content: (uptime) => `<:arrow:766358167382523944> **Twórcy:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Biblioteka:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Czas pracy** ${uptime}\n <:arrow:766358167382523944> **Data utworzenia:** 12 maja 2019` }, statistics: { title: () => `**Statystyki**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Twórcy :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirowane przez :**`, diff --git a/languages/portuguese.js b/languages/portuguese.js index 2f6b0b8..a091d48 100644 --- a/languages/portuguese.js +++ b/languages/portuguese.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informações**`, - content: (uptime) => `<:arrow:766358167382523944> **Desenvolvedores:** Alex\n <:arrow:766358167382523944> **Biblioteca:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo de atividade** ${uptime}\n <:arrow:766358167382523944> **Data de criação:** 12 de maio de 2019` + content: (uptime) => `<:arrow:766358167382523944> **Desenvolvedores:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Biblioteca:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tempo de atividade** ${uptime}\n <:arrow:766358167382523944> **Data de criação:** 12 de maio de 2019` }, statistics: { title: () => `**Estatísticas**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Desenvolvedores :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirado por :**`, diff --git a/languages/romanian.js b/languages/romanian.js index 29923d8..522ac16 100644 --- a/languages/romanian.js +++ b/languages/romanian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Informații**`, - content: (uptime) => `<:arrow:766358167382523944> **Dezvoltatori:** Alex\n <:arrow:766358167382523944> **Bibliotecă:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Timp de operare** ${uptime}\n <:arrow:766358167382523944> **Data creării:** 12 mai 2019` + content: (uptime) => `<:arrow:766358167382523944> **Dezvoltatori:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliotecă:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Timp de operare** ${uptime}\n <:arrow:766358167382523944> **Data creării:** 12 mai 2019` }, statistics: { title: () => `**Statistici**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Dezvoltatori :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirat de :**`, diff --git a/languages/russian.js b/languages/russian.js index 77d62a1..d416bae 100644 --- a/languages/russian.js +++ b/languages/russian.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Информация**`, - content: (uptime) => `<:arrow:766358167382523944> **Разработчики:** Alex\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Время работы** ${uptime}\n <:arrow:766358167382523944> **Дата создания:** 12 мая 2019` + content: (uptime) => `<:arrow:766358167382523944> **Разработчики:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Время работы** ${uptime}\n <:arrow:766358167382523944> **Дата создания:** 12 мая 2019` }, statistics: { title: () => `**Статистика**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Разработчики :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Вдохновлено :**`, diff --git a/languages/serbian.js b/languages/serbian.js index 1e60d70..c6f6e59 100644 --- a/languages/serbian.js +++ b/languages/serbian.js @@ -85,7 +85,7 @@ module.exports = { dev: { title: () => `**Информације**`, - content: (uptime) => `<:arrow:766358167382523944> **Програмери:** Alex\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Време рада** ${uptime}\n <:arrow:766358167382523944> **Датум стварања:** 12. мај 2019.` + content: (uptime) => `<:arrow:766358167382523944> **Програмери:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Библиотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Време рада** ${uptime}\n <:arrow:766358167382523944> **Датум стварања:** 12. мај 2019.` }, statistics: { title: () => `**Статистика**`, @@ -103,7 +103,7 @@ module.exports = { dev: { title: () => `**Програмери :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Инспирисано :**`, diff --git a/languages/slovak.js b/languages/slovak.js index 505a7f5..4bbc484 100644 --- a/languages/slovak.js +++ b/languages/slovak.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas prevádzky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/slovenian.js b/languages/slovenian.js index 7bf0695..44e8185 100644 --- a/languages/slovenian.js +++ b/languages/slovenian.js @@ -82,7 +82,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Informácie**`, - content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Alex\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas delovky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` + content: (uptime) => `<:arrow:766358167382523944> **Vývojári:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Knižnica:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Čas delovky** ${uptime}\n <:arrow:766358167382523944> **Dátum vytvorenia:** 12. mája 2019` }, statistics: { title: () => `**Štatistika**`, @@ -99,7 +99,7 @@ module.exports = { content: () => `InviteCount vám umožňuje spravovať členov vášho servera sledovaním ich pozván.`, dev: { title: () => `**Vývojári :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inšpirované :**`, diff --git a/languages/spanish.js b/languages/spanish.js index b30f2eb..4d25379 100644 --- a/languages/spanish.js +++ b/languages/spanish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Información**`, - content: (uptime) => `<:arrow:766358167382523944> **Desarrolladores:** Alex\n <:arrow:766358167382523944> **Librería:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tiempo de Actividad** ${uptime}\n <:arrow:766358167382523944> **Fecha de Creación:** 12 de mayo de 2019` + content: (uptime) => `<:arrow:766358167382523944> **Desarrolladores:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Librería:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Tiempo de Actividad** ${uptime}\n <:arrow:766358167382523944> **Fecha de Creación:** 12 de mayo de 2019` }, statistics: { title: () => `**Estadísticas**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Desarrolladores :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirado en :**`, diff --git a/languages/swedish.js b/languages/swedish.js index e63b263..447a941 100644 --- a/languages/swedish.js +++ b/languages/swedish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Information**`, - content: (uptime) => `<:arrow:766358167382523944> **Utvecklare:** Alex\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Drifttid** ${uptime}\n <:arrow:766358167382523944> **Skapningsdatum:** 12 maj 2019` + content: (uptime) => `<:arrow:766358167382523944> **Utvecklare:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Bibliotek:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Drifttid** ${uptime}\n <:arrow:766358167382523944> **Skapningsdatum:** 12 maj 2019` }, statistics: { title: () => `**Statistik**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Utvecklare :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Inspirerad av :**`, diff --git a/languages/turkish.js b/languages/turkish.js index 3c4f1c2..71c84f9 100644 --- a/languages/turkish.js +++ b/languages/turkish.js @@ -93,7 +93,7 @@ module.exports = { dev: { title: () => `**Bilgiler**`, - content: (uptime) => `<:arrow:766358167382523944> **Geliştiriciler:** Alex\n <:arrow:766358167382523944> **Kütüphane:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Çalışma Süresi** ${uptime}\n <:arrow:766358167382523944> **Oluşturulma Tarihi:** 12 Mayıs 2019` + content: (uptime) => `<:arrow:766358167382523944> **Geliştiriciler:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Kütüphane:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Çalışma Süresi** ${uptime}\n <:arrow:766358167382523944> **Oluşturulma Tarihi:** 12 Mayıs 2019` }, statistics: { title: () => `**İstatistikler**`, @@ -111,7 +111,7 @@ module.exports = { dev: { title: () => `**Geliştiriciler :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**İnspirasyonu Alınan :**`, diff --git a/languages/ukrainian.js b/languages/ukrainian.js index 1bba214..47173c0 100644 --- a/languages/ukrainian.js +++ b/languages/ukrainian.js @@ -85,7 +85,7 @@ module.exports = { dev: { title: () => `**Інформація**`, - content: (uptime) => `<:arrow:766358167382523944> **Розробники:** Alex\n <:arrow:766358167382523944> **Бібліотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Час роботи** ${uptime}\n <:arrow:766358167382523944> **Дата створення:** 12 травня 2019 р.` + content: (uptime) => `<:arrow:766358167382523944> **Розробники:** Npg, Alex, Alboom\n <:arrow:766358167382523944> **Бібліотека:** [discord.js v14.14.1](https://discord.js.org/#/)\n <:arrow:766358167382523944> **Час роботи** ${uptime}\n <:arrow:766358167382523944> **Дата створення:** 12 травня 2019 р.` }, statistics: { title: () => `**Статистика**`, @@ -103,7 +103,7 @@ module.exports = { dev: { title: () => `**Розробники :**`, - content: (uptime) => `[ThisDudeBoy](https://github.com/ThisDudeBoy)` + content: (uptime) => `[Npg](https://github.com/ThisDudeBoy)\n[Alex](https://discord.com)\n[Alboom](https://discord.com)` }, statistics: { title: () => `**Вдохновлено :**`, diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 5b6b596..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2941 +0,0 @@ -{ - "name": "InviteCount", - "version": "2.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "InviteCount", - "version": "2.0.0", - "license": "ISC", - "dependencies": { - "boats.js": "^2.4.0", - "btoa": "^1.2.1", - "chalk": "^4.1.2", - "discord-giveaways": "^6.0.1", - "discord.js": "^14.14.1", - "moment": "^2.29.4", - "mongoose": "^8.0.3", - "ms": "^2.1.3", - "node-fetch": "^2.7.0", - "quickmongo": "^5.1.0", - "string-similarity": "^4.0.4", - "superagent": "^8.1.2" - }, - "devDependencies": {} - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.940.0.tgz", - "integrity": "sha512-kFl2zLYQBLMplmYglbEe4qGuj1jlIuGuYUmtpH+XUMnbeqwU2KoDiLh+bn2u32KGrxNWHZQgraoqxMKN2q6Kcg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/credential-provider-node": "3.940.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.940.0.tgz", - "integrity": "sha512-SdqJGWVhmIURvCSgkDditHRO+ozubwZk9aCX9MK8qxyOndhobCndW1ozl3hX9psvMAo9Q4bppjuqy/GHWpjB+A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.940.0.tgz", - "integrity": "sha512-KsGD2FLaX5ngJao1mHxodIVU9VYd1E8810fcYiGwO1PFHDzf5BEkp6D9IdMeQwT8Q6JLYtiiT1Y/o3UCScnGoA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.940.0.tgz", - "integrity": "sha512-VZMijB+Dc2tISeumWw+Oxn0Oi9f4g4/xJu3kdFIjsac6GDdmBVuBbAG+bvPP73J1j1m1G1BwaYqEZvOlLwgjIA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.940.0.tgz", - "integrity": "sha512-/G3l5/wbZYP2XEQiOoIkRJmlv15f1P3MSd1a0gz27lHEMrOJOGq66rF1Ca4OJLzapWt3Fy9BPrZAepoAX11kMw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.940.0.tgz", - "integrity": "sha512-dOrc03DHElNBD6N9Okt4U0zhrG4Wix5QUBSZPr5VN8SvmjD9dkrrxOkkJaMCl/bzrW7kbQEp7LuBdbxArMmOZQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.940.0.tgz", - "integrity": "sha512-gn7PJQEzb/cnInNFTOaDoCN/hOKqMejNmLof1W5VW95Qk0TPO52lH8R4RmJPnRrwFMswOWswTOpR1roKNLIrcw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/credential-provider-env": "3.940.0", - "@aws-sdk/credential-provider-http": "3.940.0", - "@aws-sdk/credential-provider-login": "3.940.0", - "@aws-sdk/credential-provider-process": "3.940.0", - "@aws-sdk/credential-provider-sso": "3.940.0", - "@aws-sdk/credential-provider-web-identity": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.940.0.tgz", - "integrity": "sha512-fOKC3VZkwa9T2l2VFKWRtfHQPQuISqqNl35ZhcXjWKVwRwl/o7THPMkqI4XwgT2noGa7LLYVbWMwnsgSsBqglg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.940.0.tgz", - "integrity": "sha512-M8NFAvgvO6xZjiti5kztFiAYmSmSlG3eUfr4ZHSfXYZUA/KUdZU/D6xJyaLnU8cYRWBludb6K9XPKKVwKfqm4g==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.940.0", - "@aws-sdk/credential-provider-http": "3.940.0", - "@aws-sdk/credential-provider-ini": "3.940.0", - "@aws-sdk/credential-provider-process": "3.940.0", - "@aws-sdk/credential-provider-sso": "3.940.0", - "@aws-sdk/credential-provider-web-identity": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.940.0.tgz", - "integrity": "sha512-pILBzt5/TYCqRsJb7vZlxmRIe0/T+FZPeml417EK75060ajDGnVJjHcuVdLVIeKoTKm9gmJc9l45gon6PbHyUQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.940.0.tgz", - "integrity": "sha512-q6JMHIkBlDCOMnA3RAzf8cGfup+8ukhhb50fNpghMs1SNBGhanmaMbZSgLigBRsPQW7fOk2l8jnzdVLS+BB9Uw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/client-sso": "3.940.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/token-providers": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.940.0.tgz", - "integrity": "sha512-9QLTIkDJHHaYL0nyymO41H8g3ui1yz6Y3GmAN1gYQa6plXisuFBnGAbmKVj7zNvjWaOKdF0dV3dd3AFKEDoJ/w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.940.0.tgz", - "integrity": "sha512-1Thn8cboeJSZlsAwqFmwE6Z7i2/qDM9RiyusUp4M6YLSRumeCTsxR/BokxprOqWVH4ZMMB9cDjpewfkw7myUfQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.940.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/credential-provider-cognito-identity": "3.940.0", - "@aws-sdk/credential-provider-env": "3.940.0", - "@aws-sdk/credential-provider-http": "3.940.0", - "@aws-sdk/credential-provider-ini": "3.940.0", - "@aws-sdk/credential-provider-login": "3.940.0", - "@aws-sdk/credential-provider-node": "3.940.0", - "@aws-sdk/credential-provider-process": "3.940.0", - "@aws-sdk/credential-provider-sso": "3.940.0", - "@aws-sdk/credential-provider-web-identity": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", - "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", - "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", - "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws/lambda-invoke-store": "^0.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.940.0.tgz", - "integrity": "sha512-nJbLrUj6fY+l2W2rIB9P4Qvpiy0tnTdg/dmixRxrU1z3e8wBdspJlyE+AZN4fuVbeL6rrRrO/zxQC1bB3cw5IA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@smithy/core": "^3.18.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.940.0.tgz", - "integrity": "sha512-x0mdv6DkjXqXEcQj3URbCltEzW6hoy/1uIL+i8gExP6YKrnhiZ7SzuB4gPls2UOpK5UqLiqXjhRLfBb1C9i4Dw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", - "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.940.0.tgz", - "integrity": "sha512-k5qbRe/ZFjW9oWEdzLIa2twRVIEx7p/9rutofyrRysrtEnYh3HAWCngAnwbgKMoiwa806UzcTRx0TjyEpnKcCg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", - "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", - "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-endpoints": "^3.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", - "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", - "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.940.0.tgz", - "integrity": "sha512-dlD/F+L/jN26I8Zg5x0oDGJiA+/WEQmnSE27fi5ydvYnpfQLwThtQo9SsNS47XSR/SOULaaoC9qx929rZuo74A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.940.0", - "@aws-sdk/types": "3.936.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", - "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "fast-xml-parser": "5.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", - "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.13.1.tgz", - "integrity": "sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/formatters": "^0.6.2", - "@discordjs/util": "^1.2.0", - "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.38.33", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.4", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.2.tgz", - "integrity": "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "^0.38.33" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.0.tgz", - "integrity": "sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.1", - "@discordjs/util": "^1.1.1", - "@sapphire/async-queue": "^1.5.3", - "@sapphire/snowflake": "^3.5.3", - "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.38.16", - "magic-bytes.js": "^1.10.0", - "tslib": "^2.6.3", - "undici": "6.21.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz", - "integrity": "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "^0.38.33" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", - "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.5.1", - "@discordjs/util": "^1.1.0", - "@sapphire/async-queue": "^1.5.2", - "@types/ws": "^8.5.10", - "@vladfrangu/async_event_emitter": "^2.2.4", - "discord-api-types": "^0.38.1", - "tslib": "^2.6.2", - "ws": "^8.17.0" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz", - "integrity": "sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==", - "license": "MIT", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", - "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", - "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", - "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v16" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", - "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", - "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", - "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", - "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/middleware-serde": "^4.2.6", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", - "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", - "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", - "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", - "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", - "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", - "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-middleware": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", - "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", - "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", - "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", - "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", - "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", - "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", - "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", - "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", - "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", - "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", - "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", - "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.9.8", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", - "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", - "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", - "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/querystring-parser": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", - "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", - "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/config-resolver": "^4.4.3", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", - "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", - "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", - "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/service-error-classification": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", - "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "license": "MIT" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "license": "MIT", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", - "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/boats.js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/boats.js/-/boats.js-2.5.3.tgz", - "integrity": "sha512-/juLr77cW1OJyh45gRGCKc4j6bvEjndrMTF1+/aOPPyZ5NcfDy95ffuJu+weEvkGvwxDWX5gqSdeJo0pR49F3w==", - "deprecated": "The website is shutting down", - "license": "MIT", - "dependencies": { - "wumpfetch": "^0.3.1" - } - }, - "node_modules/bowser": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", - "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", - "license": "MIT", - "optional": true - }, - "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "license": "(MIT OR Apache-2.0)", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "license": "MIT" - }, - "node_modules/deepmerge-ts": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz", - "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/discord-api-types": { - "version": "0.38.35", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.35.tgz", - "integrity": "sha512-pI6FKJmkyIhToiDK5f8iok7acugSJDFnr3D2a0m+r91EMSFWCzAAEgUro9Km0AUYQPAUluS6iJaXVKt6+wBF7w==", - "license": "MIT", - "workspaces": [ - "scripts/actions/documentation" - ] - }, - "node_modules/discord-giveaways": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/discord-giveaways/-/discord-giveaways-6.0.1.tgz", - "integrity": "sha512-hs6Vtb62VdlV7NfB93Phaxc8FW0cH4N1Nkb0bXVZ2npgn73yGOFVmdp8bBP5gsC2ady9OAXXI8Gb66t1IddkFw==", - "license": "MIT", - "dependencies": { - "deepmerge-ts": "^4.2.1", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">=16.9.0" - }, - "peerDependencies": { - "discord.js": ">=14.0.0" - } - }, - "node_modules/discord.js": { - "version": "14.25.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.25.1.tgz", - "integrity": "sha512-2l0gsPOLPs5t6GFZfQZKnL1OJNYFcuC/ETWsW4VtKVD/tg4ICa9x+jb9bkPffkMdRpRpuUaO/fKkHCBeiCKh8g==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/builders": "^1.13.0", - "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.2", - "@discordjs/rest": "^2.6.0", - "@discordjs/util": "^1.2.0", - "@discordjs/ws": "^1.2.3", - "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.38.33", - "fast-deep-equal": "3.1.3", - "lodash.snakecase": "4.1.1", - "magic-bytes.js": "^1.10.0", - "tslib": "^2.6.3", - "undici": "6.21.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", - "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==", - "license": "MIT", - "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "license": "MIT" - }, - "node_modules/magic-bytes.js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", - "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", - "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/saslprep": "^1.3.0", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.2" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.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", - "snappy": "^7.3.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", - "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", - "license": "Apache-2.0", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" - } - }, - "node_modules/mongoose": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.20.1.tgz", - "integrity": "sha512-G+n3maddlqkQrP1nXxsI0q20144OSo+pe+HzRRGqaC4yK3FLYKqejqB9cbIi+SX7eoRsnG23LHGYNp8n7mWL2Q==", - "license": "MIT", - "dependencies": { - "bson": "^6.10.4", - "kareem": "2.6.3", - "mongodb": "~6.20.0", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" - }, - "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "license": "MIT", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quickmongo": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/quickmongo/-/quickmongo-5.2.0.tgz", - "integrity": "sha512-+jaNZyXZIaeOxn7TnY29yNuCts+yKLe5yfISVj68ivqMwW+jF6d0+3PWIkSeKfc1gJE3M4qmO1LzK1Ck+ItOog==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "mongoose": "^6.6.1", - "tiny-typed-emitter": "^2.1.0" - } - }, - "node_modules/quickmongo/node_modules/@types/whatwg-url": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", - "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/webidl-conversions": "*" - } - }, - "node_modules/quickmongo/node_modules/bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "license": "Apache-2.0", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/quickmongo/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/quickmongo/node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/quickmongo/node_modules/mongodb": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz", - "integrity": "sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==", - "license": "Apache-2.0", - "dependencies": { - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" - }, - "engines": { - "node": ">=12.9.0" - }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "@mongodb-js/saslprep": "^1.1.0" - } - }, - "node_modules/quickmongo/node_modules/mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", - "license": "Apache-2.0", - "dependencies": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" - } - }, - "node_modules/quickmongo/node_modules/mongoose": { - "version": "6.13.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.13.8.tgz", - "integrity": "sha512-JHKco/533CyVrqCbyQsnqMpLn8ZCiKrPDTd2mvo2W7ygIvhygWjX2wj+RPjn6upZZgw0jC6U51RD7kUsyK8NBg==", - "license": "MIT", - "dependencies": { - "bson": "^4.7.2", - "kareem": "2.5.1", - "mongodb": "4.17.2", - "mpath": "0.9.0", - "mquery": "4.0.3", - "ms": "2.1.3", - "sift": "16.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/quickmongo/node_modules/mquery": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", - "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", - "license": "MIT", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/quickmongo/node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==", - "license": "MIT" - }, - "node_modules/quickmongo/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/quickmongo/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "license": "MIT", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", - "license": "MIT" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "license": "MIT", - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "license": "MIT", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/string-similarity": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", - "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "ISC" - }, - "node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", - "license": "MIT" - }, - "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/wumpfetch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/wumpfetch/-/wumpfetch-0.3.1.tgz", - "integrity": "sha512-KbvB4asL0z/Uh1eavIXjhdo6rFudT5WtEudNfK3z9KGbvBE0JvGqRntRRjtKPOW1lEh85kcKzIOmRo8KHU5myQ==", - "license": "MIT" - } - } -} diff --git a/package.json b/package.json index 3b17e79..c6732a8 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "type": "git", "url": "git+https://github.com/ThisDudeBoy" }, - "author": "AlexM (ThisDudeBoy)", + "author": "Npg", "license": "ISC", "bugs": { "url": "https://github.com/ThisDudeBoy" diff --git a/structures/Guild.js b/structures/Guild.js index b8affb8..ef32342 100644 --- a/structures/Guild.js +++ b/structures/Guild.js @@ -34,6 +34,7 @@ module.exports = mongoose.model("Guild", new Schema({ ranks: { type: Array, default: [] }, stacked: { type: Boolean, default: true }, - premium: { type: Boolean, default: false } + premium: { type: Boolean, default: false }, + noPrefix: { type: Boolean, default: false } }));