From 60f3efeca61ebc53f873259db79130f0b30bea70 Mon Sep 17 00:00:00 2001 From: GeckoBoy84 <67899387+GeckoBoy84@users.noreply.github.com> Date: Sun, 13 Feb 2022 15:11:42 +0000 Subject: [PATCH] v0.1.0 --- bot.js | 330 ++ events/guildCreate.js | 81 + events/guildDelete.js | 25 + events/interactionCreate.js | 118 + events/messageCreate.js | 85 + events/ready.js | 74 + events/threadCreate.js | 9 + handlers/antiCrash.js | 56 + handlers/command_handler.js | 34 + handlers/event_handler.js | 31 + handlers/extraEvents.js | 22 + handlers/menu.js | 48 + handlers/slash_handler.js | 43 + index.js | 28 + models/admin.js | 24 + models/panel.js | 23 + models/prefix.js | 15 + package-lock.json | 4649 +++++++++++++++++++++++++++ package.json | 28 + settings/config.json | 6 + slscommands/information/help.js | 290 ++ slscommands/information/info.js | 59 + slscommands/information/invite.js | 43 + slscommands/information/tutorial.js | 230 ++ slscommands/setup/admin.js | 1174 +++++++ slscommands/setup/control.js | 2714 ++++++++++++++++ 26 files changed, 10239 insertions(+) create mode 100644 bot.js create mode 100644 events/guildCreate.js create mode 100644 events/guildDelete.js create mode 100644 events/interactionCreate.js create mode 100644 events/messageCreate.js create mode 100644 events/ready.js create mode 100644 events/threadCreate.js create mode 100644 handlers/antiCrash.js create mode 100644 handlers/command_handler.js create mode 100644 handlers/event_handler.js create mode 100644 handlers/extraEvents.js create mode 100644 handlers/menu.js create mode 100644 handlers/slash_handler.js create mode 100644 index.js create mode 100644 models/admin.js create mode 100644 models/panel.js create mode 100644 models/prefix.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 settings/config.json create mode 100644 slscommands/information/help.js create mode 100644 slscommands/information/info.js create mode 100644 slscommands/information/invite.js create mode 100644 slscommands/information/tutorial.js create mode 100644 slscommands/setup/admin.js create mode 100644 slscommands/setup/control.js diff --git a/bot.js b/bot.js new file mode 100644 index 0000000..68a295d --- /dev/null +++ b/bot.js @@ -0,0 +1,330 @@ +const { + Client, + Message, + MessageEmbed, + Collection, + Intents, + MessageAttachment +} = require('discord.js'); +const colors = require("colors"); +const libsodium = require("libsodium-wrappers"); +const path = require('path'); +const moment = require('moment'); +const fs = require('fs'); +const { + inspect, +} = require('util'); + +require('dotenv').config(); +const allIntents = new Intents(32767); +const client = new Client({ + messageCacheLifetime: 60, + fetchAllMembers: false, + messageCacheMaxSize: 10, + restTimeOffset: 0, + restWsBridgetimeout: 100, + shards: 'auto', + allowedMentions: { + parse: ['roles', 'users', 'everyone'], + repliedUser: true, + }, + partials: ['MESSAGE', 'CHANNEL', 'REACTION', "DIRECT_MESSAGES"], + intents: allIntents, +}); +module.exports = client; + +const config = require('./settings/config.json'); +const prefix = config.prefix; + +// Global Variables +client.commands = new Collection(); +client.aliases = new Collection(); +client.events = new Collection(); +client.cooldowns = new Collection(); +client.slashCommands = new Collection(); +client.categories = fs.readdirSync(path.resolve(__dirname, 'commands')); + + +// Initializing the project +// Loading files, with the client variable like Command Handler, Event Handler, ... +['extraEvents', 'antiCrash', 'command_handler', 'event_handler', 'slash_handler'].forEach((handler) => { + require(`./handlers/${handler}`)(client); +}); + +client.on('ready', async () => { + const messageChannel = await client.channels.cache.get('939844393425317952'); + process.on('beforeExit', async (code) => { // If You Want You Can Use + + if (typeof code !== 'string') { + code = inspect(code); + } + if (code instanceof Promise) { + code = await code; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true, + }), + }) + .setTitle('[beforeExit]') + .setDescription(` \`\`\` ${code} \`\`\` `) + .setTimestamp(); + + + if (code.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(code), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('exit', async (error) => { // If You Want You Can Use + + if (typeof error !== 'string') { + error = inspect(error); + } + if (error instanceof Promise) { + error = await error; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[Exit]') + .setDescription(` \`\`\` ${error} \`\`\` `) + .setTimestamp(); + + + if (error.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(error), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('multipleResolves', async (type, promise, reason) => { // Needed + + if (typeof reason !== 'string') { + reason = inspect(reason); + } + if (reason instanceof Promise) { + reason = await reason; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[multipleResolves]') + .setDescription(` \`\`\` ${type, promise, reason} \`\`\` `) + .setTimestamp(); + + + if (reason.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(type, promise, reason), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('unhandledRejection', async (reason, promise) => { // Needed + + if (typeof reason !== 'string') { + reason = inspect(reason); + } + if (reason instanceof Promise) { + reason = await reason; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[unhandledRejection]') + .setDescription(` \`\`\` ${reason} \`\`\` `) + .setTimestamp(); + + + if (reason.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(reason), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('rejectionHandled', async (promise) => { // If You Want You Can Use + + if (typeof promise !== 'string') { + promise = inspect(promise); + } + if (promise instanceof Promise) { + promise = await promise; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[rejectionHandled]') + .setDescription(` \`\`\` ${promise} \`\`\` `) + .setTimestamp(); + + + if (promise.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(promise), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('uncaughtException', async (err, origin) => { // Needed + + if (typeof err !== 'string') { + err = inspect(err); + } + if (err instanceof Promise) { + err = await err; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[uncaughtException]') + .setDescription(` \`\`\` ${err} \`\`\` `) + .setTimestamp(); + + + if (err.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(err), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('uncaughtExceptionMonitor', async (err, origin) => { // Needed + + if (typeof err !== 'string') { + err = inspect(err); + } + if (err instanceof Promise) { + err = await err; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[uncaughtExceptionMonitor]') + .setDescription(` \`\`\` ${err} \`\`\` `) + .setTimestamp(); + + + if (err.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(err), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); + process.on('warning', async (warning) => { // If You Want You Can Use + + if (typeof warning !== 'string') { + warning = inspect(warning); + } + if (warning instanceof Promise) { + warning = await warning; + } + const Embed = new MessageEmbed() + .setAuthor({ + name: client.user.tag, + iconURL: client.user.avatarURL({ + dynamic: true + }) + }) + .setTitle('[warning]') + .setDescription(` \`\`\` ${warning} \`\`\` `) + .setTimestamp(); + + + if (warning.length < 2000) { + await messageChannel.send({ + embeds: [Embed], + + }); + } else { + const output = new MessageAttachment(Buffer.from(warning), 'output.js'); + await messageChannel.send({ + files: [output], + + }); + } + + }); +}); + +client.login(config.TOKEN); \ No newline at end of file diff --git a/events/guildCreate.js b/events/guildCreate.js new file mode 100644 index 0000000..bb41c9c --- /dev/null +++ b/events/guildCreate.js @@ -0,0 +1,81 @@ +const { + MessageEmbed, + MessageActionRow, + MessageButton, +} = require('discord.js'); +const config = require('../settings/config.json'); +const client = require('../bot'); + + +client.on('guildCreate', async (guild) => { + const owner = await guild.fetchOwner(); + const embed = new MessageEmbed() + .setAuthor({ + name: 'PteroControl | Information', + iconURL: client.user.avatarURL(), + }) + .setColor('RANDOM') + .setThumbnail(guild.iconURL()) + .setFooter({ text: 'PteroControl For Pterodactyl 1.x | Sponsored By ScarceHost.uk'}) + .setTimestamp() + .setDescription( + 'Thank you for adding me to your discord server! to get all command information type `/help`, if you needing help join our support server by clicking the button!', + ); + const button = new MessageButton() + .setLabel('Support Server') + .setStyle('LINK') + .setURL(config.inviteSupport); + owner.send({ + embeds: [embed], + components: [new MessageActionRow().addComponents([button])], + }); + + const newEmbed = new MessageEmbed() + .setAuthor({ + name: 'PteroControl | Information', + iconURL: client.user.avatarURL(), + }) + .setColor('RANDOM') + .setThumbnail(guild.iconURL()) + .setDescription( + + 'GUILD ADDED', + ) + .addFields( + + { + name: 'Guild Name', + value: `${guild.name}`, + }, { + name: 'Guild ID', + value: `${guild.id}`, + }, + + { + name: 'Guild Member Count', + value: `${guild.memberCount}`, + }, + + { + name: 'Owner Name', + value: `${owner.name}`, + }, + { + name: 'Owner ID', + value: `${owner.id}`, + }, + { + name: 'Total Member Count', + value: `${client.guilds.cache.reduce((a, b) => a + b.memberCount, 0)}`, + }, + { + name: 'Total Guilds', + value: `${client.guilds.cache.size}`, + }, + + ); + const loggingchannel = client.channels.cache.get('939844393425317951'); + loggingchannel.send({ + embeds: [newEmbed], + }); +}); \ No newline at end of file diff --git a/events/guildDelete.js b/events/guildDelete.js new file mode 100644 index 0000000..e8c56cb --- /dev/null +++ b/events/guildDelete.js @@ -0,0 +1,25 @@ +const { + MessageEmbed, +} = require('discord.js'); +const config = require('../settings/config.json'); +const client = require('../bot'); + + +client.on('guildDelete', async (guild) => { + + const newEmbed = new MessageEmbed() + .setAuthor({ + name: 'PteroControl | Information', + iconURL: client.user.avatarURL(), + }) + .setColor('RANDOM') + .setThumbnail(guild.iconURL()) + .setDescription( + + `I've left a guild:\n\n **${guild.name}**`, + ); + const loggingchannel = client.channels.cache.get('939844393425317951'); + loggingchannel.send({ + embeds: [newEmbed], + }); +}); \ No newline at end of file diff --git a/events/interactionCreate.js b/events/interactionCreate.js new file mode 100644 index 0000000..07eb77e --- /dev/null +++ b/events/interactionCreate.js @@ -0,0 +1,118 @@ +const { + MessageEmbed, +} = require('discord.js'); +const client = require('../bot') +const config = require('../settings/config.json'); +const mongoose = require('mongoose'); + +const util = require('util'); +const moment = require('moment'); + +client.on('interactionCreate', async interaction => { + // Slash Command Handling + if (interaction.isCommand()) { + // await interaction.deferReply({ ephemeral: false }).catch(() => { }); + + const cmd = client.slashCommands.get(interaction.commandName); + if (!cmd) { + return interaction.followUp({ + content: 'An error has occured ', + }); + } + + const args = []; + + for (const option of interaction.options.data) { + if (option.type === 'SUB_COMMAND') { + if (option.name) args.push(option.name); + option.options?.forEach((x) => { + if (x.value) args.push(x.value); + }); + } else if (option.value) { + args.push(option.value); + } + } + interaction.member = interaction.guild.members.cache.get(interaction.user.id); + + if (cmd) { + // checking user perms + if (!interaction.member.permissions.has(cmd.permissions || [])) { + return interaction.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.embed_color) + .setDescription(`You don't Have ${cmd.permissions} To Run Command..`), + ], + ephemeral: true, + }); + } + cmd.run(client, interaction, args); + const messageChannel = client.channels.cache.get('941049199846379561'); + + const embedLog = new MessageEmbed() + .setColor('AQUA') + .setAuthor({ + name: `${interaction.user.tag} used slashcommand`, + iconURL: interaction.user.avatarURL({ + dynamic: true, + size: 512, + }), + }) + + .setDescription(`${interaction.user}`) + .setThumbnail(interaction.user.avatarURL({ + dynamic: true, + size: 512, + })) + // .setTimestamp(moment().format('ddd DD-MM-YYYY HH:mm:ss')) + .setFooter({ + text: moment().format('ddd DD-MM-YYYY HH:mm:ss'), + }) + .addField('**Command**', `${cmd.name}: ` + `${args}`) + .addField('**Can run:**', `${interaction.member.permissions.has(cmd.permissions || [])}`, true) + .addField('**Channel**:', `${interaction.channel}`, true); + + if (cmd.permissions == ' ') { + embedLog.addField('**Permissions**:', 'None', true); + } else { + embedLog.addField('**Permissions**:', `${cmd.permissions}`, true); + } + + messageChannel.send({ + embeds: [embedLog], + }); + } + } + // Context Menu Handling + if (interaction.isContextMenu()) { + const command = client.slashCommands.get(interaction.commandName); + if (command) command.run(client, interaction); + } + + if (!interaction.isSelectMenu()) { + return; + } + + const { + customId, + values, + member, + } = interaction; + + if (customId === 'auto_roles') { + const component = interaction.component; + const removed = component.options.filter((option) => { + return !values.includes(option.value); + }); + for (const id of removed) { + member.roles.remove(id.value); + } + for (const id of values) { + member.roles.add(id); + } + interaction.reply({ + content: '**Your Roles have been updated!**', + ephemeral: true, + }); + } +}); \ No newline at end of file diff --git a/events/messageCreate.js b/events/messageCreate.js new file mode 100644 index 0000000..9d28a4b --- /dev/null +++ b/events/messageCreate.js @@ -0,0 +1,85 @@ +let prefix = require("../models/prefix.js"); +const client = require('../bot') +const config = require('../settings/config.json'); +const mongoose = require('mongoose'); + +client.on('messageCreate', async message => { + let deprefix = "-"; + + // if (message.channel.type !== "dm") { + // prefix + // .find({ + // GUILDID: message.guild.id, + // }) + // .then((guildprefix) => { + // console.log(message.guild.id) + // if (guildprefix.length === 0) { + // if (message.author.bot) return; + // if (message.content.indexOf(deprefix) !== 0) return; + // + // const args = message.content.slice(1).trim().split(/ +/g); + // const command = args.shift().toLowerCase(); + // const cmd = client.commands.get(command.toLowerCase()) || client.commands.find((cmds) => command.aliases && command.aliases.includes(command)); + // + // if (!cmd) return; + // if (cmd) { + // if (!message.member.permissions.has(cmd.permissions || [])) { + // return message.reply({ + // embeds: [ + // new MessageEmbed() + // .setColor("BLUE") + // .setDescription(`** ❌ You don't Have ${command.permissions} To Run Command.. **`), + // ], + // }); + // } + // cmd.run(client, message, args); + // } + // } + // if (guildprefix.length > 0) { + // deprefix = guildprefix[0].PREFIX; + // + // if (message.author.bot) return; + // if (message.content.indexOf(deprefix) !== 0) return; + // + // const args = message.content.slice(1).trim().split(/ +/g); + // const command = args.shift().toLowerCase(); + // const cmd = client.commands.get(command.toLowerCase()) || client.commands.find((cmds) => command.aliases && command.aliases.includes(command)); + // + // if (!cmd) return; + // if (cmd) { + // if (!message.member.permissions.has(cmd.permissions || [])) { + // return message.reply({ + // embeds: [ + // new MessageEmbed() + // .setColor("BLUE") + // .setDescription(`** ❌ You don't Have ${command.permissions} To Run Command.. **`), + // ], + // }); + // } + // cmd.run(client, message, args); + // } + // } + // }); + // } else { + if (message.author.bot) return; + if (message.content.indexOf(deprefix) !== 0) return; + + const args = message.content.slice(1).trim().split(/ +/g); + const command = args.shift().toLowerCase(); + const cmd = client.commands.get(command.toLowerCase()) || client.commands.find((cmds) => command.aliases && command.aliases.includes(command)); + + // if (!cmd) return; + if (cmd) { + if (!message.member.permissions.has(cmd.permissions || [])) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor("BLUE") + .setDescription(`** ❌ You don't Have ${command.permissions} To Run Command.. **`), + ], + }); + } + cmd.run(client, message, args); + } + // } +}); \ No newline at end of file diff --git a/events/ready.js b/events/ready.js new file mode 100644 index 0000000..6734bd1 --- /dev/null +++ b/events/ready.js @@ -0,0 +1,74 @@ +const { + MessageEmbed, + Client, +} = require('discord.js'); +const Discord = require('discord.js'); +const moment = require('moment'); +const config = require('../settings/config.json'); +const panel = require("../models/panel.js"); +const mongoose = require('mongoose'); + + +const client = require('../bot') + +client.on('ready', () => { + client.logger( + 'Bot User: '.brightBlue + `${client.user.tag}`.blue + '\n' + + 'Guild(s): '.brightBlue + `${client.guilds.cache.size} Servers`.blue + '\n' + + 'Watching: '.brightBlue + `${client.guilds.cache.reduce((a, b) => a + b.memberCount, 0)} Members`.blue + '\n' + + 'Commands: '.brightBlue + `${client.commands.size}`.blue + '\n' + + 'Slash Commands: '.brightBlue + `${client.slashCommands.size}`.blue + '\n' + + 'Discord.js: '.brightBlue + `v${Discord.version}`.blue + '\n' + + 'Node.js: '.brightBlue + `${process.version}`.blue + '\n' + + 'Plattform: '.brightBlue + `${process.platform} ${process.arch}`.blue + '\n' + + 'Memory: '.brightBlue + `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MB / ${(process.memoryUsage().rss / 1024 / 1024).toFixed(2)} MB`.blue, + ); + + const loggingchannel = client.channels.cache.get('939844393425317952'); + if (loggingchannel) { + + + const embedlog = new MessageEmbed() + .setColor('GREY') + .setThumbnail(client.user.displayAvatarURL()) + .setDescription('Restarted **' + client.user.tag + '**. Up and ready to serve on ' + client.guilds.cache.size + ' servers, ' + client.channels.cache.size + ' channels, and ' + client.users.cache.size + ' unique users, with over ' + client.commands.size + ' commands and ' + client.slashCommands.size + ' slash commands readily available for use!') + .setFooter({ + text: `Last Boot: ${moment().format('ddd DD-MM-YYYY HH:mm:ss')}`, + }); + loggingchannel.send({ + embeds: [embedlog], + }); + } + + setInterval(() => { + + panel + .find({}) + .then((total) => { + let totals = total.length; + client.user.setPresence({ + activities: [{ + name: `/help | Managing ${totals} Panel's in ${client.guilds.cache.size} server's` + }], + status: "WATCHING" + }); + + }) + .catch((error) => { + console.log(error); + }); + + }, 60000); + + if (!config.Database) return; + mongoose.connect(config.Database, { + useNewUrlParser: true, + useUnifiedTopology: true, + }).then(() => { + client.logger( + 'Database: '.brightBlue + 'connection established'.blue, + ); + }).catch((err) => { + console.log(err); + }); +}); \ No newline at end of file diff --git a/events/threadCreate.js b/events/threadCreate.js new file mode 100644 index 0000000..79033df --- /dev/null +++ b/events/threadCreate.js @@ -0,0 +1,9 @@ +const client = require('../bot') + +client.on('threadCreate', (thread) => { + try { + thread.join(); + } catch (e) { + console.log(e.message); + } +}); \ No newline at end of file diff --git a/handlers/antiCrash.js b/handlers/antiCrash.js new file mode 100644 index 0000000..f0ca0bf --- /dev/null +++ b/handlers/antiCrash.js @@ -0,0 +1,56 @@ +const { + MessageEmbed, + MessageAttachment, + Client, +} = require('discord.js'); +/** + * + * @param {Client} client + */ +module.exports = async (client) => { + client.logger('Starting AntiCrash'.bold.yellow); + process.on('beforeExit', (code) => { // If You Want You Can Use + console.log('=== [antiCrash] :: [beforeExit] :: [start] ==='.yellow.dim); + console.log(code); + console.log('=== [antiCrash] :: [beforeExit] :: [end] ==='.yellow.dim); + }); + process.on('exit', (error) => { // If You Want You Can Use + console.log('=== [antiCrash] :: [exit] :: [start] ==='.yellow.dim); + console.log(error); + console.log('=== [antiCrash] :: [exit] :: [end] ==='.yellow.dim); + }); + process.on('multipleResolves', (type, promise, reason) => { // Needed + console.log('=== [antiCrash] :: [multipleResolves] :: [start] ==='.yellow.dim); + console.log(type, promise, reason); + console.log('=== [antiCrash] :: [multipleResolves] :: [end] ==='.yellow.dim); + }); + process.on('unhandledRejection', async (reason, promise) => { // Needed + console.log('=== [antiCrash] :: [unhandledRejection] :: [start] ==='.yellow.dim); + console.log(reason); + console.log('=== [antiCrash] :: [unhandledRejection] :: [end] ==='.yellow.dim); + }); + process.on('rejectionHandled', (promise) => { // If You Want You Can Use + console.log('=== [antiCrash] :: [rejectionHandled] :: [start] ==='.yellow.dim); + console.log(promise); + console.log('=== [antiCrash] :: [rejectionHandled] :: [end] ==='.yellow.dim); + }); + process.on('uncaughtException', (err, origin) => { // Needed + console.log('=== [antiCrash] :: [uncaughtException] :: [start] ==='.yellow.dim); + console.log(err); + console.log('=== [antiCrash] :: [uncaughtException] :: [end] ==='.yellow.dim); + }); + process.on('uncaughtExceptionMonitor', (err, origin) => { // Needed + console.log('=== [antiCrash] :: [uncaughtExceptionMonitor] :: [start] ==='.yellow.dim); + console.log(err); + console.log('=== [antiCrash] :: [uncaughtExceptionMonitor] :: [end] ==='.yellow.dim); + }); + process.on('warning', (warning) => { // If You Want You Can Use + console.log('=== [antiCrash] :: [warning] :: [start] ==='.yellow.dim); + console.log(warning); + console.log('=== [antiCrash] :: [warning] :: [end] ==='.yellow.dim); + }); + process.on('SIGINT', () => { // If You Want You Can Use + console.log('=== [antiCrash] :: [SIGINT] ==='.yellow.dim); + }); + client.logger('AntiCrash Started'.brightGreen); +}; \ No newline at end of file diff --git a/handlers/command_handler.js b/handlers/command_handler.js new file mode 100644 index 0000000..48a6288 --- /dev/null +++ b/handlers/command_handler.js @@ -0,0 +1,34 @@ +const { + Client +} = require('discord.js'); +const fs = require('fs'); + +/** + * + * @param {Client} client + */ + +module.exports = (client) => { + try { + let command = 0; + fs.readdirSync('./commands').forEach(cmd => { + + const commands = fs.readdirSync(`./commands/${cmd}/`).filter((file) => file.endsWith('.js')); + for (cmds of commands) { + const pull = require(`../commands/${cmd}/${cmds}`); + if (pull.name) { + client.commands.set(pull.name, pull); + command++; + } else { + console.log(`${cmds} Command is not Ready`); + continue; + } + if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name)); + + } + }); + // console.log(`${command} Prefix commands Loaded✅`); + } catch (e) { + console.log(e.message); + } +}; \ No newline at end of file diff --git a/handlers/event_handler.js b/handlers/event_handler.js new file mode 100644 index 0000000..0cf50a7 --- /dev/null +++ b/handlers/event_handler.js @@ -0,0 +1,31 @@ +const { + Client +} = require('discord.js'); +const fs = require('fs'); + +/** + * + * @param {Client} client + */ + +module.exports = async (client) => { + try { + let amount = 0; + fs.readdirSync('./events/').forEach((file) => { + const events = fs.readdirSync('./events/').filter((file) => + file.endsWith('.js'), + ); + for (const file of events) { + const pull = require(`../events/${file}`); + if (pull.name) { + client.events.set(pull.name, pull); + } + } + amount++; + // console.log((`${file} Events Loaded Successfullly`)); + client.logger(`${amount} Events Loaded`.brightGreen); + }); + } catch (e) { + console.log(e.message); + } +}; \ No newline at end of file diff --git a/handlers/extraEvents.js b/handlers/extraEvents.js new file mode 100644 index 0000000..15233c8 --- /dev/null +++ b/handlers/extraEvents.js @@ -0,0 +1,22 @@ +const { + MessageEmbed, +} = require('discord.js'); +const moment = require('moment'); +module.exports = async (client) => { + + // Console Logger + client.logger = (data) => { + // if (!settings[`debug-logs`]) return; + const logstring = `${String('PteroControl').brightGreen}${' | '.grey}${`${moment().format('ddd DD-MM-YYYY HH:mm:ss.SSSS')}`.cyan}${' 〢 '.magenta}`; + if (typeof data == 'string') { + console.log(logstring, data.split('\n').map(d => `${d}`.green).join(`\n${logstring} `)); + } else if (typeof data == 'object') { + console.log(logstring, JSON.stringify(data, null, 3).green); + } else if (typeof data == 'boolean') { + console.log(logstring, String(data).cyan); + } else { + console.log(logstring, data); + } + }; + +}; \ No newline at end of file diff --git a/handlers/menu.js b/handlers/menu.js new file mode 100644 index 0000000..0db4b5f --- /dev/null +++ b/handlers/menu.js @@ -0,0 +1,48 @@ +const { + MessageSelectMenu, + MessageActionRow, +} = require('discord.js'); + +const create_mh = (array) => { + if (!array) throw new Error('The options were not provided! Make sure you provide all the options!'); + if (array.length < 0) throw new Error('The array has to have atleast one thing to select!'); + let select_menu; + const id = 'help-menus'; + const menus = []; + const emo = { + info: '❗', + utility: '⚙️', + moderation: '🔧', // Write your category names instead + }; + + array.forEach(cca => { + const name = cca; + const sName = `${name.toUpperCase()}`; + const tName = name.toLowerCase(); + const fName = name.toUpperCase(); + + return menus.push({ + label: sName, + description: `${tName} commands!`, + value: fName, + }); + }); + + const smenu1 = new MessageSelectMenu() + .setCustomId(id) + .setPlaceholder('Choose the command category') + .addOptions(menus); + + select_menu = new MessageActionRow() + .addComponents( + smenu1, + ); + + + return { + smenu: [select_menu], + sid: id, + }; +}; + +module.exports = create_mh; \ No newline at end of file diff --git a/handlers/slash_handler.js b/handlers/slash_handler.js new file mode 100644 index 0000000..28e0d28 --- /dev/null +++ b/handlers/slash_handler.js @@ -0,0 +1,43 @@ +const { + Client +} = require('discord.js'); +const fs = require('fs'); + +/** + * + * @param {Client} client + */ + +module.exports = (client) => { + try { + let command = 0; + const arrayOfSlashCommands = []; + fs.readdirSync('./slscommands').forEach(cmd => { + const commands = fs.readdirSync(`./slscommands/${cmd}/`).filter((file) => file.endsWith('.js')); + for (cmds of commands) { + const pull = require(`../slscommands/${cmd}/${cmds}`); + if (pull.name) { + client.slashCommands.set(pull.name, pull); + arrayOfSlashCommands.push(pull); + command++; + } else { + console.log(`${cmds} Command is not Ready`); + continue; + } + if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name)); + + } + client.on('ready', async () => { + client.guilds.cache.forEach(async (g) => { + await client.guilds.cache.get(g.id).commands.set(arrayOfSlashCommands); + }); + + + }); + + }); + // console.log(`${command} Slashcommands Loaded✅`); + } catch (e) { + console.log(e.message); + } +}; \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..78f0bfd --- /dev/null +++ b/index.js @@ -0,0 +1,28 @@ +const { + ShardingManager +} = require('discord.js'); +const config = require('./settings/config.json') + +const manager = new ShardingManager('./bot.js', { + token: config.TOKEN +}); + +console.log(` +╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ │ +│ ██████╗░████████╗███████╗██████╗░░█████╗░░█████╗░░█████╗░███╗░░██╗████████╗██████╗░░█████╗░██╗░░░░░ │ +│ ██╔══██╗╚══██╔══╝██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗████╗░██║╚══██╔══╝██╔══██╗██╔══██╗██║░░░░░ │ +│ ██████╔╝░░░██║░░░█████╗░░██████╔╝██║░░██║██║░░╚═╝██║░░██║██╔██╗██║░░░██║░░░██████╔╝██║░░██║██║░░░░░ │ +│ ██╔═══╝░░░░██║░░░██╔══╝░░██╔══██╗██║░░██║██║░░██╗██║░░██║██║╚████║░░░██║░░░██╔══██╗██║░░██║██║░░░░░ │ +│ ██║░░░░░░░░██║░░░███████╗██║░░██║╚█████╔╝╚█████╔╝╚█████╔╝██║░╚███║░░░██║░░░██║░░██║╚█████╔╝███████╗ │ +│ ╚═╝░░░░░░░░╚═╝░░░╚══════╝╚═╝░░╚═╝░╚════╝░░╚════╝░░╚════╝░╚═╝░░╚══╝░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚══════╝ │ +│ │ +│ │ +│ Support Server - https://discord.gg/AMCTzrmRPY │ +│ Website - https://pterocontrol.scarcehost.uk/ │ +│ │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ +`) +manager.on('shardCreate', shard => console.log(`Launched shard ${shard.id}`)); + +manager.spawn(); \ No newline at end of file diff --git a/models/admin.js b/models/admin.js new file mode 100644 index 0000000..807cd4c --- /dev/null +++ b/models/admin.js @@ -0,0 +1,24 @@ +const mongoose = require('mongoose'); + +const AdminScheme = new mongoose.Schema({ + ids: { + type: String, + required: true + }, + API: { + type: String, + required: true + }, + URL: { + type: String, + required: true + }, + NAME: { + type: String, + required: true + } +}); + + +const admin = mongoose.model('admin', AdminScheme); +module.exports = admin; \ No newline at end of file diff --git a/models/panel.js b/models/panel.js new file mode 100644 index 0000000..b1331ef --- /dev/null +++ b/models/panel.js @@ -0,0 +1,23 @@ +const mongoose = require('mongoose'); + +const PanelScheme = new mongoose.Schema({ + ID: { + type: String, + required: true + }, + API: { + type: String, + required: true + }, + URL: { + type: String, + required: true + }, + NAME: { + type: String, + required: true + } +}); + +const panel = mongoose.model('panel', PanelScheme); +module.exports = panel; \ No newline at end of file diff --git a/models/prefix.js b/models/prefix.js new file mode 100644 index 0000000..da5e33b --- /dev/null +++ b/models/prefix.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); + +const PrefixScheme = new mongoose.Schema({ + GUILDID: { + type: String, + required: true + }, + PREFIX: { + type: String, + required: true + } +}); + +const prefix = mongoose.model('prefix', PrefixScheme); +module.exports = prefix; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8f9bda1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4649 @@ +{ + "name": "PteroControl modified by Lenzh", + "version": "v10.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "PteroControl modified by Lenzh", + "version": "v10.1", + "dependencies": { + "@discordjs/rest": "^0.3.0", + "colors": "^1.4.0", + "common-tags": "^1.8.2", + "discord-api-types": "^0.26.1", + "discord-epagination": "^1.4.5", + "discord.js": "^13.6.0", + "discordjs-button-pagination": "^3.0.1", + "dotenv": "^16.0.0", + "libsodium": "^0.7.9", + "libsodium-wrappers": "^0.7.9", + "moment": "^2.29.1", + "mongoose": "^6.2.0", + "nodeactyl": "^3.2.2", + "path": "^0.12.7" + }, + "devDependencies": { + "eslint": "^8.8.0", + "nodemon": "^2.0.15" + } + }, + "node_modules/@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "dependencies": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", + "deprecated": "no longer supported", + "dependencies": { + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@sapphire/async-queue": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz", + "integrity": "sha512-O5ND5Ljpef86X5oy8zXorQ754TMjWALcPSAgPBu4+76HLtDTrNoDyzU2uGE2G4A8Wv51u0MXHzGQ0WZ4GMtpIw==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.1.0.tgz", + "integrity": "sha512-K+OiqXSx4clIaXcoaghrCV56zsm3bZZ5SBpgJkgvAKegFFdETMntHviUfypjt8xVleIuDaNyQA4APOIl3BMcxg==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", + "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/node": { + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" + }, + "node_modules/@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/axios": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.22.0.tgz", + "integrity": "sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.1.tgz", + "integrity": "sha512-I1LQ7Hz5zgwR4QquilLNZwbhPw0Apx7i7X9kGMBTsqPdml/03Q9NBtD9nt/19ahjlphktQImrnderxqpzeVDjw==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "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/chalk/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/discord-epagination": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/discord-epagination/-/discord-epagination-1.4.5.tgz", + "integrity": "sha512-p3LsetYJmxcG0C2XxaO4q6tZv4vtH1QDmzaqgoAi5kLvUm8gQdsg5vP/TVUj2P3R+/O2nzabiQj4bRXhGQOYng==", + "dependencies": { + "discord.js": "^13.1.0" + } + }, + "node_modules/discord.js": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "dependencies": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@types/node-fetch": "^2.5.12", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", + "node-fetch": "^2.6.1", + "ws": "^8.4.0" + }, + "engines": { + "node": ">=16.6.0", + "npm": ">=7.0.0" + } + }, + "node_modules/discordjs-button-pagination": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/discordjs-button-pagination/-/discordjs-button-pagination-3.0.1.tgz", + "integrity": "sha512-BsbB/uqu+Rbv8WZrsWI57qZoss9Jgdvba/j45Mrh00Zq8Su6KfOGjaWNKkquBCWFd42Rz3sQBykHK2qJjGl57A==", + "dependencies": { + "discord.js": "^13.0.1" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/kareem": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", + "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "node_modules/libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "dependencies": { + "libsodium": "^0.7.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "optional": true + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.3.1.tgz", + "integrity": "sha512-sNa8APSIk+r4x31ZwctKjuPSaeKuvUeNb/fu/3B6dRM02HpEgig7hTHM8A/PJQTlxuC/KFWlDlQjhsk/S43tBg==", + "dependencies": { + "bson": "^4.6.1", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.4.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.4.2.tgz", + "integrity": "sha512-mZUXF6nUzRWk5J3h41MsPv13ukWlH4jOMSk6astVeoZ1EbdTJyF5I3wxKkvqBAOoVtzLgyEYUvDjrGdcPlKjAw==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/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==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongoose": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.2.0.tgz", + "integrity": "sha512-kimHjks1FC4HkqM4FVNWxtGor6wYelHgl6eJ6GJmmJvMCI4FNGLwFceSL6hs7dHLZJnxIyGVqQjT/XTXCbjzpA==", + "dependencies": { + "bson": "^4.2.2", + "kareem": "2.3.3", + "mongodb": "4.3.1", + "mpath": "0.8.4", + "mquery": "4.0.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "sift": "13.5.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.2.tgz", + "integrity": "sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodeactyl": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/nodeactyl/-/nodeactyl-3.2.2.tgz", + "integrity": "sha512-BIg4Mium2c/3scAX8Oqu87elSiu53brUiPtvA5ZQykfi7iBolL9hBC5BU9f3Nzf7qz+lFismbtlJw9Xa7Hw0Bw==", + "dependencies": { + "axios": "^0.22.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "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==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.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": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/ts-mixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", + "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "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/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/zod": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", + "integrity": "sha512-daZ80A81I3/9lIydI44motWe6n59kRBfNzTuS2bfzVh1nAXi667TOTWWtatxyG+fwgNUiagSj/CWZwRRbevJIg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "requires": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + } + }, + "@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" + }, + "@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", + "requires": { + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@sapphire/async-queue": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz", + "integrity": "sha512-O5ND5Ljpef86X5oy8zXorQ754TMjWALcPSAgPBu4+76HLtDTrNoDyzU2uGE2G4A8Wv51u0MXHzGQ0WZ4GMtpIw==" + }, + "@sapphire/snowflake": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.1.0.tgz", + "integrity": "sha512-K+OiqXSx4clIaXcoaghrCV56zsm3bZZ5SBpgJkgvAKegFFdETMntHviUfypjt8xVleIuDaNyQA4APOIl3BMcxg==" + }, + "@sindresorhus/is": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", + "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/node": { + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" + }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "requires": { + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "axios": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.22.0.tgz", + "integrity": "sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==", + "requires": { + "follow-redirects": "^1.14.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "bson": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.1.tgz", + "integrity": "sha512-I1LQ7Hz5zgwR4QquilLNZwbhPw0Apx7i7X9kGMBTsqPdml/03Q9NBtD9nt/19ahjlphktQImrnderxqpzeVDjw==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "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==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" + }, + "discord-epagination": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/discord-epagination/-/discord-epagination-1.4.5.tgz", + "integrity": "sha512-p3LsetYJmxcG0C2XxaO4q6tZv4vtH1QDmzaqgoAi5kLvUm8gQdsg5vP/TVUj2P3R+/O2nzabiQj4bRXhGQOYng==", + "requires": { + "discord.js": "^13.1.0" + } + }, + "discord.js": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "requires": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@types/node-fetch": "^2.5.12", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", + "node-fetch": "^2.6.1", + "ws": "^8.4.0" + } + }, + "discordjs-button-pagination": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/discordjs-button-pagination/-/discordjs-button-pagination-3.0.1.tgz", + "integrity": "sha512-BsbB/uqu+Rbv8WZrsWI57qZoss9Jgdvba/j45Mrh00Zq8Su6KfOGjaWNKkquBCWFd42Rz3sQBykHK2qJjGl57A==", + "requires": { + "discord.js": "^13.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "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==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "kareem": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", + "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "requires": { + "libsodium": "^0.7.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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==", + "optional": true + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "mongodb": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.3.1.tgz", + "integrity": "sha512-sNa8APSIk+r4x31ZwctKjuPSaeKuvUeNb/fu/3B6dRM02HpEgig7hTHM8A/PJQTlxuC/KFWlDlQjhsk/S43tBg==", + "requires": { + "bson": "^4.6.1", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.4.1", + "saslprep": "^1.0.3", + "socks": "^2.6.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.4.2.tgz", + "integrity": "sha512-mZUXF6nUzRWk5J3h41MsPv13ukWlH4jOMSk6astVeoZ1EbdTJyF5I3wxKkvqBAOoVtzLgyEYUvDjrGdcPlKjAw==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "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==" + }, + "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==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "mongoose": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.2.0.tgz", + "integrity": "sha512-kimHjks1FC4HkqM4FVNWxtGor6wYelHgl6eJ6GJmmJvMCI4FNGLwFceSL6hs7dHLZJnxIyGVqQjT/XTXCbjzpA==", + "requires": { + "bson": "^4.2.2", + "kareem": "2.3.3", + "mongodb": "4.3.1", + "mpath": "0.8.4", + "mquery": "4.0.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "sift": "13.5.2" + } + }, + "mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" + }, + "mquery": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.2.tgz", + "integrity": "sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA==", + "requires": { + "debug": "4.x" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nodeactyl": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/nodeactyl/-/nodeactyl-3.2.2.tgz", + "integrity": "sha512-BIg4Mium2c/3scAX8Oqu87elSiu53brUiPtvA5ZQykfi7iBolL9hBC5BU9f3Nzf7qz+lFismbtlJw9Xa7Hw0Bw==", + "requires": { + "axios": "^0.22.0" + } + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "ts-mixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", + "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "zod": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", + "integrity": "sha512-daZ80A81I3/9lIydI44motWe6n59kRBfNzTuS2bfzVh1nAXi667TOTWWtatxyG+fwgNUiagSj/CWZwRRbevJIg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..136d9e2 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "PteroControl modified by Lenzh", + "version": "v10.1", + "scripts": { + "start": "node index.js", + "server": "nodemon index.js" + }, + "dependencies": { + "@discordjs/rest": "^0.3.0", + "colors": "^1.4.0", + "common-tags": "^1.8.2", + "discord-api-types": "^0.26.1", + "discord-epagination": "^1.4.5", + "discord.js": "^13.6.0", + "discordjs-button-pagination": "^3.0.1", + "dotenv": "^16.0.0", + "libsodium": "^0.7.9", + "libsodium-wrappers": "^0.7.9", + "moment": "^2.29.1", + "mongoose": "^6.2.0", + "nodeactyl": "^3.2.2", + "path": "^0.12.7" + }, + "devDependencies": { + "eslint": "^8.8.0", + "nodemon": "^2.0.15" + } +} diff --git a/settings/config.json b/settings/config.json new file mode 100644 index 0000000..c6ab567 --- /dev/null +++ b/settings/config.json @@ -0,0 +1,6 @@ +{ + "Database": "INSERT_MONGO_HERE", + "TOKEN": "INSERT_TOKEN_HERE", + "inviteSupport": "https://discord.gg/jU4fQvhDCz", + "inviteLink": "https://discord.com/api/oauth2/authorize?client_id=939836646914920488&permissions=8&scope=bot%20applications.commands" + } \ No newline at end of file diff --git a/slscommands/information/help.js b/slscommands/information/help.js new file mode 100644 index 0000000..b8b9e90 --- /dev/null +++ b/slscommands/information/help.js @@ -0,0 +1,290 @@ +const { + MessageEmbed, + Message, + CommandInteraction, + Client, +} = require('discord.js'); +const { + readdirSync, +} = require('fs'); +const { + stripIndent, +} = require('common-tags'); +const color = '#ff0000'; +const moment = require('moment'); + +const create_mh = require('../../handlers/menu.js'); +module.exports = { + name: 'help', + usage: '/help', // This is how you set the usage for the command. + description: 'Shows all available bot commands', + options: [{ + name: 'command', + description: 'Enter the command or category that you want to get help with.', + required: false, + type: 'STRING', + }], + + run: async (client, interaction) => { + const helpcmd = interaction.options.getString('command'); + const mbr = interaction.user.tag; + + const categories = []; + const cots = []; + + if (!helpcmd) { + const ignored = ['the ingored commands']; + const emo = { + information: '❔', + }; + + const ccate = []; + readdirSync('./slscommands/').forEach((dir) => { + if (ignored.includes(dir.toLowerCase())) return; + const commands = readdirSync(`./slscommands/${dir}/`).filter((file) => + file.endsWith('.js'), + ); + + if (ignored.includes(dir.toLowerCase())) return; + + const name = `${emo[dir]} - ${dir}`; + const nome = dir.toUpperCase(); + + let cats = new Object(); + cats = { + name: name, + value: `\`/help ${dir.toLowerCase()}\``, + inline: true, + }; + + categories.push(cats); + ccate.push(nome); + }); + + const description = stripIndent ` + Use The Drop Down Menu Or Follow Given Commands Bellow + You Can Also Type /help [command] + `; + const embed = new MessageEmbed() + .setTitle('Bot Commands') + .setDescription(`\`\`\`asciidoc\n${description}\`\`\``) + .addFields(categories) + .setFooter({ + text: `Requested by ${mbr} | Sponsored By ScarceHost.uk`, + iconURL: interaction.user.displayAvatarURL({ + dynamic: true, + }), + }) + .setTimestamp() + .setColor(color); + + const menus = create_mh(ccate); + + return await interaction.reply({ + embeds: [embed], + components: menus.smenu, + fetchReply: true, + ephemeral: true, + }).then(async (interactionn) => { + const menuID = menus.sid; + + const select = async (interaction) => { + if (interaction.customId != menuID) return; + + const { + values, + } = interaction; + + const value = values[0]; + + const catts = []; + + readdirSync('./slscommands/').forEach((dir) => { + if (dir.toLowerCase() !== value.toLowerCase()) return; + const commands = readdirSync(`./slscommands/${dir}/`).filter( + (file) => file.endsWith('.js'), + ); + const cmds = commands.map((command) => { + const file = require(`../../slscommands/${dir}/${command}`); + + if (!file.name) return 'No command name.'; + + const name = file.name.replace('.js', ''); + + if (client.slashCommands.get(name).hidden) return; + + const des = client.slashCommands.get(name).description; + let usg = client.slashCommands.get(name).usage; + if (!usg) { + usg = 'No usage provided'; + } + const emo = client.slashCommands.get(name).emoji; + const emoe = emo ? `${emo} - ` : ''; + + const obj = { + cname: `${emoe}\`${name}\` | **${usg}**`, + des, + }; + + return obj; + }); + + let dota = new Object(); + + cmds.map((co) => { + if (co == undefined) return; + + dota = { + name: `${cmds.length === 0 ? 'In progress.' : co.cname}`, + value: co.des ? co.des : 'No Description', + inline: true, + }; + catts.push(dota); + }); + + cots.push(dir.toLowerCase()); + }); + + if (cots.includes(value.toLowerCase())) { + const combed = new MessageEmbed() + .setTitle( + `__${ + value.charAt(0).toUpperCase() + value.slice(1) + } Commands__`, + ) + .setDescription( + 'Use `/help` followed by a command name to get more information on a command.\nFor example: `/help botinfo`.\n\n', + ) + .addFields(catts) + .setColor(color); + + await interaction.deferUpdate(); + + return interaction.editReply({ + embeds: [combed], + components: menus.smenu, + }); + } + }; + const filter = (interaction) => { + return ( + !interaction.user.bot && + interaction.user.id == interaction.member.id + ); + }; + + const collector = interactionn.createMessageComponentCollector({ + filter, + componentType: 'SELECT_MENU', + }); + collector.on('collect', select); + collector.on('end', () => null); + }); + } else { + const catts = []; + + readdirSync('./slscommands/').forEach((dir) => { + if (dir.toLowerCase() !== helpcmd.toLowerCase()) return; + const commands = readdirSync(`./slscommands/${dir}/`).filter((file) => + file.endsWith('.js'), + ); + + const cmds = commands.map((command) => { + const file = require(`../../slscommands/${dir}/${command}`); + if (!file.name) return 'No command name.'; + const name = file.name.replace('.js', ''); + if (client.slashCommands.get(name).hidden) return; + let usg = client.slashCommands.get(name).usage; + if (!usg) { + usg = 'No usage provided'; + } + + const des = client.slashCommands.get(name).description; + const emo = client.slashCommands.get(name).emoji; + const emoe = emo ? `${emo} - ` : ''; + const obj = { + cname: `${emoe}\`${name}\` | **${usg}**`, + des, + }; + return obj; + }); + let dota = new Object(); + cmds.map((co) => { + if (co == undefined) return; + dota = { + name: `${cmds.length === 0 ? 'In progress.' : co.cname}`, + value: co.des ? co.des : 'No Description', + inline: true, + }; + catts.push(dota); + }); + + cots.push(dir.toLowerCase()); + }); + + const command = client.slashCommands.get(helpcmd.toLowerCase()); + + if (cots.includes(helpcmd.toLowerCase())) { + const combed = new MessageEmbed() + .setTitle( + `__${ + helpcmd.charAt(0).toUpperCase() + helpcmd.slice(1) + } Commands__`, + ) + .setDescription( + 'Use `/help` followed by a command name to get more information on a command.\nFor example: `/help dt`.\n\n', + ) + .addFields(catts) + .setColor(color); + + return interaction.reply({ + embeds: [combed], + ephemeral: true, + }); + } + + if (!command) { + const embed = new MessageEmbed() + .setTitle('Invalid command! Make sure you didn\'t use spaces. Use `/help` for all of my commands.') + .setColor('RED'); + return await interaction.reply({ + embeds: [embed], + ephemeral: true, + allowedMentions: { + repliedUser: false, + }, + }); + } + const embed = new MessageEmbed() + .setTitle('Command Details:') + .addField( + 'Command:', + command.name ? `\`${command.name}\`` : 'No name for this command.', + ) + .addField( + 'Usage:', + command.usage ? + `\`${command.usage}\`` : + `\`/${command.name}\``, + ) + .addField( + 'Command Description:', + command.description ? + command.description : + 'No description for this command.', + ) + .setFooter({ + text: `Requested by ${mbr}`, + iconURL: interaction.user.displayAvatarURL({ + dynamic: true, + }), + }) + .setTimestamp() + .setColor(color); + return await interaction.reply({ + embeds: [embed], + ephemeral: true, + }); + } + }, +}; \ No newline at end of file diff --git a/slscommands/information/info.js b/slscommands/information/info.js new file mode 100644 index 0000000..86cf9e1 --- /dev/null +++ b/slscommands/information/info.js @@ -0,0 +1,59 @@ +const { + CommandInteraction, + Client, + MessageEmbed, + MessageButton, + MessageActionRow +} = require("discord.js"); +const config = require('../../settings/config.json'); + + +module.exports = { + name: "info", + description: "Server information", + usage: '/info', + /** + * + * @param {Client} client + * @param {CommandInteraction} interaction + * @param {String[]} args + */ + run: async (client, interaction, args) => { + let totalSeconds = client.uptime / 1000; + let days = Math.floor(totalSeconds / 86400); + totalSeconds %= 86400; + let hours = Math.floor(totalSeconds / 3600); + totalSeconds %= 3600; + let minutes = Math.floor(totalSeconds / 60); + let seconds = Math.floor(totalSeconds % 60); + + let uptime = `${days} days, ${hours} hours, ${minutes} minutes and ${seconds} seconds`; + + let button = new MessageButton() + .setLabel("Support Server") + .setStyle("LINK") + .setURL(config.inviteSupport); + let button1 = new MessageButton() + .setLabel("Invite Bot") + .setStyle("LINK") + .setURL( + config.inviteLink + ); + let row = new MessageActionRow().addComponents(button, button1); + let helpEmbed = new MessageEmbed() + .setColor("E5BE11") + .setTitle("PteroControl | Information") + .setThumbnail(client.user.avatarURL()) + .setDescription( + `**Ping** : ${client.ws.ping}ms\n**Uptime** : ${uptime}\n\nSponsored By:\n\[ScarceHost.uk](https://ScarceHost.uk)\`` + ) + .setFooter({ + text: `(C) 2022 PteroControl Client | For Pterodactyl V1.x | Sponsored By ScarceHost.uk` + }); + interaction.reply({ + embeds: [helpEmbed], + components: [row] + }); + + }, +}; \ No newline at end of file diff --git a/slscommands/information/invite.js b/slscommands/information/invite.js new file mode 100644 index 0000000..43bbff4 --- /dev/null +++ b/slscommands/information/invite.js @@ -0,0 +1,43 @@ +const { + CommandInteraction, + Client, + MessageEmbed, + MessageButton, + MessageActionRow +} = require("discord.js"); +const config = require('../../settings/config.json'); +module.exports = { + name: "invite", + description: "invite the bot", + usage: '/invite', + + /** + * + * @param {Client} client + * @param {CommandInteraction} interaction + * @param {String[]} args + */ + run: async (client, interaction, args) => { + let embed = new MessageEmbed() + .setDescription("You can invite this bot by pressing the invite button") + .setColor("E5BE11") + .setTitle("PteroControl | Information") + .setThumbnail(client.user.avatarURL()) + .setFooter({ + text: `PteroControl For Pterodactyl V1.x | Sponsored By ScarceHost.uk` + }); + + let button = new MessageButton() + .setLabel("Invite Bot") + .setStyle("LINK") + .setURL( + config.inviteLink + ); + let row = new MessageActionRow().addComponents(button); + + interaction.reply({ + embeds: [embed], + components: [row] + }); + }, +}; \ No newline at end of file diff --git a/slscommands/information/tutorial.js b/slscommands/information/tutorial.js new file mode 100644 index 0000000..e1d8294 --- /dev/null +++ b/slscommands/information/tutorial.js @@ -0,0 +1,230 @@ +const { + CommandInteraction, + Client, + MessageEmbed, + MessageButton +} = require("discord.js"); +const { + createSlider +} = require("discord-epagination"); +const paginationEmbed = require('discordjs-button-pagination'); +const prefix = require('../../models/prefix'); + +module.exports = { + name: "tutorial", + description: "tutorial of the bot", + usage: '/tutorial', + + /** + * + * @param {Client} client + * @param {CommandInteraction} interaction + * @param {String[]} args + */ + run: async (client, interaction, args) => { + let gprefix = "/"; + + if (interaction.channel.type !== "dm") { + //DMS + + const button1 = new MessageButton() + .setCustomId('previousbtn') + .setLabel('Previous') + .setStyle('DANGER'); + + const button2 = new MessageButton() + .setCustomId('nextbtn') + .setLabel('Next') + .setStyle('SUCCESS'); + + let embed0 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 1") + .setColor("E5BE11") + .setDescription("Go to your Hosting Panel and copy the Panel URL/LINK") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870935938413494302/Screenshot_2021-07-31-14-14-00-45.jpg" + ); + + let embed1 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 2") + .setColor("E5BE11") + .setDescription("Go to Profile button on the top right") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870929432846671932/20210731_142210.jpg" + ); + + let embed2 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 3") + .setColor("E5BE11") + .setDescription("Go to API Credentials button on the top left") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870929432595009576/20210731_142103.jpg" + ); + + let embed3 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 4") + .setColor("E5BE11") + .setDescription( + "Fill the description anything you want and press create, you don't need to fill Allowed Ips" + ) + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870929432095911946/20210731_142012.jpg" + ); + + let embed4 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 5") + .setColor("E5BE11") + .setDescription("Copy the Panel ApiKey that just appear on your screen") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870929431848435762/20210731_141910.jpg" + ); + + let embed5 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 6") + .setColor("E5BE11") + .setDescription( + "Type `" + + gprefix + + "control`, select register button or register new panel menu, and check your dms" + ) + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870929906182258728/20210731_142350.jpg" + ); + + let embed6 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 7") + .setColor("E5BE11") + .setDescription("Type your Panel URL/LINK") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870931067849302066/IMG_20210731_142808.jpg" + ); + + let embed7 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 8") + .setColor("E5BE11") + .setDescription("Paste your Panel ApiKey") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870931068084191272/IMG_20210731_142820.jpg" + ); + + let embed8 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 9") + .setColor("E5BE11") + .setDescription("Type the Panel name") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870931068407136296/IMG_20210731_142835.jpg" + ); + + let embed9 = new MessageEmbed() + .setTitle("PteroControl | Tutorial Step 10") + .setColor("E5BE11") + .setDescription( + "Type `" + + gprefix + + "control` again and select your server the the button name" + ) + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870931249169055795/Screenshot_2021-07-31-14-29-47-46_572064f74bd5f9fa804b05334aa4f912.jpg" + ); + + let embed10 = new MessageEmbed() + .setTitle("PteroControl | Tutorial End") + .setColor("E5BE11") + .setDescription("Thank you for using PteroControl, have fun!") + .setImage( + "https://media.discordapp.net/attachments/796243715014131714/870932824046338089/20210731_143542.jpg" + ); + pages = [ + embed0, + embed1, + embed2, + embed3, + embed4, + embed5, + embed6, + embed7, + embed8, + embed9, + embed10, + ]; + + buttonList = [ + button1, + button2, + ] + + paginationEmbed(interaction, pages, buttonList); + // createSlider({ + // message: interaction, + // embeds: [ + // embed0, + // embed1, + // embed2, + // embed3, + // embed4, + // embed5, + // embed6, + // embed7, + // embed8, + // embed9, + // embed10 + // ], + // otherButtons: { + // // First page button + // firstButton: { + // enabled: false, + // // Make the button behind the back and foward buttons. [..., "previous", "next"] + // position: 0, + // }, + // // Last page button + // lastButton: { + // enabled: false, + // // Make the button in front of the back and foward buttons. ["first", "previous", "next", ...] + // position: 3, + // }, + // // Delete button + // deleteButton: { + // enabled: true, + // // Make the button in the middle of all the buttons. ["first", "previous", ... , "next", "last"] + // position: 1, + // }, + // }, + // + // buttons: [ + // // Customization for the back button + // { + // name: "back", + // emoji: "◀", + // style: "PRIMARY" + // }, + // // Customization for the foward button + // { + // name: "foward", + // emoji: "▶", + // style: "PRIMARY" + // }, + // // Customization for the first page button + // { + // name: "first", + // emoji: "⏪", + // style: "PRIMARY" + // }, + // // Customization for the last page button + // { + // name: "last", + // emoji: "⏩", + // style: "PRIMARY" + // }, + // // Customization for the delete button + // { + // name: "delete", + // emoji: "❌", + // style: "DANGER" + // }, + // ], + // time: 120000, + // }); + + } + }, +}; \ No newline at end of file diff --git a/slscommands/setup/admin.js b/slscommands/setup/admin.js new file mode 100644 index 0000000..f517776 --- /dev/null +++ b/slscommands/setup/admin.js @@ -0,0 +1,1174 @@ +const { + CommandInteraction, + Client, + MessageEmbed, + MessageButton, + MessageActionRow, + MessageSelectOption, + MessageSelectMenu, + MessageSelectOptionData +} = require("discord.js"); +const admin = require('../../models/admin') +const node = require("nodeactyl"); +const wait = require("util").promisify(setTimeout); +const config = require('../../settings/config.json') + + +module.exports = { + name: "admin", + description: "description", + usage: 'admin', + permissions: ["MANAGE_MESSAGES"], + + /** + * + * @param {Client} client + * @param {CommandInteraction} interaction + * @param {String[]} args + */ + run: async (client, interaction, args) => { + let panelURL; + let panelAPI; + let panelNAME; + + let panelTitle = "PteroControl | Panel Management"; + let footer = "PteroControl For Pterodactyl 1.x | Sponsored By [ScarceHost.uk]"; + let color = "E5BE11"; + let thumbnail = interaction.user.avatarURL(); + const id = interaction.user.id; + + if (id !== "139466122171908096") + return interaction.channel.send( + "This command are on **Working In Progress** only bot owner can access it for now!" + ); + + const Support = new MessageButton() + .setLabel("Support") + .setStyle("LINK") + .setURL(config.inviteSupport); + + const errorDB = new MessageEmbed() + .setDescription( + "We are currently experiencing some downtime with our database provider. It is expected to be resolved within the next 30 minutes. Sorry for any inconvenience caused!" + ) + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail); + + const close = new MessageButton() + .setLabel("Close") + .setStyle("DANGER") + .setCustomId("close"); + + const closeEmbed = new MessageEmbed() + .setDescription("Proccess Cancelled") + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail); + + const loading = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription("Processing Requests"); + + const embedExit = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Panel with that name are already exist in your discord account, please use other name" + ); + + admin + .find({ + ids: id, + }) + .then((panels) => { + const noPanel = new MessageEmbed() + .setDescription( + "You currently dont have a panel linked to our API. You can click register button to register one. All you need is the panel URL and a Client API Key!" + ) + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail); + + const register = new MessageButton() + .setLabel("Register new panel") + .setStyle("SUCCESS") + .setCustomId("register"); + + const registerRow = new MessageActionRow().addComponents( + register, + Support + ); + + const reSucess = new MessageEmbed() + .setColor(color) + .setThumbnail(thumbnail) + .setFooter({ + text: footer + }) + .setDescription( + "Your panel has been successfully registered on our api. You can now access it via the panel menu\n\n[Join our support server (Click Me)](https://discord.gg/jU4fQvhDCz)" + ); + + const reEmbed = new MessageEmbed() + .setColor(color) + .setFooter({ + text: footer + }) + .setImage( + "https://cdn.glitch.com/b0cc99ff-cc1d-46a0-8146-a13e39873cd9%2F20210625_111805.jpg?v=1624612831266" + ); + + const reName = new MessageEmbed() + .setFooter({ + text: footer + }) + .setColor(color) + .setDescription( + "Now enter a name that will be used for multi panels **(Any value)**" + ); + + const reUrl = new MessageEmbed() + .setFooter({ + text: footer + }) + .setColor(color) + .setDescription( + "Please send your panel url. Example: **(https://panel.scarcehost.uk)**" + ); + + const reApi = new MessageEmbed() + .setFooter({ + text: footer + }) + .setColor(color) + .setDescription( + "Please send your client api key. Example: `h9eVJyejq3d97yQfuY55CxSWs73u9lC9gFfW0FutBR9hNfw`\n\nRemember to use `Client Api key` and not `Admin Api key`" + ); + + const reDm = new MessageEmbed() + .setColor(color) + .setTitle(panelTitle) + .setThumbnail(thumbnail) + .setFooter({ + text: footer + }) + .setDescription( + "For privacy precautions, the requested action will take place in your DMS. Please ensure that you are allowed to received DMS from this server" + ); + + if (panels.length < 1) + interaction.channel + .send({ + embeds: [noPanel], + components: [registerRow] + }) + .then((remsg) => { + const filter = i => { + i.deferUpdate(); + return i.user.id === interaction.user.id; + } + + const Registercollector = remsg.createMessageComponentCollector({ + filter, + componentType: 'BUTTON', + time: 30000, + }); + + Registercollector.on("collect", i => { + + if (i.customId === "register") { + remsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])] + }); + + i.user.send({ + embeds: [reEmbed], + }).then((m) => { + // console.log(`IntID: ${interaction.user.id}\n mID: ${m.author.id}\n\n ${i.user.id}`); + let c = m.channel; + + c.send({ + embeds: [reUrl] + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + }) + .then(async (collected) => { + + console.log(collected.first()); + panelURL = collected.first().content; + console.log(panelURL); + }) + .then(async function() { + await c.send({ + embeds: [reApi] + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + }) + .then(async (collected) => { + panelAPI = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reName] + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + }).then(async (collected) => { + panelNAME = collected.first().content; + if (panelNAME.length > 100) + return c.send( + "Please keep the character limit to 25" + ); + admin + .find({ + ids: id, + NAME: panelNAME.trim(), + }) + .then((exit) => { + if (exit.length > 0) + return c.send({ + embeds: [embedExit] + }); + }) + .catch((error) => { + console.log(error); + c.send({ + embeds: [errorDB] + }); + }); + try { + const npanel = new admin({ + ids: id, + API: panelAPI.trim(), + URL: panelURL.trim(), + NAME: panelNAME.trim(), + }); + await npanel.save(); + c.send({ + embeds: [reSucess] + }); + } catch (error) { + console.log(error); + c.send({ + embeds: [errorDB] + }); + } + }); + }); + }); + }); + }); + }); + }); + } + }); + }); + + if (panels.length < 1) return; + + let panelist; + let options = []; + + // const reMenu = new MessageSelectMenu() + // .setCustomId('reMenu') + // .addOptions([{ + // label: 'Register new panel', + // description: 'Select this to register new panel', + // value: 'register', + // }]); + // + // const closeMenu = new MessageSelectMenu() + // .setCustomId('closeMenu') + // .addOptions([{ + // label: 'Close', + // description: 'Select this to close the menu', + // value: 'close', + // }]); + // + // options.push(reMenu); + // options.push(closeMenu); + panels.forEach((data) => { + const option = new MessageSelectMenu() + .setCustomId('auto_panels') + .addOptions([{ + label: data.NAME, + description: 'Select to manage panel', + value: data.NAME, + }, + { + label: 'Register new panel', + description: 'Select this to register new panel', + value: 'register', + }, + { + label: 'Close', + description: 'Select this to close the menu', + value: 'close', + } + ]); + + options.push(option); + + if (!panelist) return (panelist = "**" + data.NAME + "**\n"); + panelist = panelist + "**" + data.NAME + "**\n"; + }); + + const panelEmbed = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription("Please select a panel to manage\n\n" + panelist); + + const panelMenu = new MessageActionRow().addComponents(options); + + interaction.channel + .send({ + embeds: [panelEmbed], + components: [panelMenu] + }) + .then((panelmsg) => { + const filter = i => { + i.deferUpdate(); + return i.user.id === interaction.user.id; + } + const Panelcollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + }); + Panelcollector.on("collect", async (m) => { + if (m.values[0] === "close") { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [] + }) + .then((msg) => { + msg.delete({ + timeout: 5000 + }); + }); + } + if (m.values[0] === "register") { + panelmsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])], + }); + m.user.send({ + embeds: [reEmbed] + }).then((m) => { + let c = m.channel; + + c.send({ + embeds: [reUrl] + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + }) + .then(async (collected) => { + panelURL = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reApi] + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + panelAPI = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reName] + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }).then(async (collected) => { + panelNAME = collected.first().content; + if (panelNAME.length > 100) + return c.send( + "Please keep the character limit to 25" + ); + admin + .find({ + ids: id, + NAME: panelNAME.trim(), + }) + .then((exit) => { + if (exit.length > 0) + return c.send({ + embeds: [embedExit] + }); + }) + .catch((error) => { + console.log(error); + c.send({ + embeds: [errorDB] + }); + }); + try { + const npanel = new admin({ + ids: id, + API: panelAPI.trim(), + URL: panelURL.trim(), + NAME: panelNAME.trim(), + }); + await npanel.save(); + c.send({ + embeds: [reSucess] + }); + } catch (error) { + console.log(error); + c.send({ + embeds: [errorDB] + }); + } + }); + }); + }); + }); + }); + }); + }); + } else { + await panelmsg.edit({ + embeds: [loading], + components: [] + }); + await wait(1500); + admin + .find({ + ids: id, + NAME: m.values[0], + }) + .then((fpanel) => { + + const Admin = new node.NodeactylApplication( + fpanel[0].URL, + fpanel[0].API + ); + const panelManage = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription( + "Hey, what do you want to do with this panel:\n" + m.values[0] + ); + + const pManage = new MessageButton() + .setLabel("Manage Panel") + .setStyle("PRIMARY") + .setCustomId("pManage"); + + const pUrl = new MessageButton() + .setLabel("URL") + .setStyle("PRIMARY") + .setCustomId("pUrl"); + + const manageServers = new MessageButton() + .setLabel("Servers") + .setStyle("PRIMARY") + .setCustomId("servers"); + + const manageNodes = new MessageButton() + .setLabel("Nodes") + .setStyle("PRIMARY") + .setCustomId("nodes"); + + const manageEggs = new MessageButton() + .setLabel("Eggs and Nests") + .setStyle("PRIMARY") + .setCustomId("eggs"); + + const manageUsers = new MessageButton() + .setLabel("Users") + .setStyle("PRIMARY") + .setCustomId("users"); + + const pDelete = new MessageButton() + .setLabel("Delete") + .setStyle("DANGER") + .setCustomId("pDelete"); + + const pEdit = new MessageButton() + .setLabel("Edit") + .setStyle("PRIMARY") + .setCustomId("pEdit"); + + const pManageRow = new MessageActionRow().addComponents( + pManage, + pEdit, + pUrl, + pDelete, + close + ); + const manageRow = new MessageActionRow().addComponents( + manageServers, + manageUsers, + manageNodes, + manageEggs, + close + ); + + panelmsg.edit({ + embeds: [panelManage], + components: [pManageRow], + }); + + Panelcollector.stop(); + const panelManageCollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + }, ); + + panelManageCollector.on("collect", async (pm) => { + if (pm.customId === "close") { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [] + }) + .then((msg) => { + msg.delete({ + timeout: 5000 + }); + }); + } + if (pm.customId === "pEdit") { + const embedEdit = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Please select which one you want to edit" + ); + + const updated = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription(fpanel[0].NAME + " updated!"); + + const editName = new MessageButton() + .setLabel("Name") + .setStyle("PRIMARY") + .setCustomId("ename"); + + const editUrl = new MessageButton() + .setLabel("Url/Link") + .setStyle("PRIMARY") + .setCustomId("eurl"); + + const editApi = new MessageButton() + .setLabel("Apikey") + .setStyle("PRIMARY") + .setCustomId("ekey"); + + const editRows = new MessageActionRow().addComponents( + editName, + editUrl, + editApi + ); + + panelmsg.edit({ + embeds: [embedEdit], + components: [editRows] + }); + + const EditManageCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + }); + + EditManageCollector.on("collect", async (ep) => { + if (ep.customId === "ename") { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Set a new Name for your panel" + ); + + panelmsg.edit({ + embeds: [editm], + components: [] + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + let newcontent = collected.first().content.trim(); + + admin + .find({ + ids: id, + NAME: newcontent, + }) + .then((exit) => { + if (exit.length > 0) + return panelmsg.edit(embedExit); + collected.first().delete(); + }) + .catch((error) => { + console.log(error); + panelmsg.edit({ + embeds: [errorDB] + }); + collected.first().delete(); + }); + + admin + .findOneAndUpdate({ + ids: id, + NAME: m.values[0], + }, { + NAME: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + }) + .catch((Error) => { + console.log(Error); + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + }); + }) + .catch((error) => { + interaction.channel.send("Sorry I didn't recieved a reply"); + }); + } + if (ep.customId === "eurl") { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Please send the new panel url" + ); + + panelmsg.edit({ + embeds: [editm], + components: [] + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + let newcontent = collected.first().content.trim(); + + admin + .findOneAndUpdate({ + ids: id, + NAME: m.values[0], + }, { + URL: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + collected.first().delete(); + }) + .catch((Error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + collected.first().delete(); + }); + }) + .catch((error) => { + interaction.channel.send("Sorry I didn't recieved a reply"); + }); + } + if (ep.customId === "eapi") { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Please send the new API for this panel" + ); + + panelmsg.edit({ + embeds: [editm], + components: [] + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + let newcontent = collected.first().content.trim(); + + admin + .findOneAndUpdate({ + ids: id, + NAME: m.values[0], + }, { + API: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + collected.first().delete(); + }) + .catch((Error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + collected.first().delete(); + }); + }) + .catch((error) => { + interaction.channel.send("Sorry I didn't recieved a reply"); + }); + } + }); + } + if (pm.customId === "pUrl") { + const embedUrl = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription("Your panel url is " + fpanel[0].URL); + + panelmsg.delete(); + pm.channel.send({ + embeds: [embedUrl], + ephemeral: true + }); + } + if (pm.customId === "pDelete") { + const pDelEmbed = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription( + "Panel succesfully deleted from our databases" + ); + + admin + .deleteOne({ + ids: id, + NAME: m.values[0], + }) + .then((res) => { + panelmsg + .edit({ + embeds: [pDelEmbed], + components: [] + }) + .then((msg) => { + msg.delete({ + timeout: 5000 + }); + }); + }) + .catch((error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [] + }); + }); + } + if (pm.customId === "pManage") { + await panelmsg.edit({ + embeds: [loading], + components: [] + }); + await wait(1500); + + const manageEmbed = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription("Which options you want to manage?"); + panelmsg.edit({ + embeds: [manageEmbed], + components: [manageRow], + }); + + const manageCollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000 + }); + + manageCollector.on("collect", async (mc) => { + if (mc.customId === "nodes") {} + if (mc.customId === "eggs") { + let temp; + axios( + fpanel[0].URL + + "api/application/nests?include=eggs", { + method: "GET", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + Authorization: "Bearer " + fpanel[0].API, + }, + } + ).then((nests) => { + nests.data.data.forEach((nest) => { + if (!temp) { + temp = + "** " + nest.name + "**[`" + nest.id + "`]\n"; + nest.attributes.relationships.eggs.data.forEach( + (egg) => { + if ( + nest.attributes.relationships.eggs.data + .length === 0 || + !temp + ) + return (temp = "-\n"); + if ( + nest.attributes.relationships.eggs.data + .length === 0 + ) + return (temp = temp + "-\n"); + if (!temp) + return (temp = + "- ** " + + egg.attributes.name + + "**[`" + + egg.attributes.id + + "`]\n"); + temp = + temp + + "- ** " + + egg.attributes.name + + "**[`" + + egg.attributes.id + + "`]\n"; + } + ); + return; + } else { + temp = + temp + + "** " + + egg.attributes.name + + "**[`" + + egg.attributes.id + + "`]\n"; + nest.attributes.relationships.eggs.data.forEach( + (egg) => { + if ( + nest.attributes.relationships.eggs.data + .length === 0 || + !temp + ) + return (temp = "-\n"); + if ( + nest.attributes.relationships.eggs.data + .length === 0 + ) + return (temp = temp + "-\n"); + if (!temp) + return (temp = + "- ** " + + egg.attributes.name + + "**[`" + + egg.attributes.id + + "`]\n"); + temp = + temp + + "- ** " + + egg.attributes.name + + "**[`" + + egg.attributes.id + + "`]\n"; + } + ); + } + }); + const embed = new MessageEmbed() + .setTitle(data.name + " > Eggs Management") + .setFooter( + "PteroAdmin (beta) For Pterodactyl 1.x" + ) + .setThumbnail(client.user.avatarURL()) + .setColor("E5BE11") + .setDescription(temp); + m.edit({ + content: '', + embeds: [embed], + components: [], + }); + }); + } + const createdDone = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription("Successfully created"); + + const actionCreate = new MessageButton() + .setLabel("Create") + .setStyle("PRIMARY") + .setCustomId("create"); + + const actionDelete = new MessageButton() + .setLabel("Delete") + .setStyle("DANGER") + .setCustomId("delete"); + + const actionEdit = new MessageButton() + .setLabel("Edit") + .setStyle("PRIMARY") + .setCustomId("edit"); + + const ManageRow = new MessageActionRow().addComponents( + actionCreate, + actionEdit, + actionDelete, + close + ); + + if (mc.customId === "users") { + const usersManage = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "What you want to do with users management?" + ); + + panelmsg.edit({ + embeds: [usersManage], + components: ManageRow, + }); + + const actionsCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + }); + + actionsCollector.on("collect", async (uc) => { + if (uc.customId === "close") { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [] + }) + .then((msg) => { + msg.delete({ + timeout: 5000 + }); + }); + } + if (uc.customId === "create") { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "Please send what the user name for this user" + ); + + panelmsg.edit({ + embeds: [editm], + components: [] + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + let name = collected.first().content.trim(); + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000 + }) + .then(async (collected) => { + let email = collected + .first() + .content.trim(); + + Admin.createUser( + name, + email, + name, + name + ).then((created) => { + panelmsg.edit({ + embeds: [createdDone], + components: [null], + }); + }); + }) + .catch((error) => { + interaction.channel.send("Sorry I didn't recieved a reply"); + }); + }) + .catch((error) => { + interaction.channel.send("Sorry I didn't recieved a reply"); + }); + } + if (uc.customId === "edit") {} + if (uc.customId === "delete") {} + }); + } + if (mc.customId === "servers") { + const serversManage = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + "What you want to do with servers management?" + ); + + panelmsg.edit({ + embeds: [serversManage], + components: [ManageRow], + }); + + const actionsCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + }); + + actionsCollector.on("collect", (uc) => { + if (uc.customId === "close") { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [] + }) + .then((msg) => { + msg.delete({ + timeout: 5000 + }); + }); + } + }); + } + }); + } + }); + }); + } + }); + }); + }) + .catch((error) => { + console.log(error); + interaction.channel.send(errorDB); + }); + }, +}; \ No newline at end of file diff --git a/slscommands/setup/control.js b/slscommands/setup/control.js new file mode 100644 index 0000000..3e7fd45 --- /dev/null +++ b/slscommands/setup/control.js @@ -0,0 +1,2714 @@ +const { + CommandInteraction, + Client, + MessageEmbed, + MessageButton, + MessageActionRow, + MessageSelectOption, + MessageSelectMenu, + MessageSelectOptionData, +} = require('discord.js'); +const panel = require('../../models/panel'); +const node = require('nodeactyl'); +const wait = require('util').promisify(setTimeout); +const config = require('../../settings/config.json'); + +module.exports = { + name: 'control', + description: 'control your panel', + permissions: [' '], + usage: '/control', + /** + * + * @param {Client} client + * @param {CommandInteraction} interaction + * @param {String[]} args + */ + run: async (client, interaction) => { + let panelURL; + let panelAPI; + let panelNAME; + const panelTitle = 'PteroControl | Panel Management'; + const serverTitle = 'PteroControl | Server Management'; + const accountTitle = 'PteroControl | Account Management'; + const footer = 'PteroControl For Pterodactyl 1.x | Sponsored By ScarceHost.uk'; + const color = 'E5BE11'; + const thumbnail = client.user.avatarURL(); + const id = interaction.user.id; + + const Support = new MessageButton() + .setLabel('Support') + .setStyle('LINK') + .setURL(config.inviteSupport); + + const errorDB = new MessageEmbed() + .setDescription( + 'We are currently experiencing some downtime with our database provider. It is expected to be resolved within the next 30 minutes. Sorry for any inconvenience caused!', + ) + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail); + + const close = new MessageButton() + .setLabel('Close') + .setStyle('DANGER') + .setCustomId('close'); + + const closeEmbed = new MessageEmbed() + .setDescription('Proccess Cancelled') + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail); + + const loading = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription('Processing Requests'); + + const embedExit = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Panel with that name are already exist in your discord account, please use other name', + ); + + + panel + .find({ + ID: id, + }) + .then((panels) => { + const noPanel = new MessageEmbed() + .setDescription( + 'You currently dont have a panel linked to our API. You can click register button to register one. All you need is the panel URL and a Client API Key!', + ) + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail); + + const register = new MessageButton() + .setLabel('Register new panel') + .setStyle('SUCCESS') + .setCustomId('register'); + + const registerRow = new MessageActionRow().addComponents( + register, + Support, + ); + + const reSucess = new MessageEmbed() + .setColor(color) + .setThumbnail(thumbnail) + .setFooter({ + text: footer, + }) + .setDescription( + 'Your panel has been successfully registered on our api. You can now access it via the panel menu\n\n[Join our support server (Click Me)](https://discord.gg/jU4fQvhDCz)', + ); + + const reEmbed = new MessageEmbed() + .setColor(color) + .setFooter({ + text: footer, + }) + .setImage( + 'https://cdn.glitch.com/b0cc99ff-cc1d-46a0-8146-a13e39873cd9%2F20210625_111805.jpg?v=1624612831266', + ); + + const reName = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Now enter a name that will be used for multi panels **(Any value)**', + ); + + const reUrl = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Please send your panel url. Example: **(https://panel.scarcehost.uk)**', + ); + + const reApi = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Please send your client api key. Example: `h9eVJyejq3d97yQfuY55CxSWs73u9lC9gFfW0FutBR9hNfw`\n\nRemember to use `Client Api key` and not `Admin Api key`', + ); + + const reDm = new MessageEmbed() + .setColor(color) + .setTitle(panelTitle) + .setThumbnail(thumbnail) + .setFooter({ + text: footer, + }) + .setDescription( + 'For privacy precautions, the requested action will take place in your DMS. Please ensure that you are allowed to received DMS from this server', + ); + + const timesUp = new MessageEmbed() + .setColor(color) + .setTitle(panelTitle) + .setThumbnail(thumbnail) + .setFooter({ + text: footer, + }) + .setDescription('I havent recieved a input from you'); + + if (panels.length < 1) { + interaction.channel + .send({ + embeds: [noPanel], + components: [registerRow], + }) + .then((remsg) => { + const filter = i => { + i.deferUpdate(); + return i.user.id === interaction.user.id; + }; + const Registercollector = remsg.createMessageComponentCollector({ + filter, + componentType: 'BUTTON', + time: 30000, + errors: ['time'] + }); + + Registercollector.on('collect', (i) => { + if (i.customId === 'register') { + remsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])], + }); + i.user.send({ + embeds: [reEmbed], + }).then((m) => { + const c = m.channel; + + c.send({ + embeds: [reUrl], + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + panelURL = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reApi], + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + panelAPI = collected.first().content; + + }) + .then(async function() { + await c.send({ + embeds: [reName], + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }).then(async (collected) => { + panelNAME = collected.first().content; + if (panelNAME.length > 100) { + return c.send( + 'Please keep the character limit to 25', + ); + } + panel + .find({ + ID: id, + NAME: panelNAME.trim(), + }).catch(() => c.send({ + embeds: [timesUp], + })) + .then((exit) => { + if (exit.length > 0) { + return c.send({ + embeds: [embedExit], + }); + } + }) + .catch((error) => { + console.log(error); + c.send({ + embeds: [errorDB], + }); + }); + try { + const npanel = new panel({ + ID: id, + API: panelAPI.trim(), + URL: panelURL.trim(), + NAME: panelNAME.trim(), + }); + await npanel.save(); + c.send({ + embeds: [reSucess], + }); + } catch (error) { + console.log(error); + c.send({ + embeds: [errorDB], + }); + } + }); + }); + }); + }); + }); + }); + }); + } + }); + }); + } + + if (panels.length < 1) return; + + const closeMenu = new MessageSelectMenu() + .setCustomId('close') + .addOptions([{ + label: 'Close', + description: 'Select this to close the menu', + value: 'close', + }]); + let panelist; + const options = []; + + + panels.forEach((data) => { + options.push([{ + label: data.NAME, + description: 'Select to manage panel', + value: data.NAME, + }]); + if (!panelist) return (panelist = '**' + data.NAME + '**\n'); + panelist = panelist + '**' + data.NAME + '**\n'; + + }); + + + const paneloptions = new MessageSelectMenu() + .setCustomId('paneloptions') + .addOptions([{ + label: 'Register new panel', + description: 'Select this to register new panel', + value: 'register', + }, + { + label: 'Close', + description: 'Select this to close the menu', + value: 'close', + }, + ]); + + const panelMenu = new MessageActionRow(); + const paneloptionsrow = new MessageActionRow().addComponents(paneloptions); + + panelMenu.addComponents( + new MessageSelectMenu() + .setCustomId('auto_panels') + .setPlaceholder('Select a server') + .addOptions(options), + ); + + const panelEmbed = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription('Please select a panel to manage\n\n' + panelist); + interaction.channel + .send({ + embeds: [panelEmbed], + components: [panelMenu, paneloptionsrow], + }) + .then((panelmsg) => { + const filter = i => { + i.deferUpdate(); + return i.user.id === interaction.user.id; + }; + const Panelcollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + Panelcollector.on('collect', async (m) => { + if (m.values[0] === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (m.values[0] === 'register') { + panelmsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])], + }); + m.user.send({ + embeds: [reEmbed], + }).then((m) => { + const c = m.channel; + + c.send({ + embeds: [reUrl], + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + panelURL = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reApi], + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + panelAPI = collected.first().content; + }) + .then(async function() { + await c.send({ + embeds: [reName], + }).then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }).then(async (collected) => { + panelNAME = collected.first().content; + if (panelNAME.length > 100) { + return c.send( + 'Please keep the character limit to 25', + ); + } + panel + .find({ + ID: id, + NAME: panelNAME.trim(), + }) + .then((exit) => { + if (exit.length > 0) { + return c.send({ + embeds: [embedExit], + }); + } + }) + .catch(async () => c.send({ + embeds: [timesUp], + })) + .catch((error) => { + console.log(error); + c.send({ + embeds: [errorDB], + }); + }); + try { + const npanel = new panel({ + ID: id, + API: panelAPI.trim(), + URL: panelURL.trim(), + NAME: panelNAME.trim(), + }); + await npanel.save(); + c.send({ + embeds: [reSucess], + }); + } catch (error) { + console.log(error); + c.send({ + embeds: [errorDB], + }); + } + }); + }); + }); + }); + }); + }); + }); + } else { + await panelmsg.edit({ + embeds: [loading], + components: [], + }); + await wait(1500); + panel + .find({ + ID: id, + NAME: m.values[0], + }) + .then((fpanel) => { + const panelManage = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription( + 'Hey, what do you want to do with this panel:\n' + m.values[0], + ); + + const pManage = new MessageButton() + .setLabel('Servers') + .setStyle('PRIMARY') + .setCustomId('pManage'); + + const pDelete = new MessageButton() + .setLabel('Delete') + .setStyle('DANGER') + .setCustomId('pDelete'); + + const pUrl = new MessageButton() + .setLabel('Panel Link') + .setStyle('PRIMARY') + .setCustomId('pUrl'); + + const pEdit = new MessageButton() + .setLabel('Edit') + .setStyle('PRIMARY') + .setCustomId('pEdit'); + + const pAcc = new MessageButton() + .setLabel('Account') + .setStyle('PRIMARY') + .setCustomId('pAcc'); + + const pManageRow = new MessageActionRow().addComponents( + pManage, + pEdit, + pUrl, + pAcc, + pDelete, + ); + const pCloseRow = new MessageActionRow().addComponents(close); + + panelmsg.edit({ + embeds: [panelManage], + components: [pManageRow, pCloseRow], + }); + + Panelcollector.stop(); + const panelManageCollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + panelManageCollector.on('collect', async (pm) => { + if (pm.customId === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (pm.customId === 'pAcc') { + await panelmsg.edit({ + embeds: [loading], + components: [], + }); + await wait(1500); + const Client = new node.NodeactylClient( + fpanel[0].URL, + fpanel[0].API, + ); + + Client.getAccountDetails().then((acc) => { + let content; + let newcontent; + + const currectPass = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Please send your currect password on this panel', + ); + + const newEmail = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Please send your new email for this panel', + ); + + const newPassword = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Please send your new password for this panel', + ); + + const successAcc = new MessageEmbed() + .setFooter({ + text: footer, + }) + .setColor(color) + .setDescription( + 'Sended request to panel, if you didn\'t logged out from panel, that means your currect password is wrong, for future update this will send a error embed if you put wrong currect password', + ); + + const accEmbed = new MessageEmbed() + .setTitle(accountTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'So you wanna manage your pterodactyl account?\n```\nUsername: ' + + acc.username + + '\nID: ' + + acc.id + + '\nAdmin: ' + + acc.admin + + '\n```', + ); + + const updateEmail = new MessageButton() + .setLabel('Update Email') + .setStyle('PRIMARY') + .setCustomId('email'); + + const updatePass = new MessageButton() + .setLabel('Update Password') + .setStyle('PRIMARY') + .setCustomId('password'); + + const viewEmail = new MessageButton() + .setLabel('View Email') + .setStyle('PRIMARY') + .setCustomId('vemail'); + + const accRow = new MessageActionRow().addComponents( + updateEmail, + updatePass, + viewEmail, + close, + ); + + panelmsg.edit({ + embeds: [accEmbed], + components: [accRow], + }); + + const accountCollector = panelmsg.createMessageComponentCollector( + filter, { + max: 1, + time: 30000, + errors: ['time'] + }, + ); + + accountCollector.on('collect', (ac) => { + if (ac.customId === 'email') { + panelmsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])], + }); + m.user + .send({ + embeds: [reEmbed], + }) + .then((m) => { + const c = m.channel; + + c.send({ + embeds: [currectPass], + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + content = collected.first().content; + }) + .then(async function() { + await c + .send({ + embeds: [newEmail], + }) + .then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }).then(async (collected) => { + newcontent = + collected.first().content; + + Client.updateEmail( + newcontent, + content, + ) + .then((success) => { + return c.send({ + embeds: [successAcc], + }); + }) + .catch((error) => { + console.log(error); + return c.send( + 'something happen', + ); + }); + }); + }); + }); + }); + }); + } + if (ac.customId === 'password') { + panelmsg.edit({ + embeds: [reDm], + components: [new MessageActionRow().addComponents([Support])], + }); + m.user + .send({ + embeds: [reEmbed], + }) + .then((m) => { + const c = m.channel; + + c.send({ + embeds: [currectPass], + }).then(async function() { + const msg_filter = (m) => m.author.id === interaction.user.id; + await c + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + content = collected.first().content; + }) + .then(async function() { + await c + .send({ + embeds: [newPassword], + }) + .then(async function() { + c.awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }).then(async (collected) => { + newcontent = + collected.first().content; + + Client.updatePassword( + newcontent, + content, + ) + .then((success) => { + console.log('test' + success); + return c.send({ + embeds: [successAcc], + }); + }) + .catch((error) => { + console.log(error); + return c.send( + 'An Error accured', + ); + }); + }); + }); + }); + }); + }); + } + if (ac.customId === 'vemail') { + const emailEmbed = new MessageEmbed() + .setTitle(accountTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Your email from this pterodactyl panel is `' + + acc.email + + '`', + ); + + ac.reply({ + embeds: [emailEmbed], + ephemeral: true, + }); + panelmsg.delete(); + } + }); + }); + } + if (pm.customId === 'pEdit') { + const embedEdit = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please select which one you want to edit', + ); + + const updated = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription(fpanel[0].NAME + ' updated!'); + + const editName = new MessageButton() + .setLabel('Name') + .setStyle('PRIMARY') + .setCustomId('ename'); + + const editUrl = new MessageButton() + .setLabel('Url/Link') + .setStyle('PRIMARY') + .setCustomId('eurl'); + + const editApi = new MessageButton() + .setLabel('Apikey') + .setStyle('PRIMARY') + .setCustomId('ekey'); + + const editRows = new MessageActionRow().addComponents( + editName, + editUrl, + editApi, + ); + + panelmsg.edit({ + embeds: [embedEdit], + components: [editRows], + }); + + + const EditManageCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + EditManageCollector.on('collect', async (ep) => { + if (ep.customId === 'ename') { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please send the new name for this panel', + ); + + panelmsg.edit({ + embeds: [editm], + components: [], + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected.first().content.trim(); + + panel + .find({ + ID: id, + NAME: newcontent, + }) + .then((exit) => { + if (exit.length > 0) { + return panelmsg.edit(embedExit); + } + collected.first().delete(); + }) + .catch((error) => { + console.log(error); + panelmsg.edit({ + embeds: [errorDB], + }); + collected.first().delete(); + }); + + panel + .findOneAndUpdate({ + ID: id, + NAME: m.values[0], + }, { + NAME: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + }) + .catch((Error) => { + console.log(Error); + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + }); + }) + .catch((error) => { + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (ep.customId === 'eurl') { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please send the new url for this panel', + ); + + panelmsg.edit({ + embeds: [editm], + components: [], + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected.first().content.trim(); + + panel + .findOneAndUpdate({ + ID: id, + NAME: m.values[0], + }, { + URL: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + collected.first().delete(); + }) + .catch((Error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + collected.first().delete(); + }); + }) + .catch((error) => { + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (ep.customId === 'eapi') { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please send the new api for this panel', + ); + + panelmsg.edit({ + embeds: [editm], + components: [], + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected.first().content.trim(); + + panel + .findOneAndUpdate({ + ID: id, + NAME: m.values[0], + }, { + API: newcontent, + }) + .then(() => { + panelmsg.edit({ + embeds: [updated], + components: [], + }); + collected.first().delete(); + }) + .catch((Error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + collected.first().delete(); + }); + }) + .catch((error) => { + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + }); + } + if (pm.customId === 'pUrl') { + const embedUrl = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription('Your panel url is ' + fpanel[0].URL); + + panelmsg.delete(); + pm.reply({ + embeds: [embedUrl], + ephemeral: true, + }); + } + if (pm.customId === 'pDelete') { + const pDelEmbed = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setColor(color) + .setDescription( + 'Panel succesfully deleted from our databases', + ); + + panel + .deleteOne({ + ID: id, + NAME: m.values[0], + }) + .then((res) => { + panelmsg + .edit({ + embeds: [pDelEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + }) + .catch((error) => { + panelmsg.edit({ + embeds: [errorDB], + components: [], + }); + }); + } + if (pm.customId === 'pManage') { + await panelmsg.edit({ + embeds: [loading], + components: [], + }); + await wait(1500); + const Client = new node.NodeactylClient( + fpanel[0].URL, + fpanel[0].API, + ); + Client.getAllServers() + .then((response) => { + const serverEmbed = new MessageEmbed(); + serverEmbed.setColor(color); + serverEmbed.setTitle(serverTitle); + serverEmbed.setThumbnail(thumbnail); + serverEmbed.setFooter({ + text: footer, + }); + + if (response.length == 0) { + serverEmbed.setDescription( + 'No servers were found on this pterodactyl account', + ); + return panelmsg.edit({ + embeds: [serverEmbed], + }); + } else { + const anothertemp = []; + let servers; + response.data.map((S) => { + const name = S.attributes.name; + if (name.length > 50) name + 'Name Limit'; + const somemenu = new MessageSelectMenu(); + somemenu.setCustomId('somemenuid'); + somemenu.addOptions([{ + label: name, + description: 'Select this menu to manage this server', + value: S.attributes.identifier, + }]); + anothertemp.push(somemenu.options); + + + const srv = S.attributes; + + if (!servers) { + return (servers = + '**' + + srv.name + + '** [`' + + srv.identifier + + '`]\n```\nnode: ' + + srv.node + + '\nip: ' + + srv.relationships.allocations.data[0] + .attributes.ip + + ':' + + srv.relationships.allocations.data[0] + .attributes.port + + '\nSuspended: ' + + srv.is_suspended + + '\nInstalling: ' + + srv.is_installing + + '\n```\n'); + } + servers = + servers + + '**' + + srv.name + + '** [`' + + srv.identifier + + '`]\n```\nnode: ' + + srv.node + + '\nip: ' + + srv.relationships.allocations.data[0].attributes + .ip + + ':' + + srv.relationships.allocations.data[0].attributes + .port + + '\nSuspended: ' + + srv.is_suspended + + '\nInstalling: ' + + srv.is_installing + + '\n```\n'; + }); + serverEmbed.setDescription(servers); + + const anothermenus = []; + anothertemp.map((data) => { + const dat = data[0]; + // const label = [{ + // label: dat.label + // }]; + // const value = [{ + // value: dat.value + // }]; + anothermenus.push([{ + label: dat.label, + description: 'Select this menu to manage this server', + value: dat.value, + }]); + // anothermenus.push(value) + // console.log(anothermenu); + }); + + // const anothermenurow = new MessageActionRow().addComponents(anothermenus) + // console.log(anothermenus); + + const row = new MessageActionRow(); + + row.addComponents( + new MessageSelectMenu() + .setCustomId('auto_servers') + .setPlaceholder('Select a server') + .addOptions(anothermenus), + ); + panelmsg.edit({ + embeds: [serverEmbed], + components: [row], + }); + + const Panelcollector = panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + Panelcollector.on('collect', async (sm) => { + if (sm.values[0] === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } else { + await panelmsg.edit({ + embeds: [loading], + components: [], + }); + await wait(1500); + + try { + const server = await Client.getServerDetails( + sm.values[0], + ); + const stats = await Client.getServerUsages( + sm.values[0], + ); + const account = + await Client.getAccountDetails( + fpanel[0].URL, + fpanel[0].API, + ); + const status = stats.current_state; + + const currectStatus = + '[Status: ' + status + ']'; + let maxMemory = server.limits.memory; + if (maxMemory === 0) maxMemory = 'unlimited'; + if (maxMemory !== 'unlimited') { + maxMemory = maxMemory + ' MB'; + } + let maxDisk = server.limits.disk; + if (maxDisk === 0) maxDisk = 'unlimited'; + if (maxDisk !== 'unlimited') { + maxDisk = maxDisk + ' MB'; + } + let maxCPU = server.limits.cpu; + if (maxCPU === 0) maxCPU = 'unlimited'; + if (maxCPU !== 'unlimited') { + maxCPU = maxCPU + '%'; + } + + const currectMemory = formatBytes( + stats.resources.memory_bytes, + ); + const currectDisk = formatBytes( + stats.resources.disk_bytes, + ); + const currectCPU = stats.resources.cpu_absolute; + + const memory = + '[Memory: ' + + currectMemory + + '/' + + maxMemory + + ']'; + const disk = + '[Disk: ' + + currectDisk + + '/' + + maxDisk + + ']'; + const cpu = + '[CPU: ' + currectCPU + '%/' + maxCPU + ']'; + + let currectDB = server.databases; + if (`${currectDB}` === 'undefined') { + currectDB = 0; + } + let currectBK = server.backups; + + if (`${currectBK}` === 'undefined') { + currectBK = 0; + } + + const databases = + '[Databases: ' + + currectDB + + '/' + + server.feature_limits.databases + + ']'; + const backups = + '[Backups: ' + + currectBK + + '/' + + server.feature_limits.backups + + ']'; + const allocations = + '[Allocations: ' + + server.relationships.allocations.data + .length + + '/' + + server.feature_limits.allocations + + ']'; + + const sftpLink = + server.sftp_details.ip + + ':' + + server.sftp_details.port; + const sftpUser = + account.username + '.' + server.identifier; + + const sftpEmbed = new MessageEmbed() + .setTitle(serverTitle) + .setColor(color) + .setFooter({ + text: footer, + }) + .setDescription( + 'SFTP Details:\n```\nServer Address: ' + + sftpLink + + '\nUsername: ' + + sftpUser + + '\n```', + ); + + const serverSelected = new MessageEmbed() + .setAuthor({ + name: serverTitle, + }) + .setTitle( + '[Controling: ' + server.name + ']', + ) + .setColor(color) + .setFooter({ + text: footer, + }) + .setDescription( + 'Server Resource:\n```\n' + + currectStatus + + '\n' + + cpu + + '\n' + + memory + + '\n' + + disk + + '\n```\nServer Feature:\n```\n' + + databases + + '\n' + + backups + + '\n' + + allocations + + '\n```', + ); + + const serverStart = new MessageButton(); + serverStart.setLabel('Start'); + serverStart.setStyle('PRIMARY'); + serverStart.setCustomId('start'); + + const serverSFTP = new MessageButton() + .setLabel('SFTP') + .setStyle('PRIMARY') + .setCustomId('sftp'); + + const serverStop = new MessageButton(); + serverStop.setLabel('Stop'); + serverStop.setStyle('DANGER'); + serverStop.setCustomId('stop'); + + const serverKill = new MessageButton(); + serverKill.setLabel('Kill'); + serverKill.setStyle('DANGER'); + serverKill.setCustomId('kill'); + + const serverRestart = new MessageButton(); + serverRestart.setLabel('Restart'); + serverRestart.setStyle('PRIMARY'); + serverRestart.setCustomId('restart'); + + const serverSend = new MessageButton(); + serverSend.setLabel('Send Command'); + serverSend.setStyle('PRIMARY'); + serverSend.setCustomId('send'); + + const serverUser = new MessageButton(); + serverUser.setLabel('Subusers'); + serverUser.setStyle('PRIMARY'); + serverUser.setCustomId('user'); + // serverUser.setDisabled(true) + + const serverMnBkp = new MessageButton(); + serverMnBkp.setLabel('Backups'); + serverMnBkp.setStyle('PRIMARY'); + serverMnBkp.setCustomId('backup'); + // serverMnBkp.setDisabled(true) + + const serverInstal = new MessageButton(); + serverInstal.setLabel('Reinstall'); + serverInstal.setStyle('DANGER'); + serverInstal.setCustomId('install'); + + const serverRename = new MessageButton() + .setLabel('Rename') + .setStyle('PRIMARY') + .setCustomId('rename'); + + const serverStopped = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Server succesfully stopped', + ); + + const serverKilled = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Server succesfully killed', + ); + + const serverStarted = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Server succesfully started', + ); + + const serverRestarted = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Server succesfully restarted', + ); + + const serverReinstalled = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Server succesfully reinstalled', + ); + + const serverSended = new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Command succesfully sended', + ); + + const userAdd = new MessageButton() + .setLabel('New Subuser') + .setStyle('PRIMARY') + .setCustomId('newUser'); + + const bkpAdd = new MessageButton() + .setLabel('New Backup') + .setStyle('PRIMARY') + .setCustomId('newBkp'); + + const userRow = + new MessageActionRow().addComponents( + userAdd, + close, + ); + + const bkpRow = + new MessageActionRow().addComponents( + bkpAdd, + close, + ); + + if ( + status === 'running' || + status === 'starting' + ) { + serverStart.setDisabled(true); + + const serverControl = + new MessageActionRow().addComponents( + serverStart, + serverRestart, + serverSend, + serverStop, + serverKill, + ); + + const serverMngControl = + new MessageActionRow().addComponents( + serverSFTP, + serverUser, + serverMnBkp, + serverRename, + serverInstal, + ); + + const closerow = + new MessageActionRow().addComponents( + close, + ); + + panelmsg.edit({ + embeds: [serverSelected], + components: [ + serverControl, + serverMngControl, + closerow, + ], + }); + + const serverControlCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverControlCollector.on( + 'collect', + async (control) => { + if (control.customId === 'start') { + Client.startServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverStarted], + components: [], + }); + } + if (control.customId === 'restart') { + Client.restartServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverRestarted], + components: [], + }); + } + if (control.customId === 'stop') { + Client.stopServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverStopped], + components: [], + }); + } + if (control.customId === 'kill') { + Client.killServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverKilled], + components: [], + }); + } + if (control.customId === 'send') { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please send a message for the command to be sent to the server', + ); + + panelmsg.edit({ + embeds: [editm], + components: [], + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected + .first() + .content.trim(); + + await Client.sendServerCommand( + sm.values[0], + newcontent, + ); + panelmsg.edit({ + embeds: [serverSended], + components: [], + }); + collected.first().delete(); + }) + .catch((error) => { + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (control.customId === 'install') { + Client.reInstallServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverReinstalled], + components: [], + }); + } + if (control.customId === 'sftp') { + panelmsg.delete(); + control.reply({ + embeds: [sftpEmbed], + ephemeral: true, + }); + } + if (control.customId === 'user') { + Client.getSubUsers(sm.values[0]).then( + (users) => { + console.log(users); + let embedDesc; + const usrEmbed = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail); + + if (users.length === 0) { + usrEmbed.setDescription( + 'No sub-users found!', + ); + return panelmsg.edit({ + embeds: [usrEmbed], + components: [userRow], + }); + } + + users.forEach((usr) => { + const user = usr.attributes; + if (!embedDesc) { + return (embedDesc = + '**' + + user.username + + '**\n```\nUUID: ' + + user.uuid + + '\nCreated At: ' + + user.created_at + + '\n```\n'); + } + embedDesc = + embedDesc + + '**' + + user.username + + '**\n```\nUUID: ' + + user.uuid + + '\nCreated At: ' + + user.created_at + + '\n```\n'; + }); + usrEmbed.setDescription( + embedDesc, + ); + panelmsg.edit({ + embeds: [usrEmbed], + components: [userRow], + }); + const serverBkpUsrCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverBkpUsrCollector.on( + 'collect', + async (bs) => { + if (bs.customId === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (bs.customId === 'newUser') { + const embedUser = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Please send the email of the user', + ); + + panelmsg.edit({ + embeds: [embedUser], + components: [null], + }); + const embedAdded = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'User added!, for security reason user added by this bot will only has start, restart, and stop permission', + ); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then( + async (collected) => { + const newcontent = + collected + .first() + .content.trim(); + + const evalid = + /[^@ \t\r\n]+@[^@ \t\r\n]+.[^@ \t\r\n]+/; + const check = + evalid.test( + newcontent, + ); + + if (check === false) { + return panelmsg.edit({ + content: 'invalid email', + embeds: [null], + components: [], + }); + } + + Client.createSubUser( + sm.values[0], + newcontent, + [ + 'control.start', + 'control.restart', + 'control.stop', + ], + ); + panelmsg.edit({ + embeds: [embedAdded], + components: [], + }); + collected + .first() + .delete(); + }, + ) + .catch((error) => { + console.log(error); + + interaction.channel.send('Sorry I didn\'t recieved a reply'); + + }); + } + }, + ); + }, + ); + } + if (control.customId === 'backup') { + Client.listServerBackups( + sm.values[0], + ).then((bkps) => { + console.log(bkps); + let embedDesc; + const usrEmbed = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail); + + if (bkps.length === 0) { + usrEmbed.setDescription( + 'There is no backup on this server', + ); + return panelmsg.edit({ + embeds: [usrEmbed], + components: [bkpRow], + }); + } + + bkps.forEach((usr) => { + const user = usr.attributes; + if (!embedDesc) { + return (embedDesc = + '**' + + user.name + + '**\n```\nUUID: ' + + user.uuid + + '\nSuccess: ' + + user.is_successful + + '\nSize: ' + + formatBytes(user.bytes) + + '\nCreated At: ' + + user.created_at + + '\n```\n'); + } + embedDesc = + embedDesc + + '**' + + user.name + + '**\n```\nUUID: ' + + user.uuid + + '\nSuccess: ' + + user.is_successful + + '\nSize: ' + + formatBytes(user.bytes) + + '\nCreated At: ' + + user.created_at + + '\n```\n'; + }); + usrEmbed.setDescription(embedDesc); + panelmsg.edit({ + embeds: [usrEmbed], + components: [bkpRow], + }); + const serverBkpUsrCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverBkpUsrCollector.on( + 'collect', + async (bs) => { + if (bs.customId === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (bs.customId === 'newBkp') { + const sucBkp = + new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setColor(color); + + Client.createServerBackup( + sm.values[0], + ) + .then((done) => { + sucBkp.setDescription( + 'Successfuly created backup for your server!', + ); + panelmsg.edit({ + embeds: [sucBkp], + components: [null], + }); + }) + .catch((error) => { + if (error === 924) { + sucBkp.setDescription( + 'You need to wait 10 minutes to create another backup', + ); + panelmsg.edit({ + embeds: [sucBkp], + components: [null], + }); + } + }); + } + }, + ); + }); + } + if (control.customId === 'rename') { + const embedUser = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Please send a new name for this server', + ); + + panelmsg.edit({ + embeds: [embedUser], + components: [null], + }); + const embedAdded = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Server has been renamed', + ); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected + .first() + .content.trim(); + + Client.renameServer( + sm.values[0], + newcontent, + ); + panelmsg.edit({ + embeds: [embedAdded], + components: [], + }); + collected.first().delete(); + }) + .catch((error) => { + console.log(error); + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (control.customId === 'close') { + panelmsg.edit({ + embeds: [closeEmbed], + components: [], + }); + } + }, + ); + } else if ( + status === 'stopping' || + status === 'offline' + ) { + serverStop.setDisabled(true); + serverRestart.setDisabled(true); + serverKill.setDisabled(true); + serverSend.setDisabled(true); + + const serverControl = + new MessageActionRow().addComponents( + serverStart, + serverRestart, + serverSend, + serverStop, + serverKill, + ); + + const serverMngControl = + new MessageActionRow().addComponents( + serverSFTP, + serverUser, + serverMnBkp, + serverRename, + serverInstal, + ); + + const closerow = + new MessageActionRow().addComponents( + close, + ); + + panelmsg.edit({ + embeds: [serverSelected], + components: [ + serverControl, + serverMngControl, + closerow, + ], + }); + + const serverControlCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverControlCollector.on( + 'collect', + async (control) => { + if (control.customId === 'start') { + Client.startServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverStarted], + components: [], + }); + } + if (control.customId === 'restart') { + Client.restartServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverRestarted], + components: [], + }); + } + if (control.customId === 'stop') { + Client.stopServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverStopped], + components: [], + }); + } + if (control.customId === 'kill') { + Client.killServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverKilled], + components: [], + }); + } + if (control.customId === 'send') { + const editm = new MessageEmbed() + .setTitle(panelTitle) + .setFooter({ + text: footer, + }) + .setColor(color) + .setThumbnail(thumbnail) + .setDescription( + 'Please send a message for the command to be sent to the server', + ); + + panelmsg.edit({ + embeds: [editm], + components: [], + }); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected + .first() + .content.trim(); + + await Client.sendServerCommand( + sm.values[0], + newcontent, + ); + panelmsg.edit({ + embeds: [serverSended], + components: [], + }); + collected.first().delete(); + }) + .catch((error) => { + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (control.customId === 'install') { + Client.reInstallServer(sm.values[0]); + panelmsg.edit({ + embeds: [serverReinstalled], + components: [], + }); + } + if (control.customId === 'sftp') { + panelmsg.delete(); + control.reply({ + embeds: [sftpEmbed], + ephemeral: true, + }); + } + if (control.customId === 'user') { + Client.getSubUsers(sm.values[0]).then( + (users) => { + console.log(users); + let embedDesc; + const usrEmbed = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail); + + if (users.length === 0) { + usrEmbed.setDescription( + 'No sub-users found!', + ); + return panelmsg.edit({ + embeds: [usrEmbed], + components: [userRow], + }); + } + + users.forEach((usr) => { + const user = usr.attributes; + if (!embedDesc) { + return (embedDesc = + '**' + + user.username + + '**\n```\nUUID: ' + + user.uuid + + '\nCreated At: ' + + user.created_at + + '\n```\n'); + } + embedDesc = + embedDesc + + '**' + + user.username + + '**\n```\nUUID: ' + + user.uuid + + '\nCreated At: ' + + user.created_at + + '\n```\n'; + }); + usrEmbed.setDescription( + embedDesc, + ); + panelmsg.edit({ + embeds: [usrEmbed], + components: [userRow], + }); + const serverBkpUsrCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverBkpUsrCollector.on( + 'collect', + async (bs) => { + if (bs.customId === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (bs.customId === 'newUser') { + const embedUser = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Please send the email of the user', + ); + + panelmsg.edit({ + embeds: [embedUser], + components: [null], + }); + const embedAdded = + new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'User added!, for security reason user added by this bot will only has start, restart, and stop permission', + ); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then( + async (collected) => { + const newcontent = + collected + .first() + .content.trim(); + + const evalid = + /[^@ \t\r\n]+@[^@ \t\r\n]+.[^@ \t\r\n]+/; + const check = + evalid.test( + newcontent, + ); + + if (check === false) { + return panelmsg.edit({ + content: 'invalid email', + embeds: [null], + components: [], + }); + } + + Client.createSubUser( + sm.values[0], + newcontent, + [ + 'control.start', + 'control.restart', + 'control.stop', + ], + ); + panelmsg.edit({ + embeds: [embedAdded], + components: [], + }); + collected + .first() + .delete(); + }, + ) + .catch((error) => { + console.log(error); + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + }, + ); + }, + ); + } + if (control.customId === 'backup') { + Client.listServerBackups( + sm.values[0], + ).then((bkps) => { + console.log(bkps); + let embedDesc; + const usrEmbed = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail); + + if (bkps.length === 0) { + usrEmbed.setDescription( + 'There is no backup on this server', + ); + return panelmsg.edit({ + embeds: [usrEmbed], + components: [bkpRow], + }); + } + + bkps.forEach((usr) => { + const user = usr.attributes; + if (!embedDesc) { + return (embedDesc = + '**' + + user.name + + '**\n```\nUUID: ' + + user.uuid + + '\nSuccess: ' + + user.is_successful + + '\nSize: ' + + formatBytes(user.bytes) + + '\nCreated At: ' + + user.created_at + + '\n```\n'); + } + embedDesc = + embedDesc + + '**' + + user.name + + '**\n```\nUUID: ' + + user.uuid + + '\nSuccess: ' + + user.is_successful + + '\nSize: ' + + formatBytes(user.bytes) + + '\nCreated At: ' + + user.created_at + + '\n```\n'; + }); + usrEmbed.setDescription(embedDesc); + panelmsg.edit({ + embeds: [usrEmbed], + components: [bkpRow], + }); + const serverBkpUsrCollector = + panelmsg.createMessageComponentCollector({ + filter, + max: 1, + time: 30000, + errors: ['time'] + }); + + serverBkpUsrCollector.on( + 'collect', + async (bs) => { + if (bs.customId === 'close') { + panelmsg + .edit({ + embeds: [closeEmbed], + components: [], + }) + .then((msg) => { + msg.delete({ + timeout: 5000, + }); + }); + } + if (bs.customId === 'newBkp') { + const sucBkp = + new MessageEmbed() + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setColor(color); + + Client.createServerBackup( + sm.values[0], + ) + .then((done) => { + sucBkp.setDescription( + 'Successfuly created backup for your server!', + ); + panelmsg.edit({ + embeds: [sucBkp], + components: [null], + }); + }) + .catch((error) => { + if (error === 924) { + sucBkp.setDescription( + 'You need to wait 10 minutes to create another backup', + ); + panelmsg.edit({ + embeds: [sucBkp], + components: [null], + }); + } + }); + } + }, + ); + }); + } + if (control.customId === 'rename') { + const embedUser = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Please send a new name for this server', + ); + + panelmsg.edit({ + embeds: [embedUser], + components: [null], + }); + const embedAdded = new MessageEmbed() + .setColor(color) + .setTitle(serverTitle) + .setFooter({ + text: footer, + }) + .setThumbnail(thumbnail) + .setDescription( + 'Server new name has been seted', + ); + const msg_filter = (m) => m.author.id === interaction.user.id; + await interaction.channel + .awaitMessages({ + filter: msg_filter, + max: 1, + time: 30000, + errors: ['time'] + }) + .then(async (collected) => { + const newcontent = collected + .first() + .content.trim(); + + Client.renameServer( + sm.values[0], + newcontent, + ); + panelmsg.edit({ + embeds: [embedAdded], + components: [], + }); + collected.first().delete(); + }) + .catch((error) => { + console.log(error); + interaction.channel.send('Sorry I didn\'t recieved a reply'); + }); + } + if (control.customId === 'close') { + panelmsg.edit({ + embeds: [closeEmbed], + components: [], + }); + } + }, + ); + } + } catch (e) { + const ErrCon = new MessageEmbed() + .setTitle( + 'PteroControl ¦ Server Server Management', + ) + .setThumbnail(client.user.avatarURL()) + .setColor(color) + .setDescription( + 'An error just occurred please report this to our support server!', + ); + + const err305 = new MessageEmbed() + .setTitle('PteroControl | Error 305') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if your host has cloudflare enabled on their panel which will prevent the bot from connecting to the endpoints', + ) + .setImage('https://http.cat/305'); + if (e === 305) { + return interaction.channel.send({ + embeds: [err305], + }); + } + + const err304 = new MessageEmbed() + .setTitle('PteroControl | Error 304') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if you put wrong apikeys, make sure the apikeys are client not admin', + ) + .setImage('https://http.cat/304'); + if (e === 304) { + return interaction.channel.send({ + embeds: [err304], + }); + } + + const err344 = new MessageEmbed() + .setTitle('PteroControl | Error 344') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if the panel is down', + ) + .setImage('https://http.cat/344'); + if (e === 344) { + return interaction.channel.send({ + embeds: [err344], + }); + } + + const err8 = new MessageEmbed() + .setTitle( + 'PteroControl | Error 8', + client.user.avatarURL(), + ) + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if your put invalid website link', + ); + if (e === 8) { + return interaction.channel.send({ + embeds: [err8], + }); + } + + const errNaN = new MessageEmbed() + .setTitle( + 'PteroControl | Not a Pterodactyl Panel', + client.user.avatarURL(), + ) + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if you put website link that doesn\'t have pterodactyl panel', + ); + if (`${e}` === 'NaN') { + return interaction.channel.send({ + embeds: [errNaN], + }); + } + + const errorCODE = new MessageEmbed() + .setTitle('PteroControl | Error!') + .setDescription('Error Code ' + e) + .setFooter({ + text: footer, + }) + .setColor(color); + + // .setImage(`https://http.cat/${e}`); + console.log(e); + + panelmsg.edit({ + embeds: [errorCODE], + components: [new MessageActionRow().addComponents([Support])], + }); + } + } + }); + } + }) + .catch((e) => { + const ErrCon = new MessageEmbed() + .setTitle('PteroControl ¦ Server Server Management') + .setThumbnail(client.user.avatarURL()) + .setColor(color) + .setDescription( + 'An error just occurred please report this to our support server!', + ); + + const err305 = new MessageEmbed() + .setTitle('PteroControl | Error 305') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if your host has cloudflare enabled on their panel which will prevent the bot from connecting to the endpoints', + ) + .setImage('https://http.cat/305'); + if (e === 305) { + return interaction.channel.send({ + embeds: [err305], + }); + } + + const err304 = new MessageEmbed() + .setTitle('PteroControl | Error 304') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if you put wrong apikeys, make sure the apikeys are client not admin', + ) + .setImage('https://http.cat/304'); + if (e === 304) { + return interaction.channel.send({ + embeds: [err304], + }); + } + + const err344 = new MessageEmbed() + .setTitle('PteroControl | Error 344') + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if the panel is down', + ) + .setImage('https://http.cat/344'); + if (e === 344) { + return interaction.channel.send({ + embeds: [err344], + }); + } + + const err8 = new MessageEmbed() + .setTitle( + 'PteroControl | Error 8', + client.user.avatarURL(), + ) + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if your put invalid website link', + ); + if (e === 8) { + return interaction.channel.send({ + embeds: [err8], + }); + } + + const errNaN = new MessageEmbed() + .setTitle( + 'PteroControl | Not a Pterodactyl Panel', + client.user.avatarURL(), + ) + .setColor(color) + .setDescription( + 'An error occured while fetching your servers. This can occur if you put website link that doesn\'t have pterodactyl panel', + ); + if (`${e}` === 'NaN') { + return interaction.channel.send({ + embeds: [errNaN], + }); + } + + const errorCODE = new MessageEmbed() + .setTitle('PteroControl | Error!') + .setDescription('Error Code ' + e) + // .setImage(`https://http.cat/${e}`) + .setFooter({ + text: footer, + }) + .setColor(color); + + console.log(e); + + panelmsg.edit({ + embeds: [errorCODE], + components: [new MessageActionRow().addComponents([Support])], + }); + }); + } + }); + }); + } + }); + }); + }) + .catch((error) => { + console.log(error); + interaction.channel.send({ + embeds: [errorDB], + }); + }); + }, +}; + +function formatBytes(bytes, decimals = 2) { + if (bytes === 0) return '0 MB'; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +} \ No newline at end of file