nyx

The first CODM discrod bot -- cath.exe Template
git clone https://codeberg.org/night0721/nyx
Log | Files | Refs | LICENSE

commit 236d19953388dd64ddd6bbff4397e6e957e4bf78
parent 788692e9d9ecab789162f21163d05f5a48b17ac4
Author: night0721 <[email protected]>
Date:   Mon,  6 Sep 2021 18:38:25 +0800

cath v3.0.0

Diffstat:
M.env.example | 26++++++++------------------
A.github/FUNDING.yml | 12++++++++++++
M.gitignore | 11++++++++---
M.replit | 4++--
MREADME.md | 19++++++++++---------
Mbot.js | 111++++++++++++++++++++++++++++++++++---------------------------------------------
Acat/fantastic.js | 13+++++++++++++
Acat/fight.js | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acat/gae.js | 37+++++++++++++++++++++++++++++++++++++
Acat/gg.js | 26++++++++++++++++++++++++++
Acat/how.js | 19+++++++++++++++++++
Acat/nab.js | 30++++++++++++++++++++++++++++++
Acat/pp.js | 22++++++++++++++++++++++
Acommand/Economy/bal.js | 28++++++++++++++++++++++++++++
Acommand/Economy/daily.js | 46++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Economy/rich.js | 45+++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/8ball.js | 33+++++++++++++++++++++++++++++++++
Acommand/Fun/ascii.js | 22++++++++++++++++++++++
Acommand/Fun/busted.js | 25+++++++++++++++++++++++++
Acommand/Fun/cat.js | 35+++++++++++++++++++++++++++++++++++
Acommand/Fun/choose.js | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/coinflip.js | 17+++++++++++++++++
Acommand/Fun/dino.js | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/dog.js | 35+++++++++++++++++++++++++++++++++++
Acommand/Fun/drake.js | 31+++++++++++++++++++++++++++++++
Acommand/Fun/ds.js | 24++++++++++++++++++++++++
Acommand/Fun/emojify.js | 43+++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/hack.js | 138+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/hug.js | 43+++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/kiss.js | 43+++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/meme.js | 35+++++++++++++++++++++++++++++++++++
Acommand/Fun/obama.js | 45+++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/pp.js | 32++++++++++++++++++++++++++++++++
Acommand/Fun/rickroll.js | 22++++++++++++++++++++++
Acommand/Fun/rps.js | 214+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/say.js | 20++++++++++++++++++++
Acommand/Fun/ship.js | 42++++++++++++++++++++++++++++++++++++++++++
Acommand/Fun/sr.js | 28++++++++++++++++++++++++++++
Acommand/Fun/triggered.js | 25+++++++++++++++++++++++++
Acommand/Information/avatar.js | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/banner.js | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/botinfo.js | 47+++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/help.js | 181+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/messageinfo.js | 41+++++++++++++++++++++++++++++++++++++++++
Acommand/Information/ping.js | 31+++++++++++++++++++++++++++++++
Acommand/Information/roleinfo.js | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/servericon.js | 17+++++++++++++++++
Acommand/Information/serverinfo.js | 155+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Information/userinfo.js | 134+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Moderation/purge.js | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Owner/eval.js | 125+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Owner/guilds.js | 24++++++++++++++++++++++++
Acommand/Owner/restart.js | 13+++++++++++++
Acommand/Utilities/afk.js | 35+++++++++++++++++++++++++++++++++++
Acommand/Utilities/docs.js | 27+++++++++++++++++++++++++++
Acommand/Utilities/emoji.js | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/hexcolor.js | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/invite.js | 32++++++++++++++++++++++++++++++++
Acommand/Utilities/permission.js | 118+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/poll.js | 37+++++++++++++++++++++++++++++++++++++
Acommand/Utilities/report.js | 45+++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/snipe.js | 108+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/suggest.js | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommand/Utilities/timer.js | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcommands/Config/create.js | 14+++++++-------
Mcommands/Config/delete.js | 2+-
Mcommands/Config/disable.js | 4+---
Mcommands/Config/enable.js | 4+---
Mcommands/Economy/bet.js | 4++--
Mcommands/Economy/buy.js | 2+-
Mcommands/Economy/drop.js | 2+-
Mcommands/Economy/give.js | 102++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Mcommands/Economy/lb.js | 2+-
Mcommands/Economy/profile.js | 2+-
Mcommands/Economy/slots.js | 4++--
Mcommands/Economy/steal.js | 8++++----
Mcommands/Economy/work.js | 2+-
Mcommands/Fun/hangman.js | 4++--
Mcommands/Fun/quote.js | 4++--
Mcommands/Fun/simprate.js | 4++--
Mcommands/Giveaway/giveaway.js | 2+-
Mcommands/Moderation/announce.js | 2+-
Mcommands/Moderation/ban.js | 4++--
Mcommands/Moderation/clearWarns.js | 2+-
Mcommands/Moderation/kick.js | 2+-
Mcommands/Moderation/lock.js | 2+-
Mcommands/Moderation/mute.js | 6+++---
Mcommands/Moderation/removeWarn.js | 2+-
Mcommands/Moderation/role.js | 4++--
Mcommands/Moderation/slowmode.js | 4++--
Mcommands/Moderation/unban.js | 2+-
Mcommands/Moderation/unlock.js | 2+-
Mcommands/Moderation/unmute.js | 2+-
Mcommands/Moderation/warn.js | 2+-
Mcommands/Music/bassboost.js | 2+-
Mcommands/Music/loop.js | 4++--
Mcommands/Music/pause.js | 5++---
Mcommands/Music/play.js | 22+++++++++++-----------
Mcommands/Music/queue.js | 2+-
Mcommands/Music/resume.js | 4++--
Mcommands/Music/skip.js | 2+-
Mcommands/Music/stop.js | 2+-
Mcommands/Music/volume.js | 6++----
Mcommands/Owner/accept.js | 2+-
Mcommands/Owner/blacklist.js | 4++--
Mcommands/Owner/cls.js | 1+
Mcommands/Owner/deny.js | 2+-
Mcommands/Owner/dm.js | 4++--
Mcommands/Owner/getinvite.js | 10++++------
Acommands/Owner/info.js | 118+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcommands/Owner/premium.js | 2+-
Acommands/Owner/spider.js | 19+++++++++++++++++++
Mcommands/Owner/try.js | 2+-
Mcommands/Utilities/emojiadd.js | 6++----
Mcommands/Utilities/esnipe.js | 2+-
Mcommands/Utilities/help.js | 20++++++++++----------
Mcommands/Utilities/modmail.js | 2+-
Mcommands/Utilities/rank.js | 2+-
Mconfig.json | 14++++++++------
Mevents/afk.js | 9++++-----
Aevents/card.js | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aevents/embed.js | 46++++++++++++++++++++++++++++++++++++++++++++++
Mevents/emoji.js | 2+-
Mevents/guildCreate.js | 42++++++++++++++++++++++--------------------
Mevents/guildDelete.js | 42++++++++++++++++++++++--------------------
Aevents/interactionCreate.js | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mevents/level.js | 2+-
Aevents/messageCreate.js | 318+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aevents/messageDelete.js | 31+++++++++++++++++++++++++++++++
Aevents/messageReaction.js | 30++++++++++++++++++++++++++++++
Mevents/ready.js | 32+++++++++++++-------------------
Aevents/typingStart.js | 10++++++++++
Mindex.js | 4++--
Mpackage-lock.json | 5839++++++++++++-------------------------------------------------------------------
Mpackage.json | 18++++++++++++------
Dutil/dist/cmds.js | 39---------------------------------------
Dutil/dist/err.js | 221-------------------------------------------------------------------------------
Dutil/dist/item.js | 68--------------------------------------------------------------------
Dutil/dist/manager.js | 86-------------------------------------------------------------------------------
Dutil/functions/economy.js | 243-------------------------------------------------------------------------------
Dutil/functions/function.js | 49-------------------------------------------------
Dutil/functions/mongoose.js | 602-------------------------------------------------------------------------------
142 files changed, 5129 insertions(+), 6592 deletions(-)

diff --git a/.env.example b/.env.example @@ -1,20 +1,11 @@ TOKEN = MONGO = mongodb://127.0.0.1:27017/test -CLIENT_SECRET = -CLIENT_ID = -SPOTIFY_ID = -SPOTIFY_SECRET = +CLIENT_SECRET = +CLIENT_ID = +SPOTIFY_ID = +SPOTIFY_SECRET = PORT = 3000 -host = lava.link -port = 80 -password = youshallnotpass -DMLogID = -DMLogToken = -CMDLogID = -CMDLogToken = -ReadyLogID = -ReadyLogToken = -ErrorLogID = -ErrorLogToken = -ServerLogID = -ServerLogToken = -\ No newline at end of file +host = lavalink.darrennathanael.com +port = 2095 +password = whatwasthelastingyousaid +api = http://localhost:3000 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [night0721, ThunderE75] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: cathteam +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore @@ -1,2 +1,7 @@ -node_modules/ -/.env -\ No newline at end of file +node_modules +package-lock.json +.env +/events/log.js +/.prettierignore +/util/functions/economy(backup).js +.vscode +\ No newline at end of file diff --git a/.replit b/.replit @@ -1,2 +1,2 @@ "language"="nodejs" -"run"="node ." -\ No newline at end of file +"run"="node_modules/.bin/node index.js" +\ No newline at end of file diff --git a/README.md b/README.md @@ -1,9 +1,7 @@ -# CATH.EXE TEMPLATE +# CATH.EXE [![botStatus](https://discord-md-badge.vercel.app/api/shield/bot/800966959268364288?style=flat-square&flat-Square&theme=clean-inverted&compact=true)](https://discord.com/oauth2/authorize?client_id=800966959268364288&permissions=4231314550&scope=bot%20applications.commands) <!-- header --> -<img src = "https://media.discordapp.net/attachments/842014909264953354/867806346593042483/Cath-temp-banner.png?width=1244&height=415"> - -*This is a Bot Template based on Cath.exe, This templated **does not** conatain any data from Project Lighthouse. For Call of duty mobile stats invite the main instance using the **INVITE ME** badge.* +<img src = "https://media.discordapp.net/attachments/789642309632786434/867156734795055173/Cath-banner.png?width=1298&height=433"> **Cath.exe** is a Multipurpose Discord Bot with many features that include but are not limited to Moderation, Music and Economy. The Call of Duty Stats are courtesy of [**Project Lighthouse**](https://discord.gg/ARNFCu9NxK) by [**Path.exe**](https://www.youtube.com/channel/UC0hvUWYhyx_DOEBzLWEJxsw).<br><br> If you like this bot, feel free to <img src = "https://discord.com/assets/141d49436743034a59dec6bd5618675d.svg" width = "16"> **Star** and **fork** this repository.<br><br> @@ -11,7 +9,9 @@ If you like this bot, feel free to <img src = "https://discord.com/assets/141d49 <!-- Main Badges --> [![inviteme](https://badgen.net/badge/Invite%20Me/Online/5865F2?icon=discord&color=5865F2&style=for-the-badge&scale=1.4)](https://discord.com/oauth2/authorize?client_id=800966959268364288&permissions=4231314550&scope=bot%20applications.commands) [![Support Server](https://img.shields.io/discord/718762019586572341?label=Support%20Server&logo=Discord&colorB=5865F2&style=for-the-badge&logoColor=white) ](https://discord.gg/SR7TeNJG67) -![Repo Stars](https://img.shields.io/github/stars/night0721/cath.exe?logo=github&color=5865F2&style=for-the-badge) +![Repo Stars](https://img.shields.io/github/stars/night0721/cath.exe?logo=github&color=5865F2&style=for-the-badge) +[![Open in Visual Studio Code](https://img.shields.io/badge/Visual_Studio_Code-5865F2?style=for-the-badge&logo=visual%20studio%20code&logoColor=white)](https://open.vscode.dev/night0721/cath/) +[![Trello](https://img.shields.io/badge/Trello-5865F2?style=for-the-badge&logo=trello&logoColor=white)](https://trello.com/b/dIgR0QNm) <!-- Build with badges --> ## Build with: @@ -27,15 +27,14 @@ If you like this bot, feel free to <img src = "https://discord.com/assets/141d49 [![Run On Replit](https://img.shields.io/static/v1?label=Run%20On&message=Repl.it&color=5865F2&logo=replit&logoColor=white&style=for-the-badge&scale=1.4)](https://repl.it/github/night0721/cath.exe) [![Deploy On Heroku](https://img.shields.io/static/v1?label=Deploy%20On&message=Heroku&color=5865F2&logo=heroku&logoColor=white&style=for-the-badge&scale=1.4)](https://heroku.com/deploy?template=https://github.com/night0721/cath.exe) -## Deploy Locally +## Deployment Locally ### Prerequisite Download all these programs on your local machine by clicking on the badge & following the standard installing procedure. You can use any IDE but we recommand VS Code. [![git](https://badgen.net/badge/icon/git?icon=git&label&color=5865F2&style=for-the-badge&scale=1.4)](https://git-scm.com/downloads) [![Open in Visual Studio Code](https://img.shields.io/badge/Visual_Studio_Code-5865F2?style=for-the-badge&logo=visual%20studio%20code&logoColor=white)](https://code.visualstudio.com/Download) -[![node](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)](https://nodejs.org/en/download/) -<!-- [![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white)](https://www.mongodb.com/cloud/atlas/lp/try2) --> +[![node](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)]() ### Step by Step Walkthrough @@ -74,7 +73,7 @@ git clone https://github.com/night0721/cath.exe npm i ``` -7. Now, to start the bot use this command. +7. Now, to start the bot use this command in the terminal. ```cmd node . ``` @@ -99,6 +98,8 @@ To enable the Economy Commands, you need to Setup a MongoDB Database. You can al - Replace `myFirstDatabase` with the name of the Database that you named in **Step 5**. 13. That's it! + + # Support, Feature Request & Bug Reports ## <img src = "https://cdn.discordapp.com/emojis/867093614403256350.png?v=1" width = 18> Support & Feature Request diff --git a/bot.js b/bot.js @@ -1,85 +1,61 @@ -const { - Client, - Collection, - WebhookClient, - MessageEmbed, -} = require("discord.js"); +const { Client, Collection, MessageEmbed, Intents } = require("discord.js"); const { GiveawaysManager } = require("discord-giveaways"); -const fs = require("fs"); -const config = require("./config.json"); require("dotenv").config(); const client = new Client({ allowedMentions: { parse: ["users", "roles"], repliedUser: true }, restTimeOffset: 0, partials: ["MESSAGE", "CHANNEL", "REACTION", "GUILD_MEMBER"], - intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MEMBERS", "GUILD_PRESENCES"], + intents: [ + Intents.FLAGS.GUILDS, + Intents.FLAGS.GUILD_MEMBERS, + Intents.FLAGS.GUILD_BANS, + Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, + Intents.FLAGS.GUILD_INVITES, + Intents.FLAGS.GUILD_VOICE_STATES, + Intents.FLAGS.GUILD_MESSAGES, + Intents.FLAGS.GUILD_MESSAGE_REACTIONS, + Intents.FLAGS.DIRECT_MESSAGES, + Intents.FLAGS.GUILD_PRESENCES, + ], }); module.exports = client; -client.color = config.color; -client.author = "Cath Team"; -client.invite = "https://discord.gg/SbQHChmGcp"; -client.web = config.URL; -require("./util/dist/cmds").cmds(); -require("./inlinereply"); require("./util/functions/economy")(client); require("./util/dist/manager")(client); -client.CMDLog = new WebhookClient( - process.env.CMDLogID, - process.env.CMDLogToken -); -client.ReadyLog = new WebhookClient( - process.env.ReadyLogID, - process.env.ReadyLogToken -); -client.ServerLog = new WebhookClient( - process.env.ServerLogID, - process.env.ServerLogToken -); -client.ErrorLog = new WebhookClient( - process.env.ErrorLogID, - process.env.ErrorLogToken -); -process.on("unhandledRejection", async err => { - if (client.user) { - if (client.user.id === client.user.id) { - const embed = new MessageEmbed() - .setTitle("UnhandledRejection Error") - .setDescription(`\`\`\`ini\n${err.stack}\`\`\``) - .setTimestamp() - .setColor(client.color) - .setFooter(client.user.username); - client.ErrorLog.send(embed); - } - } - return console.log(err); -}); -client.SuggestionLog = config.Suggestion; -client.ReportLog = config.Report; -client.DMLog = config.DM; +require("./util/dist/handler")(client); client.commands = new Collection(); +client.slashCommands = new Collection(); client.aliases = new Collection(); -client.events = new Collection(); -client.snipes = []; client.esnipes = new Collection(); -client.hide = new Collection(); +client.snipes = new Array(); client.queue = new Map(); client.Timers = new Map(); -client.cat = config.ca; +client.config = require("./config.json"); client.function = require("./util/functions/function"); client.data = require("./util/functions/mongoose"); client.err = require("./util/dist/err"); +client.cat = client.config.ca; +client.SuggestionLog = client.config.Suggestion; +client.ReportLog = client.config.Report; +client.DMLog = client.config.DMLog; +client.CMDLog = client.config.CMDLog; +client.ReadyLog = client.config.ReadyLog; +client.ServerLog = client.config.ServerLog; +client.ErrorLog = client.config.ErrorLog; +client.color = client.config.color; +client.author = "Cath Team"; +client.invite = "https://discord.gg/SbQHChmGcp"; +client.web = client.config.URL; client.data .connect(process.env.MONGO) .then(() => console.log("Connected to MongoDB!")) .catch(e => console.log(e)); client.owners = [ - "452076196419600394", - "749692825402212494", - "766645910087139338", - "755476040029306952", - "534027706325532694", - "381442059111759883", - "556808365574193194", + "452076196419600394", //Night + "766645910087139338", //chekseaa + "755476040029306952", //Kałÿ + "534027706325532694", //Cat drinking a cat + "381442059111759883", //Thunder + "556808365574193194", //chunchunmaru ]; client.currency = "<:cp:840231933933387797>"; client.path = [ @@ -100,9 +76,18 @@ client.giveaways = new GiveawaysManager(client, { reaction: "🎉", }, }); -client.categories = fs.readdirSync("./commands/"); -client.paths = fs.readdirSync("./cat/"); -["command"].forEach(handler => { - require(`./util/command-handler`)(client); +process.on("unhandledRejection", async err => { + if (client.user) { + if (client.user.id === client.user.id) { + const embed = new MessageEmbed() + .setTitle("UnhandledRejection Error") + .setDescription(`\`\`\`ini\n${err.stack}\`\`\``) + .setTimestamp() + .setColor(client.color) + .setFooter(client.user.username); + client.channels.cache.get(client.ErrorLog).send({ embeds: [embed] }); + } + } + return console.log(err); }); client.login(process.env.TOKEN); diff --git a/cat/fantastic.js b/cat/fantastic.js @@ -0,0 +1,13 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "fantastic", + timeout: 60000, + + run: async (client, message, args) => { + message.delete(); + const player = args.join(" ") || message.author.username; + message.channel.send( + `${player} is a fantastic CoDM player. Just need to work on communication, map awareness, info scouting, bomb plants, positioning, teamfighting, gun skill , utility usage, rotations and getting kills.` + ); + }, +}; diff --git a/cat/fight.js b/cat/fight.js @@ -0,0 +1,72 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "fight", + description: "Goooooooooooooooolag!", + timeout: 15000, + + run: async (client, message, args) => { + const gaes = [ + "Gae", + "Super Gae", + "Ultra Gae", + "Snow Gae", + "Ultimate Gae", + "Terminal Gae", + "Akimbo Gae", + "Dead(extended timer)", + "Mega Gae", + "Cheez Gae", + "Gath Gae", + "Koosun Gae", + "KDR Gae", + "Gaezer Gae", + "Big Gae", + "Horni Gae", + "Zero Gae", + "Gae beyond repair", + "Dead×2(extended timer)", + "Not Gae", + "Animus Gae", + "Dust Gae", + "Orcus Gae", + "Gulag Cleaner", + "Kedar Gae", + "Smol Gae", + "Meta Gae", + "Mono Gae", + "Stippled Gae", + "BSA Gae", + "Oreo Gae", + "Random Gae", + "Tortol Gae", + "Amogus Gae", + "Gae×2", + "Dan Gae", + "Real Gae©®™", + "Mastered Ultra Instinct Gae", + "Bamboozled", + "More Gae", + "Morrre Gae", + "Most Gae", + "Undisputable Gae", + "Gae Prince of Horni", + "Gae with Y", + "Phatopenisis Gae", + "Gathophile", + "a Bot", + "locknload with 200 round RPD gae", + "ros gae", + "Cath Gae", + "Cat drinking a cat gae", + "Night Gae", + ]; + const gae = gaes[Math.floor(Math.random() * gaes.length)]; + const embed = new MessageEmbed() + .setTitle("**Gulag Fight**") + .setDescription( + `**${message.author} has taken a chance at redemption in The Gulag. \nYou fight only to find out that you're \`${gae}\`. If you somehow turned out to not be gae, DM an admin to get your timer halved ||only if your mute is less than 69m||**` + ) + .setColor(5198940); + message.channel.send({ embeds: [embed] }); + }, +}; diff --git a/cat/gae.js b/cat/gae.js @@ -0,0 +1,37 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "gae", + timeout: 15000, + + run: async (client, message, args) => { + const MEE6 = [ + "u = gae", + "pLeaSe gAE", + "REEEEEEEEEEEEEEEEEEEEEE*GAE*EEEEEEEEEEEEEEEEEEEEEEEEEEE", + "Enough with the gae jokes, U gae", + "Plain ol' gae", + "<a:dankcutie:804313489488347146>", + "By the way, Deity bot is my senpai.\nShe is the most beautiful bot I've ever seen <3", + "aight imma gae out", + "*gae with extra steps*", + "**wae r u gae**", + "u gae bro?", + "**100%** gae", + "I bet you do **tiktok**", + "**G.A.E.**", + "The next person to chat is gae", + "Whoever used C.gae, is **gae**", + "*Its ok to be gae*", + "*succ my* **cheez**", + "**gae gae gae gae gae gae**", + "**Be gae**", + "There's no cooldown so y'all get muted for being *gae*", + "Ok stop using this command, really. U gae?", + "What the hell, u gae?", + "**GAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE**", + ]; + const MEE6Index = MEE6[Math.floor(Math.random() * MEE6.length)]; + message.delete(); + message.channel.send(`${MEE6Index}`); + }, +}; diff --git a/cat/gg.js b/cat/gg.js @@ -0,0 +1,26 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "gg", + timeout: 15000, + + run: async (client, message, args) => { + const GG = [ + "**GIT GUD**", + "Git gud kid", + "good game *question mark*", + "gg l0ser", + "delet cod gg", + "*ggwp*", + "I was lagging doe", + "```Stop using this command```", + "<a:partyy:804324497531863060> ez pz <a:partyy:804324497531863060>", + "<a:REEEE:804324566259204107>", + "**GOOD GAME WELL PLAYED**", + "<a:greenflame:804325192330641408> get rektd <a:greenflame:804325192330641408>", + "<a:lollll:804325253265621012><a:lollll:804325253265621012><a:lollll:804325253265621012><a:lollll:804325253265621012><a:lollll:804325253265621012>", + ]; + const GGIndex = GG[Math.floor(Math.random() * GG.length)]; + message.delete(); + message.channel.send(`${GGIndex}`); + }, +}; diff --git a/cat/how.js b/cat/how.js @@ -0,0 +1,19 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "howgae", + description: "Check how gae is the user", + usage: "(User)", + Path: true, + + run: async (client, message, args) => { + const target = message.mentions.users.first() || message.author; + let simp = Math.floor(Math.random() * 100); + message.reply({ + embeds: [ + new MessageEmbed() + .setTitle(`${target.username}'s gae rate`) + .setDescription(`You are ${simp}% gae`), + ], + }); + }, +}; diff --git a/cat/nab.js b/cat/nab.js @@ -0,0 +1,30 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "nab", + timeout: 15000, + + run: async (client, message, args) => { + const NAB = [ + "stop being a nab, nab", + "Lmao you a nab", + "Biggest nab of all time", + "You're just a nab", + "Okay calm down nab", + "**Stop** spamming this command you **nab**", + "```I told you to stop spamming this command nab```", + "Get rekt nab XD Jajajajajaja", + "**N.A.B.**", + "Better luck next time nab", + "Ooooh look at me im better than you nab", + "Whoever used C.nab, is a nab", + "Stfu nab", + "**you cant aim**", + "*bonjour* nab", + "u = <a:pepetriggered:804327257145081877>", + "Go back to tiktok <a:frogcrazy:804327200659865610>", + ]; + const NABIndex = NAB[Math.floor(Math.random() * NAB.length)]; + message.delete(); + message.channel.send(`${NABIndex}`); + }, +}; diff --git a/cat/pp.js b/cat/pp.js @@ -0,0 +1,22 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "pp", + description: "Check how long is the user", + usage: "(User)", + + run: async (client, message, args) => { + let user = message.mentions.users.first() || message.author; + let embed = new MessageEmbed() + .addField( + `${user.username}\'s peepee`, + `8${"=".repeat(Math.floor(Math.random() * 20))}D` + ) + .setColor(client.color) + .setTitle("Peepee size machine") + .setTimestamp() + .setFooter(`Made by ${client.author}`); + message.reply({ + embeds: [embed], + }); + }, +}; diff --git a/command/Economy/bal.js b/command/Economy/bal.js @@ -0,0 +1,28 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "balance", + description: "Show an user's balance", + usage: "(User)", + category: "Economy", + options: [ + { + type: 6, + name: "user", + description: "The user you want to hack", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user = interaction.guild.members.cache.get(args[0]); + const bal = await client.bal(user.id); + let embed = new MessageEmbed() + .addField(`${client.currency} Balance`, `**${bal}**`) + .setColor(client.color) + .setURL(client.web) + .setTitle(`${user.displayName}'s Balance`) + .setTimestamp() + .setFooter(`Requested by ${client.author}`); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Economy/daily.js b/command/Economy/daily.js @@ -0,0 +1,46 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "daily", + description: "Earns daily money", + category: "Economy", + timeout: 1000 * 60 * 60 * 24, + run: async (client, interaction, args) => { + var money; + const user = await client.data.getUser(interaction.user.id); + if (user) { + if (user.Premium == true) { + money = 20000; + let pre_embed = new MessageEmbed() + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dyanmic: true }) + ) + .setDescription( + `**Here is your daily ${money}${client.currency}!\nThanks for supporting Cath!**` + ) + .setURL(client.web) + .setColor(client.color) + .setFooter(`Made by ${client.author}`) + .setTimestamp(); + await client.add(interaction.user.id, money, interaction); + return await interaction.followUp({ embeds: [pre_embed] }); + } else { + money = 10000; + let norm_embed = new MessageEmbed() + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dyanmic: true }) + ) + .setDescription( + `Here is your daily ${money}${client.currency}!\nBe [premium](https://discord.gg/SbQHChmGcp) user, you can get more coins everyday!` + ) + .setURL(client.web) + .setColor(client.color) + .setFooter(`Made by ${client.author}`) + .setTimestamp(); + await client.add(interaction.user.id, money, interaction); + return await interaction.followUp({ embeds: [norm_embed] }); + } + } + }, +}; diff --git a/command/Economy/rich.js b/command/Economy/rich.js @@ -0,0 +1,45 @@ +const { Collection, MessageEmbed } = require("discord.js"); +module.exports = { + name: "rich", + description: "Displaying top 10 richest users.", + category: "Economy", + run: async (client, interaction, args) => { + const collection = new Collection(); + await Promise.all( + interaction.guild.members.cache.map(async member => { + const id = member.id; + const bal = await client.bal(id); + if (!bal) return; + return bal !== 0 + ? collection.set(id, { + id, + bal, + }) + : null; + }) + ); + if (!collection) + return await interaction.followUp({ + content: `None of the members got ${client.currency}!`, + }); + const ata = collection.sort((a, b) => b.bal - a.bal).first(10); + await interaction.followUp({ + embeds: [ + new MessageEmbed() + .setTitle(`Richest users in ${interaction.guild.name}`) + .setDescription( + ata + .map((v, i) => { + return `${i + 1}: ${ + interaction.guild.members.cache.get(v.id).user.tag + } => **${v.bal}${client.currency}**`; + }) + .join("\n") + ) + .setFooter(`Made by ${client.author}`) + .setTimestamp() + .setColor(client.color), + ], + }); + }, +}; diff --git a/command/Fun/8ball.js b/command/Fun/8ball.js @@ -0,0 +1,33 @@ +const { MessageEmbed } = require("discord.js"); +const axios = require("axios"); +module.exports = { + name: "8ball", + usage: "(Question)", + description: "8ball an answer", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "question", + description: "The question you want to ask", + required: true, + }, + ], + run: async (client, interaction, args) => { + const data = await axios + .get(`${process.env.api}/api/v1/fun/8ball`) + .then(res => res.data.answer); + const embed = new MessageEmbed() + .setAuthor( + `🎱 ${interaction.member.user.tag} asks`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setDescription(`**🎱Question:** \n${args[0]} \n**🎱Answer:** \n ${data}`) + .setColor(client.color) + .setTimestamp() + .setURL(client.web) + .setFooter(`Made by ${client.author}`); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Fun/ascii.js b/command/Fun/ascii.js @@ -0,0 +1,22 @@ +const figlet = require("figlet"); +module.exports = { + name: "ascii", + description: "Converts text into ASCII art", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "text", + description: "The text you want to convert", + required: true, + }, + ], + run: async (client, interaction, args) => { + const msg = args[0]; + figlet.text(msg, async (err, data) => { + if (err) console.log(err); + await interaction.followUp(`\`\`\`${data}\`\`\``); + }); + }, +}; diff --git a/command/Fun/busted.js b/command/Fun/busted.js @@ -0,0 +1,25 @@ +const { MessageAttachment } = require("discord.js"); +module.exports = { + name: "busted", + description: "Bust someone", + category: "Fun", + options: [ + { + type: 6, + name: "user", + description: "The user you want to use the effect", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user = interaction.guild.members.cache.get(args[0]); + const ima = new MessageAttachment( + `${process.env.api}/api/v1/image/busted?q=${user.user.displayAvatarURL({ + format: "png", + size: 2048, + })}` + ); + await interaction.followUp({ files: [ima] }); + }, +}; diff --git a/command/Fun/cat.js b/command/Fun/cat.js @@ -0,0 +1,35 @@ +const { MessageEmbed } = require("discord.js"); +const fetch = require("node-fetch"); +module.exports = { + name: "cat", + category: "Fun", + description: "Get a cat from reddit", + run: async (client, interaction, args) => { + let subreddits = ["cat", "cats"]; + let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)]; + fetch(`https://www.reddit.com/r/${subreddit}/random/.json`).then( + async res => { + let content = await res.json(); + let permalink = content[0].data.children[0].data.permalink; + let memeURL = `https://reddit.com${permalink}`; + let memeImage = content[0].data.children[0].data.url; + let memeTitle = content[0].data.children[0].data.title; + let memeUpvotes = content[0].data.children[0].data.ups; + let memeDownvotes = content[0].data.children[0].data.downs; + let memeNumComments = content[0].data.children[0].data.num_comments; + const memeEmbed = new MessageEmbed() + .setTitle(`A cat image | ${memeTitle}`) + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setURL(`${memeURL}`) + .setImage(memeImage) + .setTimestamp() + .setColor(client.color) + .setFooter(` 👍 ${memeUpvotes} 💬 ${memeNumComments}`); + await interaction.followUp({ embeds: [memeEmbed] }); + } + ); + }, +}; diff --git a/command/Fun/choose.js b/command/Fun/choose.js @@ -0,0 +1,73 @@ +module.exports = { + name: "choose", + description: "Choose random things", + usage: "(Choices)", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "first", + description: "The first choice", + required: true, + }, + { + type: 3, + name: "second", + description: "The second choice", + required: true, + }, + { + type: 3, + name: "third", + description: "The third choice", + required: false, + }, + { + type: 3, + name: "forth", + description: "The forth choice", + required: false, + }, + { + type: 3, + name: "fifth", + description: "The fifth choice", + required: false, + }, + { + type: 3, + name: "sixth", + description: "The sixth choice", + required: false, + }, + { + type: 3, + name: "seventh", + description: "The seventh choice", + required: false, + }, + { + type: 3, + name: "eighth", + description: "The eighth choice", + required: false, + }, + { + type: 3, + name: "ninth", + description: "The ninth choice", + required: false, + }, + { + type: 3, + name: "tenth", + description: "The tenth choice", + required: false, + }, + ], + run: async (client, interaction, args) => { + let choices = args[Math.floor(Math.random() * args.length)]; + await interaction.followUp(`I will choose - \`${choices}\``); + }, +}; diff --git a/command/Fun/coinflip.js b/command/Fun/coinflip.js @@ -0,0 +1,17 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "coinflip", + description: "Flip a coin", + category: "Fun", + run: async (client, interaction, args) => { + let HT = ["Heads!", "Tails!"]; + let pick = HT[Math.floor(Math.random() * HT.length)]; + let embed = new MessageEmbed() + .setColor(client.color) + .setTitle("CoinFilp Game") + .setTimestamp() + .setFooter(`Made by ${client.author}`) + .setDescription(pick); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Fun/dino.js b/command/Fun/dino.js @@ -0,0 +1,98 @@ +module.exports = { + name: "dinochrome", + category: "Fun", + description: "Dinosaur in Chrome", + run: async (client, interaction, args) => { + await interaction.deleteReply(); + let msg = await interaction.channel.send(`---------------🦖`); + let time = 1 * 1000; + setTimeout(function () { + msg.edit(`-----------🦖----`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`----------🦖------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`--------🦖--------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`------🦖-----------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`-------🦖-----------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`---🌵-----🦖---------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`---🌵-🦖-------------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`🦖\n ---🌵--------------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`------🦖---🌵--------------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`----🦖-----🌵----------------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`-🌵🌵-----🦖-------🌵--------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`----🌵🌵-🦖----------🌵------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`🦖\n ---🌵🌵-------------🌵---`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`-----🦖---🌵🌵-------------🌵--`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`-------🦖-----🌵🌵-------------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`🎂----🦖--------🌵🌵-----------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`---🎂--🦖----------🌵🌵---------`); + }, time); + time += 1.5 * 1000; + + setTimeout(function () { + msg.edit(`**Ⓜⓘⓢⓢⓘⓞⓝ Ⓒⓞⓜⓟⓛⓔⓣⓔⓓ !**\n ---🎂🦖----------🌵🌵-------------`); + }, time); + }, +}; diff --git a/command/Fun/dog.js b/command/Fun/dog.js @@ -0,0 +1,35 @@ +const { MessageEmbed } = require("discord.js"); +const fetch = require("node-fetch"); +module.exports = { + name: "dog", + category: "Fun", + description: "Get a dog from reddit", + run: async (client, interaction, args) => { + let subreddits = ["dog", "dogs"]; + let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)]; + fetch(`https://www.reddit.com/r/${subreddit}/random/.json`).then( + async res => { + let content = await res.json(); + let permalink = content[0].data.children[0].data.permalink; + let memeURL = `https://reddit.com${permalink}`; + let memeImage = content[0].data.children[0].data.url; + let memeTitle = content[0].data.children[0].data.title; + let memeUpvotes = content[0].data.children[0].data.ups; + let memeDownvotes = content[0].data.children[0].data.downs; + let memeNumComments = content[0].data.children[0].data.num_comments; + const memeEmbed = new MessageEmbed() + .setTitle(`A dog image | ${memeTitle}`) + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setURL(`${memeURL}`) + .setImage(memeImage) + .setTimestamp() + .setColor(client.color) + .setFooter(` 👍 ${memeUpvotes} 💬 ${memeNumComments}`); + await interaction.followUp({ embeds: [memeEmbed] }); + } + ); + }, +}; diff --git a/command/Fun/drake.js b/command/Fun/drake.js @@ -0,0 +1,31 @@ +const { MessageAttachment } = require("discord.js"); +const fetch = require("node-fetch"); +module.exports = { + name: "drake", + description: "Drake meme", + usage: "(Text) (Text)", + category: "Fun", + options: [ + { + type: 3, + name: "first", + description: "The first text", + required: true, + }, + { + type: 3, + name: "second", + description: "The second text", + required: true, + }, + ], + run: async (client, interaction, args) => { + const res = await fetch( + `https://frenchnoodles.xyz/api/endpoints/drake/?text1=${args[0]}&text2=${args[1]}`, + {} + ); + let i = await res.buffer(); + const drake = new MessageAttachment(i); + await interaction.followUp({ files: [drake] }); + }, +}; diff --git a/command/Fun/ds.js b/command/Fun/ds.js @@ -0,0 +1,24 @@ +const fetch = require("node-fetch"); +module.exports = { + name: "doublestruck", + description: "Doublestruck your text", + usage: "(text)", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "text", + description: "The text you want to convert", + required: true, + }, + ], + run: async (client, interaction, args) => { + let text = args[0].split(" ").join("+"); + let res = await fetch( + "https://api.popcatdev.repl.co/doublestruck?text=" + text + ); + let json = await res.json(); + await interaction.followUp(json.text); + }, +}; diff --git a/command/Fun/emojify.js b/command/Fun/emojify.js @@ -0,0 +1,43 @@ +module.exports = { + name: "emojify", + usage: "(Word)", + description: "Emojify a sentence", + type: "CHAT_INPUT", + category: "Fun", + options: [ + { + type: 3, + name: "text", + description: "The text you want to convert", + required: true, + }, + ], + run: async (client, interaction, args) => { + const mapping = { + " ": " ", + 0: ":zero:", + 1: ":one:", + 2: ":two:", + 3: ":three:", + 4: ":four:", + 5: ":five:", + 6: ":six:", + 7: ":seven:", + 8: ":eight:", + 9: ":nine:", + "!": ":grey_exclamation:", + "?": ":grey_question:", + "#": ":hash:", + "*": ":asterisk:", + }; + "abcdefghijklmnopqrstuvwxyz".split("").forEach(c => { + mapping[c] = mapping[c.toUpperCase()] = ` :regional_indicator_${c}:`; + }); + await interaction.followUp( + args[0] + .split("") + .map(c => mapping[c] || c) + .join("") + ); + }, +}; diff --git a/command/Fun/hack.js b/command/Fun/hack.js @@ -0,0 +1,138 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "hack", + description: "Hack a user", + usage: "(User)", + category: "Fun", + options: [ + { + type: 6, + name: "user", + description: "The user you want to hack", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + let answers = [ + "@yousuck.noob", + "@hesnoob.haha", + "@thisguy.suck", + "@paypal.removed", + "@noob.haha", + "@hacked.xyz", + "@susmate.com", + "@gmail.sus", + "@why-im.withyou", + "@someone-end.me", + "@isnoob.io", + "@username-is.noob", + "@hahaget.lost", + "@yahoo.sus", + "@botmail.zip", + "@gmail.com", + "@yahoo.com", + ]; + let passwords = [ + "Disb****", + "disc******", + "pass**********", + "get****", + "mails***", + "endm****", + "gamer***********", + "asegeio*********", + "whys*******", + "Brot******", + "imwith*******", + "luckyyougotthispasswordlolnocencor", + "starb*******", + "egghunt2***", + "secr*****", + ]; + let ips = [ + "10.313.523.502.00.1", + "25.537.753.462.29.2", + "21.175.866.974.07.08", + "32.653.587.825.35.5", + "12.172.764.781.22.8", + "91.723.242.452.09.3", + "92.743.116.896.85.6", + "84.091.000.853.54.7", + "51.071.124.129.12.0", + ]; + const answer = answers[Math.floor(Math.random() * answers.length)]; + const passwrd = passwords[Math.floor(Math.random() * passwords.length)]; + const ip = ips[Math.floor(Math.random() * ips.length)]; + const taggedUser = interaction.guild.members.cache.get(args[0]); + await interaction.deleteReply(); + interaction.channel + .send(`Hacking ${taggedUser.user.username}...`) + .then(async msg => { + client.function.sleep(100); + msg.edit("Status: ■□□□□□□□□□□ 0%"); + client.function.sleep(100); + msg.edit("Status: ■■□□□□□□□□□ 7%: Hacking Email..."); + client.function.sleep(600); + msg.edit( + `Status: ■■■□□□□□□□□ 8%:\n \`Email: ${taggedUser.user.username}@yousuck.noob\`\n \`Password: ${passwrd}\` ` + ); + client.function.sleep(600); + msg.edit("Status: ■■□□□□□□□□□ 9%: Logging in to the Email..."); + client.function.sleep(2000); + msg.edit("Status: ■■■□□□□□□□□ 12%: Turning off the antivirus"); + client.function.sleep(1000); + msg.edit("Status: ■■■■□□□□□□ 14%: Downloading SYNAPSE X"); + client.function.sleep(100); + msg.edit("Status: ■■■□□□□□□□□ 17%: Deleting Captcha..."); + client.function.sleep(100); + msg.edit("Status: ■■□□□□□□□□□ 20%: Deleting Paypal account..."); + client.function.sleep(10); + msg.edit("Status: ■■■□□□□□□□□ 21%"); + client.function.sleep(12); + msg.edit("Status: ■■■■□□□□□□□ 22%"); + client.function.sleep(100); + msg.edit("Status: ■■■■■□□□□□□ 24%: Paypal account deleted"); + client.function.sleep(1000); + msg.edit("Status: ■■■■□□□□□□ 29%: Hacking is almost ready..."); + client.function.sleep(80); + msg.edit("Status: ■■■□□□□□□□□ 31%"); + client.function.sleep(80); + msg.edit("Status: ■■■■□□□□□□□ 36%"); + client.function.sleep(40); + msg.edit("Status: ■■■■■□□□□□□ 41%"); + client.function.sleep(60); + msg.edit("Status: ■■■■□□□□□□□ 47%"); + client.function.sleep(50); + msg.edit("Status: ■■■■■■□□□□□ 53%"); + client.function.sleep(3000); + msg.edit( + `Status: ■■■■■■■□□□□ 58%: Email password changed so ${taggedUser.user.username} can not login` + ); + client.function.sleep(500); + msg.edit("Status: ■■■■■■□□□□□ 66%"); + client.function.sleep(60); + msg.edit("Status: ■■■■■□□□□□□ 74%"); + client.function.sleep(20); + msg.edit(`Status: ■■■■■□□□□□□ 79%: IP address found: ${ip}`); + client.function.sleep(83); + msg.edit("Status: ■■■■■■□□□□ 80%"); + client.function.sleep(50); + msg.edit("Status: ■■■■■■■□□□ 85%"); + client.function.sleep(14); + msg.edit("Status: ■■■■■■■■■□□ 93%"); + client.function.sleep(70); + msg.edit("Status: ■■■■■■■■■■□ 97%"); + client.function.sleep(90); + msg.edit("Status: ■■■■■■■■■■■ 100%"); + const embed = new MessageEmbed() + .setDescription(`${taggedUser} has been hacked!`) + .addField("Email", `${taggedUser.user.username}${answer}`) + .addField("Password", `${passwrd}`) + .addField("IP address", `${ip}`) + .setFooter(`Made by ${client.author}`) + .setColor("02023a"); + await msg.edit({ embeds: [embed] }); + }); + }, +}; diff --git a/command/Fun/hug.js b/command/Fun/hug.js @@ -0,0 +1,43 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "hug", + description: "Hug someone", + category: "Fun", + usage: "(User)", + options: [ + { + type: 6, + name: "user", + description: "The user you want to hug", + required: true, + }, + { + type: 3, + name: "words", + description: "The words you want to say", + required: false, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user = interaction.guild.members.cache.get(args[0]); + words = args[1]; + if (user.id === interaction.user.id) { + return await interaction.followUp("You can't hug yourself"); + } + const embed = new MessageEmbed() + .setDescription(`${interaction.user} **hugs** ${user}`) + .setImage( + `https://media.tenor.com/images/ca88f916b116711c60bb23b8eb608694/tenor.gif` + ) + .setColor(client.color) + .setTimestamp() + .setFooter(`Made by ${client.author}`); + if (words) { + embed.addField("Words:", reason); + } + await interaction + .followUp({ embeds: [embed] }) + .then(msg => msg.react("💕")); + }, +}; diff --git a/command/Fun/kiss.js b/command/Fun/kiss.js @@ -0,0 +1,43 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "kiss", + description: "Kiss someone", + category: "Fun", + usage: "(User)", + options: [ + { + type: 6, + name: "user", + description: "The user you want to kiss", + required: true, + }, + { + type: 3, + name: "words", + description: "The words you want to say", + required: false, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user = interaction.guild.members.cache.get(args[0]); + words = args[1]; + if (user.id === interaction.user.id) { + return await interaction.followUp("You can't kiss yourself"); + } + const embed = new MessageEmbed() + .setDescription(`${interaction.user} **kisses** ${user}`) + .setImage( + `https://media.discordapp.net/attachments/814310468906123274/817656819416825896/image0.gif` + ) + .setColor(client.color) + .setTimestamp() + .setFooter(`Made by ${client.author}`); + if (words) { + embed.addField("Words:", reason); + } + await interaction + .followUp({ embeds: [embed] }) + .then(msg => msg.react("💕")); + }, +}; diff --git a/command/Fun/meme.js b/command/Fun/meme.js @@ -0,0 +1,35 @@ +const { MessageEmbed } = require("discord.js"); +const fetch = require("node-fetch"); +module.exports = { + name: "meme", + category: "Fun", + description: "Get a meme from reddit", + run: async (client, interaction, args) => { + let subreddits = ["comedyheaven", "dank", "meme", "memes"]; + let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)]; + fetch(`https://www.reddit.com/r/${subreddit}/random/.json`).then( + async res => { + let content = await res.json(); + let permalink = content[0].data.children[0].data.permalink; + let memeURL = `https://reddit.com${permalink}`; + let memeImage = content[0].data.children[0].data.url; + let memeTitle = content[0].data.children[0].data.title; + let memeUpvotes = content[0].data.children[0].data.ups; + let memeDownvotes = content[0].data.children[0].data.downs; + let memeNumComments = content[0].data.children[0].data.num_comments; + const memeEmbed = new MessageEmbed() + .setTitle(`${memeTitle}`) + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setURL(`${memeURL}`) + .setImage(memeImage) + .setTimestamp() + .setColor(client.color) + .setFooter(` 👍 ${memeUpvotes} 💬 ${memeNumComments}`); + await interaction.followUp({ embeds: [memeEmbed] }); + } + ); + }, +}; diff --git a/command/Fun/obama.js b/command/Fun/obama.js @@ -0,0 +1,45 @@ +const o = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠛⠛⠉⠉⠉⠋⠛⠛⠛⠻⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const b = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const a = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const m = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠏⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠹⣿⣿⣿⣿⣿⣿⣿"; +const a2 = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⢻⣿⣿⣿⣿⣿"; +const aa = "⣿⣿⣿⣿⣿⣿⣿⣿⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⠄⢠⠄⠄⡀⠄⠄⢀⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠄⠄⢛⣿⣿⣿⣿"; +const ab = "⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⡈⢔⠸⣐⢕⢕⢵⢰⢱⢰⢐⢤⡡⡢⣕⢄⢢⢠⠄⠄⠄⠄⠄⠄⠙⣿⣿⣿"; +const ac = "⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠂⠅⢕⠌⡎⡎⣎⢎⢮⢮⣳⡳⣝⢮⢺⢜⢕⢕⢍⢎⠪⡐⠄⠁⠄⠸⣿⣿"; +const ad = "⣿⣿⣿⣿⣿⣿⠏⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⢅⠣⡡⡣⣣⡳⡵⣝⡮⣗⣗⡯⣗⣟⡮⡮⣳⣣⣳⢱⢱⠱⣐⠄⠂⠄⢿⣿"; +const ae = "⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⢂⢈⠢⡱⡱⡝⣮⣿⣟⣿⣽⣷⣿⣯⣿⣷⣿⣿⣿⣾⣯⣗⡕⡇⡇⠄⠂⡀⢹⣿"; +const af = "⣿⣿⣿⣿⣿⡟⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠐⢀⢂⢕⢸⢨⢪⢳⡫⣟⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡺⡮⡣⡣⠠⢂⠒⢸⣿"; +const ag = "⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠐⠄⡂⠆⡇⣗⣝⢮⢾⣻⣞⣿⣿⣿⣿⣿⣿⣿⣿⢿⣽⣯⡯⣺⢸⢘⠨⠔⡅⢨⣿"; +const ah = "⣿⣿⠋⠉⠙⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⡂⡪⡪⡪⡮⡮⡯⣻⣽⣾⣿⣿⣿⣟⣿⣿⣿⣽⣿⣿⡯⣯⡺⡸⡰⡱⢐⡅⣼⣿"; +const ai = "⣿⠡⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠈⠆⠱⠑⠝⠜⠕⡝⡝⣞⢯⢿⣿⣿⡿⣟⣿⣿⣿⡿⡿⣽⣷⣽⡸⡨⡪⣂⠊⣿⣿"; +const aj = "⣿⠡⠄⡨⣢⠐⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠍⡓⣗⡽⣝⠽⠍⠅⠑⠁⠉⠘⠘⠘⠵⡑⢜⢀⢀⢉⢽"; +const ak = "⣿⠁⠠⢱⢘⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠈⠱⣁⠜⡘⠌⠄⠄⡪⣳⣟⡮⢅⠤⠠⠄⠄⣀⣀⡀⡀⠄⠈⡂⢲⡪⡠⣿"; +const al = "⣿⡇⠨⣺⢐⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡀⠄⠄⠄⠤⡠⡢⢒⠦⠠⠄⠄⠄⡸⢽⣟⢮⠢⡂⡐⠄⡈⡀⠤⡀⠄⠑⢄⠨⢸⡺⣐⣿"; +const am = "⣿⣿⠈⠕⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡂⡪⡐⡥⢤⣰⣰⣰⡴⡮⠢⠂⠄⠄⡊⢮⢺⢕⢵⢥⡬⣌⣒⡚⣔⢚⢌⢨⢚⠌⣾⡪⣾⣿"; +const an = "⣿⣿⣆⠄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡑⢕⢕⡯⡷⣕⢧⢓⢭⠨⡀⠄⡂⠨⡨⣪⡳⣝⢝⡽⣻⣻⣞⢽⣲⢳⢱⢡⠱⠨⣟⢺⣿⣿"; +const ao = "⣿⣿⣿⡆⠄⡅⠇⡄⠄⠄⠄⠄⠄⠄⠄⠐⠨⢪⢹⢽⢽⣺⢝⠉⠁⠁⠄⠄⠄⢌⢎⡖⡯⡎⡗⢝⠜⣶⣯⣻⢮⡻⣟⣳⡕⠅⣷⣿⣿⣿"; +const ap = "⣿⣿⣿⣿⣶⣶⣿⣷⠄⠄⠄⠄⠄⠄⠄⠄⠈⠔⡑⠕⠝⠄⡀⠄⠄⠊⢆⠂⠨⡪⣺⣮⣿⡾⡜⣜⡜⣄⠙⢞⣿⢿⡿⣗⢝⢸⣾⣿⣿⣿"; +const aq = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⡀⠄⠄⠄⠄⢀⠄⠠⠄⠠⠄⠄⠄⠄⠄⠄⠊⠺⡹⠳⡙⡜⡓⡭⡺⡀⠄⠣⡻⡹⡸⠨⣣⣿⣿⣿⣿"; +const ar = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠠⠄⠄⣂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢄⠤⡤⡄⡆⡯⡢⡣⡣⡓⢕⠽⣄⠄⠨⡂⢌⣼⣿⣿⣿⣿⣿"; +const a_ = "⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄⠄⠄⠄⠈⠆⠄⠸⡂⠄⠄⠄⢀⠄⢀⠈⠄⠂⠁⠙⠝⠼⠭⠣⠣⠣⠑⠌⠢⠣⡣⡠⡘⣰⣱⣿⣿⣿⣿⣿⣿"; +const at = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⢑⠄⠈⡱⠄⢘⠄⡀⠨⢐⣧⣳⣷⣶⣦⣤⣴⣶⣶⣶⡶⠄⡠⡢⡕⣜⠎⡮⣣⣿⣿⣿⣿⣿⣿⣿"; +const au = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠢⠄⠨⠄⠄⠣⡀⠄⢀⢀⢙⠃⡿⢿⠿⡿⡿⢟⢋⢔⡱⣝⢜⡜⡪⡪⣵⣿⣿⣿⣿⣿⣿⣿⣿"; +const av = "⣿⣿⣿⣿⣿⣿⣿⣿⡁⠄⠄⠄⠄⠄⠄⠄⠅⠄⠡⠄⠄⠡⢀⢂⠢⡡⠡⠣⡑⣏⢯⡻⡳⣹⡺⡪⢎⠎⡆⢣⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const aw = "⣿⣿⣿⣿⣿⣿⣿⣿⣇⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⠁⠄⢈⠄⢂⠕⡕⡝⢕⢎⢎⢮⢎⢯⢺⢸⢬⠣⢃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const ax = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠨⡐⠌⢆⢇⢧⢭⣣⡳⣵⢫⣳⢱⠱⢑⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const ay = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣆⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⡊⢌⢢⢡⢣⢪⡺⡪⡎⡎⡎⡚⣨⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const az = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠕⡅⢗⢕⡳⡭⣳⢕⠕⡱⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const ba = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠌⠄⠑⠩⢈⢂⣱⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const bb = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⡀⢄⠄⣀⠄⡀⣀⢠⢄⣖⣖⣞⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; +const bc = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣱⡐⡕⡕⡽⣝⣟⣮⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + +module.exports = { + name: "obama", + category: "Utilities", + description: "Obama", + run: async (client, interaction, args) => { + await interaction.followUp({ + content: `${o}\n${b}\n${a}\n${m}\n${a2}\n${aa}\n${ab}\n${ac}\n${ad}\n${ae}\n${af}\n${ag}\n${ah}\n${ai}\n${aj}\n${ak}\n${al}\n${am}\n${an}\n${ao}\n${ap}\n${aq}\n${ar}\n${a_}\n${at}\n${au}\n${av}\n${aw}\n${ax}\n${ay}\n${az}\n${ba}\n${bb}\n${bc}`, + }); + }, +}; diff --git a/command/Fun/pp.js b/command/Fun/pp.js @@ -0,0 +1,32 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "pp", + description: "Check how long is the user", + usage: "(User)", + category: "Fun", + options: [ + { + type: 6, + name: "user", + description: "The user you want to see", + required: false, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const { user } = + interaction.guild.members.cache.get(args[0]) || interaction.member; + let embed = new MessageEmbed() + .addField( + `${user.username}\'s peepee`, + `8${"=".repeat(Math.floor(Math.random() * 20))}D` + ) + .setColor(client.color) + .setTitle("Peepee size machine") + .setTimestamp() + .setFooter(`Made by ${client.author}`); + await interaction.followUp({ + embeds: [embed], + }); + }, +}; diff --git a/command/Fun/rickroll.js b/command/Fun/rickroll.js @@ -0,0 +1,22 @@ +const { MessageAttachment } = require("discord.js"); + +module.exports = { + name: "rickroll", + description: "Rickroll?", + category: "Fun", + run: async (client, interaction, args) => { + const roll = [ + "Never gonna give you up", + "Never gonna let you down", + "Never gonna run around and desert you", + "Never gonna make you cry", + "Never gonna say goodbye", + "Never gonna tell a lie and hurt you", + ]; + const rick = roll[Math.floor(Math.random() * roll.length)]; + const rickroll = new MessageAttachment( + "https://i.pinimg.com/originals/88/82/bc/8882bcf327896ab79fb97e85ae63a002.gif" + ); + await interaction.followUp({ content: `**${rick}**`, files: [rickroll] }); + }, +}; diff --git a/command/Fun/rps.js b/command/Fun/rps.js @@ -0,0 +1,214 @@ +const Discord = require("discord.js"); + +module.exports = { + name: "rockpaperscissors", + description: "Play RPS with someone", + usage: "(User)", + category: "Fun", + options: [ + { + type: 6, + name: "user", + description: "The user you want to play with", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args, utils) => { + let user = interaction.guild.members.cache.get(args[0]); + if (user.user.id == interaction.user.id) + return await interaction.followUp("You can't play with yourself"); + if (user.user.bot) + return await interaction.followUp("You can't play with bots"); + + let embed = new Discord.MessageEmbed() + .setDescription(`Wait for **${user.user.username}** to accept your game`) + .setColor(client.color) + .setTimestamp() + .setFooter(`Made by ${client.author}`); + + let confirm = new Discord.MessageActionRow().addComponents( + new Discord.MessageButton() + .setLabel("Accept") + .setStyle("SUCCESS") + .setCustomId("accept") + .setEmoji("808683134786863124"), + new Discord.MessageButton() + .setLabel("Decline") + .setStyle("DANGER") + .setCustomId("decline") + .setEmoji("808683573544353792") + ); + await interaction + .followUp({ + content: `<@!${user.user.id}>`, + embeds: [embed], + components: [confirm], + }) + .then(async m => { + let filter = button => button.user.id == user.user.id; + const collector = m.createMessageComponentCollector({ + filter, + type: "BUTTON", + time: 60000, + }); + collector.on("collect", button => { + if (button.customId == "decline") { + button.deferUpdate(); + return collector.stop("decline"); + } + button.deferUpdate(); + let pick = new Discord.MessageEmbed() + .setTitle(`${interaction.user.username} VS ${user.user.username}`) + .setColor(client.color) + .setDescription("Choose either 🪨, 📄, or ✂️") + .setTimestamp(); + let choices = new Discord.MessageActionRow().addComponents( + new Discord.MessageButton() + .setCustomId("rock") + .setStyle("SECONDARY") + .setEmoji("🪨"), + new Discord.MessageButton() + .setCustomId("paper") + .setStyle("SECONDARY") + .setEmoji("📄"), + new Discord.MessageButton() + .setCustomId("scissors") + .setStyle("SECONDARY") + .setEmoji("✂️") + ); + m.edit({ + embeds: [pick], + components: [choices], + }); + collector.stop(); + let users = new Set(); + users.add(interaction.user.id); + users.add(user.user.id); + let ping, pong; + let filter = b => users.has(b.user.id); + const collect = m.createMessageComponentCollector({ + filter, + type: "BUTTON", + time: 60000, + }); + collect.on("collect", async b => { + users.delete(b.user.id); + if (b.user.id == user.user.id) { + ping = b.customId; + await b.reply({ + content: `You have choosen **${utils.format(ping)}**`, + ephemeral: true, + }); + } + if (b.user.id == interaction.user.id) { + pong = b.customId; + await b.reply({ + content: `You have choosen **${utils.format(pong)}**`, + ephemeral: true, + }); + } + if (users.size == 0) return collect.stop(); + }); + collect.on("end", (c, reason) => { + if (reason == "time") { + let timeout = new Discord.MessageEmbed() + .setTitle("Timeout") + .setColor("RED") + .setDescription( + "Game cancelled since a player didn't react in time" + ); + m.edit({ + embeds: [timeout], + }); + } else { + const sit1 = ping == "rock" && pong == "scissors"; + const sit2 = ping == "scissors" && pong == "rock"; + const sit3 = ping == "scissors" && pong == "paper"; + const sit4 = ping == "paper" && pong == "scissors"; + const sit5 = ping == "paper" && pong == "rock"; + const sit6 = ping == "rock" && pong == "paper"; + if (sit1 || sit3 || sit5) { + let embed = new Discord.MessageEmbed() + .setTitle(`${user.user.username} wins!`) + .setColor("GREEN") + .setFooter(`Made by ${client.author}`) + .addField( + `${user.user.username} choice`, + `${utils.format(ping)}` + ) + .addField( + `${interaction.user.username} choice`, + `${utils.format(pong)}` + ) + .setTimestamp(); + m.edit({ + embeds: [embed], + components: [], + }); + } else if (sit2 || sit4 || sit6) { + let embed = new Discord.MessageEmbed() + .setTitle(`${interaction.user.username} wins!`) + .setColor("GREEN") + .setFooter(`Made by ${client.author}`) + .addField( + `${interaction.user.username} choice`, + `${utils.format(pong)}` + ) + .addField( + `${user.user.username} choice`, + `${utils.format(ping)}` + ) + .setTimestamp(); + m.edit({ + embeds: [embed], + components: [], + }); + } else { + let embed = new Discord.MessageEmbed() + .setTitle(`Tie!`) + .setColor("GREY") + .setFooter(`Made by ${client.author}`) + .addField( + `${interaction.user.username} choice`, + `${utils.format(pong)}` + ) + .addField( + `${user.user.username} choice`, + `${utils.format(ping)}` + ) + .setTimestamp(); + m.edit({ embeds: [embed], components: [] }); + } + } + }); + }); + collector.on("end", (collected, reason) => { + if (reason == "time") { + let embed = new Discord.MessageEmbed() + .setTitle("Timeout") + .setColor("RED") + .setDescription( + `**${user.user.username}** did not confirm before 60 seconds of time` + ); + m.edit({ + embeds: [embed], + components: [], + }); + } + if (reason == "decline") { + let embed = new Discord.MessageEmbed() + .setTitle("Declined") + .setColor("RED") + .setDescription( + `**${user.user.username}** has declined your game of RPS` + ); + m.edit({ + embeds: [embed], + components: [], + }); + } + }); + }); + }, +}; diff --git a/command/Fun/say.js b/command/Fun/say.js @@ -0,0 +1,20 @@ +const { Util } = require("discord.js"); +module.exports = { + name: "say", + description: "Pretend a bot to say", + usage: "(Words)", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "words", + description: "The words to say", + required: true, + }, + ], + run: async (client, interaction, args) => { + await interaction.deleteReply(); + interaction.channel.send(Util.cleanContent(args[0], interaction.channel)); + }, +}; diff --git a/command/Fun/ship.js b/command/Fun/ship.js @@ -0,0 +1,42 @@ +const { MessageEmbed } = require("discord.js"); +block = "⬛"; +heart = "🟥"; + +module.exports = { + name: "ship", + description: "Ship an user to an user", + usage: "(User) (User)", + category: "Fun", + options: [ + { + type: 6, + name: "1stuser", + description: "The user you want to ship", + required: true, + }, + { + type: 6, + name: "2nduser", + description: "The user you want to ship", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user1 = interaction.guild.members.cache.get(args[0]).user.username; + const user2 = interaction.guild.members.cache.get(args[1]).user.username; + let loveEmbed = new MessageEmbed() + .setColor("dd2e44") + .setFooter(`Shipped by ${interaction.member.user.tag}`) + .setTimestamp() + .setTitle(`💘 | Shipping ${user1} and ${user2} | 💘`) + .setDescription(`🔻 | ${user1} \n${ship()}\n🔺 | ${user2}`); + await interaction.followUp({ embeds: [loveEmbed] }); + }, +}; +function ship() { + const hearts = Math.floor(Math.random() * 100); + const hearte = hearts / 10; + const str = `${heart.repeat(hearte)}${block.repeat(10 - hearte)} ${hearts}%`; + return str; +} diff --git a/command/Fun/sr.js b/command/Fun/sr.js @@ -0,0 +1,28 @@ +const axios = require("axios"); + +module.exports = { + name: "superscript", + description: "Superscript your text", + usage: "(text)", + category: "Fun", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "text", + description: "The text you want to convert", + required: true, + }, + ], + run: async (client, interaction, args) => { + const text = args[0]; + if (text.includes("@")) + return await interaction.followUp({ + content: "Text cannot includes '@'", + }); + const data = await axios + .get(`${process.env.api}/api/v1/fun/superscript?text=${text}`) + .then(res => res.data.text); + await interaction.followUp({ content: data }); + }, +}; diff --git a/command/Fun/triggered.js b/command/Fun/triggered.js @@ -0,0 +1,25 @@ +const { Canvas } = require("canvacord"); +const { MessageAttachment } = require("discord.js"); +module.exports = { + name: "triggered", + usage: "{User}", + description: "Have a trigger effect on a user's avatar", + category: "Fun", + options: [ + { + type: 6, + name: "user", + description: "The user you want to use the effect", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const user = interaction.guild.members.cache.get(args[0]); + const ava = user.user.displayAvatarURL({ format: "png", size: 2048 }); + const imga = await Canvas.trigger(ava); + await interaction.followUp({ + files: [new MessageAttachment(imga, "image.gif")], + }); + }, +}; diff --git a/command/Information/avatar.js b/command/Information/avatar.js @@ -0,0 +1,50 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "avatar", + description: "Show user's avatar in different formats", + type: "CHAT_INPUT", + usage: "{User}", + category: "Information", + options: [ + { + type: 6, + name: "user", + description: "The user you want to see", + required: false, + }, + ], + run: async (client, interaction, args) => { + const member = + interaction.guild.members.cache.get(args[0]) || interaction.member; + const embed = new MessageEmbed() + .setAuthor( + member.user.tag, + member.user.displayAvatarURL({ dynamic: true, size: 1024 }) + ) + .setColor(client.color) + .setTitle(`${member.user.username}'s Avatar`) + .setDescription( + `\`Links:\` **[png](${member.user.displayAvatarURL({ + format: "png", + size: 2048, + })}) | [jpg](${member.user.displayAvatarURL({ + format: "jpg", + size: 2048, + })}) | [gif](${member.user.displayAvatarURL({ + format: "gif", + size: 2048, + dynamic: true, + })}) | [webp](${member.user.displayAvatarURL({ + format: "webp", + size: 2048, + })})**` + ) + .setImage( + member.user.avatarURL({ size: 2048, dynamic: true, format: "png" }) + ) + .setFooter(`Made by ${client.author}`) + .setURL(client.web) + .setTimestamp(); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Information/banner.js b/command/Information/banner.js @@ -0,0 +1,57 @@ +const { MessageEmbed } = require("discord.js"); +const axios = require("axios"); + +module.exports = { + name: "banner", + description: "Show user's banner", + type: "CHAT_INPUT", + usage: "{User}", + category: "Information", + options: [ + { + type: 6, + name: "user", + description: "The user you want to see", + required: false, + }, + ], + run: async (client, interaction, args) => { + const { user } = + interaction.guild.members.cache.get(args[0]) || interaction.member; + axios + .get(`https://discord.com/api/v9/users/${user.id}`, { + headers: { + Authorization: `Bot ${client.token}`, + }, + }) + .then(async res => { + const { banner, accent_color } = res.data; + + if (banner) { + const extension = banner.startsWith("a_") ? ".gif" : ".png"; + const url = `https://cdn.discordapp.com/banners/${user.id}/${banner}${extension}?size=2048`; + + const embed = new MessageEmbed() + .setTitle(`${user.tag}'s Banner`) + .setImage(url) + .setColor(accent_color || "BLUE"); + + await interaction.followUp({ embeds: [embed] }); + } else { + if (accent_color) { + const embed = new MessageEmbed() + .setDescription( + `**${user.tag}** does not have a banner but they have an accent color` + ) + .setColor(accent_color); + + await interaction.followUp({ embeds: [embed] }); + } else { + await interaction.followUp({ + content: `**${user.tag}** does not have a banner nor do they have an accent color.`, + }); + } + } + }); + }, +}; diff --git a/command/Information/botinfo.js b/command/Information/botinfo.js @@ -0,0 +1,47 @@ +const { MessageEmbed, version: djsversion } = require("discord.js"); +const version = require("../../package.json").version; +const { utc } = require("moment"); +const os = require("os"); +const ms = require("ms"); +module.exports = { + name: "botinfo", + description: "Check the info of the bot", + category: "Information", + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const core = os.cpus()[0]; + const embed = new MessageEmbed() + .setURL(client.web) + .setThumbnail(client.user.displayAvatarURL()) + .setColor(interaction.guild.me.displayHexColor || client.color) + .addField( + "General", + `**❯ Client:** ${client.user.tag} (${client.user.id}) + **❯ Commands:** ${client.commands.size} + **❯ Servers:** ${client.guilds.cache.size.toLocaleString()} + **❯ Users:** ${client.guilds.cache + .reduce((a, b) => a + b.memberCount, 0) + .toLocaleString()} + **❯ Channels:** ${client.channels.cache.size.toLocaleString()} + **❯ Creation Date:** ${utc(client.user.createdTimestamp).format( + "Do MMMM YYYY HH:mm:ss" + )} + **❯ Node.js:** ${process.version} + **❯ Version:** v${version} + **❯ Discord.js:** v${djsversion} + \u200b` + ) + .setColor(client.color) + .addField( + "System", + `**❯ Platform:** ${process.platform} + **❯ Uptime:** ${ms(os.uptime() * 1000, { long: true })} + **❯ CPU:** + \u3000 Cores: ${os.cpus().length} + \u3000 Model: ${core.model} + \u3000 Speed: ${core.speed}MHz` + ) + .setTimestamp(); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Information/help.js b/command/Information/help.js @@ -0,0 +1,181 @@ +const Discord = require("discord.js"); +module.exports = { + name: "help", + usage: "(Command/Category)", + description: "Shows all available bot commands", + category: "Information", + options: [ + { + type: 3, + name: "command", + description: "The command you want to see", + required: false, + }, + ], + run: async (client, interaction, args, utils) => { + if (!args[0]) { + await interaction.deleteReply(); + const emoji = { + CODM: "<a:AA99_codm_logo:840231960441257995>", + Config: "<:staff:840231971526803467>", + Economy: client.currency, + Fun: "<a:lollll:804325253265621012>", + Moderation: "🔨", + Utilities: "⚙", + Music: "<a:music:840231980692144130>", + Giveaway: "<a:DankCat:798963811902160896>", + Information: "ℹ", + }; + const directories = [ + ...new Set(client.slashCommands.map(cmd => cmd.directory)), + ]; + const categories = directories.map(dir => { + if (dir == "Owner") return; + const getCmds = client.slashCommands + .filter(c => c.directory == dir) + .map(cmd => { + return { + name: cmd.name || "No command name", + }; + }); + return { + directory: dir, + commands: getCmds, + }; + }); + const embed = new Discord.MessageEmbed() + .setTitle(`**${client.user.username} commands**`) + .setDescription(`Please choose a category in the dropdown menu`) + .setColor(client.color) + .setTimestamp() + .setAuthor( + `Requested by ${interaction.user.tag}`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .addField( + "**Invite Link**", + `**Invite me to your server by clicking [here](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=4231314550&scope=bot%20applications.commands)**` + ) + .addField( + "**Support Server Invite**", + "**Join the support server by clicking [here](https://discord.gg/SbQHChmGcp)**" + ) + .addField( + "**Premium**", + "**You can either boost support server or subscribe to developer's team [Ko-fi](https://ko-fi.com/cathteam) or gift a nitro to one of the developer team **" + ) + .setFooter(`Made by ${client.author}`); + const components = state => [ + new Discord.MessageActionRow().addComponents( + new Discord.MessageSelectMenu() + .setCustomId("help-menu") + .setPlaceholder(`Please select a category`) + .setDisabled(state) + .addOptions( + categories.map(cmd => { + return { + label: cmd.directory, + value: cmd.directory, + description: `Commands from ${cmd.directory} category`, + emoji: emoji[cmd.directory] || null, + }; + }) + ) + ), + ]; + + const msg = await interaction.channel.send({ + embeds: [embed], + components: components(false), + }); + const filter = m => m.user.id === interaction.user.id; + const collector = interaction.channel.createMessageComponentCollector({ + filter, + componentType: "SELECT_MENU", + time: 60000, + }); + collector.on("collect", async interaction => { + const [directory] = interaction.values; + const category = categories.find(u => u.directory === directory); + const newembed = new Discord.MessageEmbed() + .setTitle( + `${emoji[directory]}${directory} Commands${emoji[directory]}` + ) + .setAuthor( + `Requested by ${interaction.user.tag}`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTimestamp() + .setColor(client.color) + .setFooter(`Please use /help (Command Name) for more details`) + .setDescription( + category.commands + .map(cmd => { + return [`\`${cmd.name}\``]; + }) + .join(", ") + ); + interaction.reply({ embeds: [newembed] }); + }); + collector.on("end", () => msg.edit({ components: components(true) })); + } else { + const command = client.slashCommands.get(args[0].toLowerCase()); + if (!command) { + await interaction.followUp({ + content: `There isn't any command or category named "${args[0]}"`, + }); + } else { + if (command.UserPerm && Array.isArray(command.UserPerm)) { + UserPermissions = command.UserPerm; + } else UserPermissions = [command.UserPerm ? command.UserPerm : ""]; + if (command.BotPerm && Array.isArray(command.BotPerm)) { + BotPermissions = command.BotPerm; + } else BotPermissions = [command.BotPerm ? command.BotPerm : ""]; + const BotPerms = BotPermissions.map(x => + x + .split("_") + .map(y => y[0] + y.substring(1, y.length).toLowerCase()) + .join(" ") + ).join(", "); + const UserPerms = UserPermissions.map(x => + x + .split("_") + .map(y => y[0] + y.substring(1, y.length).toLowerCase()) + .join(" ") + ).join(", "); + const embed = new Discord.MessageEmbed() + .setTitle(`"${command.name}" command details`) + .addField( + "**Command**:", + command.name ? `\`${command.name}\`` : "N/A" + ); + if (command.usage) { + embed.addField("**Usage**:", `\`/${command.name} ${command.usage}\``); + } else { + embed.addField("**Usage**:", `\`/${command.name}\``); + } + if (command.description) { + embed.addField("**Description**:", command.description); + } + if (command.timeout) { + embed.addField("**Cooldown**:", utils.timer(command.timeout)); + } + if (command.UserPerm) { + embed.addField("**Required User Permission**:", UserPerms); + } + if (command.BotPerm) { + embed.addField("**Required Bot Permission**:", BotPerms); + } + embed + .setFooter( + `Requested by ${interaction.user.tag}`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTimestamp() + .setURL(client.web) + .setColor(client.color); + await interaction.followUp({ embeds: [embed] }); + } + } + }, +}; diff --git a/command/Information/messageinfo.js b/command/Information/messageinfo.js @@ -0,0 +1,41 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "messageinfo", + category: "Information", + type: "CHAT_INPUT", + description: "Check the info of a message", + options: [ + { + type: 3, + name: "message", + description: "The message you want to see", + required: true, + }, + ], + run: async (client, interaction, args) => { + try { + await interaction.channel.messages.fetch(args[0]).catch(async err => { + return await interaction.followUp({ + content: "Message not found in this channel..", + }); + }); + const msg = await interaction.channel.messages.cache.get(args[0]); + const hasImage = msg.attachments.size && msg.attachments.first().width; + const embed = new MessageEmbed() + .setColor(msg.member ? msg.member.displayHexColor : client.color) + .setImage(hasImage ? msg.attachments.first().url : null) + .setAuthor( + msg.author.tag, + msg.author.displayAvatarURL({ format: "png", dynamic: true }) + ) + .addField("Content", msg.content || "No content") + .setTimestamp(msg.createdAt) + .addField("ID", msg.id) + .setFooter(`Made by ${client.author}`) + .addField("Jump", `[Click Here to Jump](${msg.url})`); + return await interaction.followUp({ embeds: [embed] }); + } catch (err) { + console.log(err); + } + }, +}; diff --git a/command/Information/ping.js b/command/Information/ping.js @@ -0,0 +1,31 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "ping", + description: "Check bot latency to Discord API", + type: "CHAT_INPUT", + category: "Information", + run: async (client, interaction, args) => { + const msg = await interaction.channel.send(`Pinging...`); + const messageping = msg.createdTimestamp - interaction.createdTimestamp; + await msg.delete(); + const Embed = new MessageEmbed() + .setTitle("🏓 Pong!") + .setAuthor( + `${interaction.user.username}`, + interaction.user.displayAvatarURL() + ) + .setDescription( + `📨 • **Message Latency** \`${Math.floor( + messageping + )}ms\`\n🛰️ • **Bot Latency** \`${Math.round(client.ws.ping)}ms\`` + ) + .setColor( + messageping < 350 + ? "GREEN" + : messageping < 500 && messageping > 350 + ? "YELLOW" + : "RED" + ); + await interaction.followUp({ embeds: [Embed] }); + }, +}; diff --git a/command/Information/roleinfo.js b/command/Information/roleinfo.js @@ -0,0 +1,85 @@ +const { CommandInteracion, Client, MessageEmbed } = require("discord.js"); +const moment = require("moment"); +module.exports = { + name: "roleinfo", + description: "Get information of a role", + category: "Infromation", + options: [ + { + name: "role", + type: "ROLE", + description: "The role you want to see", + required: true, + }, + ], + type: "CHAT_INPUT", + /** + * + * @param {Client} client + * @param {CommandInteracion} interaction + * @param {String[]} args + */ + run: async (client, interaction, args, utils) => { + const role = interaction.guild.roles.cache.get(args[0]); + const position = `\`${ + interaction.guild.roles.cache.size - role.position + }\`/\`${interaction.guild.roles.cache.size}\``; + const embed = new MessageEmbed() + .setTimestamp() + .setURL(client.web) + .setAuthor( + interaction.member.nickname, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTitle("Role Info") + .setFooter(`Made by ${client.author}`) + .setColor(role.color) + .addFields( + { + name: "ID", + value: role.id, + }, + { + name: "Name", + value: role.name, + inline: true, + }, + { + name: "Color", + value: role.hexColor, + inline: true, + }, + { + name: "Position", + value: position, + inline: true, + }, + { + name: `Hoisted`, + value: `${role.hoist ? "Yes" : "No"}`, + inline: true, + }, + { + name: "Mentionable", + value: `${role.mentionable ? "Yes" : "No"}`, + inline: true, + }, + { + name: "Bot Role", + value: `${role.managed ? "Yes" : "No"}`, + inline: true, + }, + { + name: "Creation Date", + value: `\`${moment(role.createdAt).format("DD/MMM/YYYY")}\``, + inline: true, + }, + { + name: "Permissions", + value: utils.fixPermissions(role.permissions.toArray()), + inline: true, + } + ); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Information/servericon.js b/command/Information/servericon.js @@ -0,0 +1,17 @@ +const { MessageEmbed } = require("discord.js"); + +module.exports = { + name: "servericon", + description: "View the icon of the server", + category: "Information", + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const Embed = new MessageEmbed() + .setTitle(`Icon of ${interaction.guild.name}`) + .setURL(client.web) + .setTimestamp() + .setFooter(`Requested by ${interaction.user.tag}`) + .setImage(interaction.guild.iconURL({ dynamic: true, size: 2048 })); + await interaction.followUp({ embeds: [Embed] }); + }, +}; diff --git a/command/Information/serverinfo.js b/command/Information/serverinfo.js @@ -0,0 +1,155 @@ +const { MessageEmbed } = require("discord.js"); +const moment = require("moment"); +const filterLevels = { + DISABLED: "Off", + MEMBERS_WITHOUT_ROLES: "No Role", + ALL_MEMBERS: "Everyone", +}; + +const verificationLevels = { + NONE: "None", + LOW: "Low", + MEDIUM: "Medium", + HIGH: "High", + VERY_HIGH: "Very High", +}; + +const regions = { + brazil: "Brazil", + europe: "Europe", + hongkong: "Hong Kong", + india: "India", + japan: "Japan", + russia: "Russia", + singapore: "Singapore", + southafrica: "South Africa", + sydeny: "Sydeny", + "us-central": "US Central", + "us-east": "US East", + "us-west": "US West", + "us-south": "US South", +}; + +module.exports = { + name: "serverinfo", + description: "Check the info of the server", + category: "Information", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "server", + description: "The server you want to see (Paste Server ID)", + required: false, + }, + ], + run: async (client, interaction, args, utils) => { + try { + const g = client.guilds.cache.get(args[0]) || interaction.guild; + const vanityCode = g.vanityURLCode; + let vanityInvite = `https://discord.gg/${vanityCode}`; + if (vanityCode === null) vanityInvite = "No custom URL"; + const members = g.members.cache; + const roles = g.roles.cache + .sort((a, b) => b.position - a.position) + .map(role => role.toString()); + const owner = await g.fetchOwner(); + const voiceChannel = g.channels.cache.filter( + ch => ch.type === "GUILD_VOICE" + ).size; + const textChannel = g.channels.cache.filter( + ch => ch.type === "GUILD_TEXT" + ).size; + const categoryChannel = g.channels.cache.filter( + ch => ch.type === "GUILD_CATEGORY" + ).size; + const embed = new MessageEmbed() + .setTimestamp() + .setTitle("**Server Information**") + .setAuthor(`${g.name}`, g.iconURL({ dynamic: true })) + .setColor(client.color) + .setThumbnail(g.iconURL({ dynamic: true, size: 1024 })) + .addField(`🎫 Name of server:`, g.name, true) + .addField(`🆔 ID of server`, g.id, true) + .addField(`🔗 Vanity Link`, `${vanityInvite}`, true) + .addField("👩‍💻 Owner", `${owner}`, true) + .addField("👩‍💻 Owner ID", `\`${owner.id}\``, true) + .addField(`👥 No. of Members`, g.memberCount.toString(), true) + .addField( + `🤖 No. of Bots:`, + members.filter(member => member.user.bot).size.toString(), + true + ) + .addField( + `🚶 Humans:`, + members.filter(member => !member.user.bot).size.toString(), + true + ) + .addField( + "🧷 Channels", + `#️⃣ ${textChannel} **Text** Channels\n 🔊 ${voiceChannel} **Voice** Channels\n 📁 ${categoryChannel} **Categories**`, + true + ) + .addField(`😗 Emojis:`, g.emojis.cache.size.toString(), true) + .addField( + `👻 Animated Emoji\'s:`, + g.emojis.cache.filter(emoji => emoji.animated).size.toString(), + true + ) + .addField( + `👔 Roles [${roles.length}]`, + roles.length < 10 + ? roles.join(" **|** ") + : roles.length > 10 + ? `${roles.slice(0, 10).join(" **|** ")}\n+${ + roles.length - 10 + } roles...` + : "None", + true + ) + .addField(`📃 Description`, g.description || "No Description", true) + .addField( + `♨ Boost`, + `Tier: ${ + g.premiumTier == "TIER_3" + ? "3" + : g.premiumTier == "TIER_2" + ? "2" + : g.premiumTier == "TIER_1" + ? "1" + : "0" + }\nCount: ${g.premiumSubscriptionCount || "0"}`, + true + ) + .addField( + "💢 Explicit Filter", + filterLevels[g.explicitContentFilter], + true + ) + .addField( + `🚧 Verification Level`, + verificationLevels[g.verificationLevel], + true + ) + .addField( + "🗺 Community Features", + utils.fixFeatures(g.features) || "No Community Features", + true + ) + .addField("👨🏻‍🤝‍👨🏻 Partnered", g.partnered ? "Yes" : "No", true) + .addField("✅ Verified", g.verified ? "Yes" : "No", true) + .addField( + `📅 Created at`, + `${moment(g.createdTimestamp).format("LL")} ${moment( + g.createdTimestamp + ).format("LTS")} (${moment(g.createdTimestamp).fromNow()})`, + true + ) + .setURL(client.web) + .setFooter(`Made by ${client.author}`); + await interaction.followUp({ embeds: [embed] }); + } catch (e) { + console.log(e); + } + }, +}; diff --git a/command/Information/userinfo.js b/command/Information/userinfo.js @@ -0,0 +1,134 @@ +const { MessageEmbed } = require("discord.js"); +const moment = require("moment"); + +module.exports = { + name: "userinfo", + description: "Check the info of a user", + usage: "{User}", + category: "Information", + options: [ + { + type: 6, + name: "user", + description: "The user you want to see", + required: false, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args, utils) => { + const member = + interaction.guild.members.cache.get(args[0]) || interaction.member; + const flags = { + DISCORD_EMPLOYEE: "Discord Staff<:staff:840231971526803467>", + PARTNERED_SERVER_OWNER: + "Partnered Server Owner<:partner:840231939944480829>", + BUGHUNTER_LEVEL_1: "Discord Bug Hunter<:bughunter:840231967600803920>", + BUGHUNTER_LEVEL_2: "Discord Bug Hunter<:bughunterlv2:840231970017771571>", + HYPESQUAD_EVENTS: "HypeSquad Events<:HypeSquad:840231908599922721>", + HOUSE_BRAVERY: "HypeSquad Bravery<:bravery:840231941974655007>", + HOUSE_BRILLIANCE: "HypeSquad Brilliance<:brilliance:840231943764443136>", + HOUSE_BALANCE: "HypeSquad Balance<:balance:840231925876523018>", + EARLY_SUPPORTER: "Early Supporter<:earlysupporter:840231983216984085>", + TEAM_USER: "Team User", + SYSTEM: "System", + VERIFIED_BOT: "Verified Bot<:VerifiedBot:840231982054375425>", + EARLY_VERIFIED_BOT_DEVELOPER: + "Early Verified Bot Developer<:discord_bot_dev:840231906200387666>", + DISCORD_CERTIFIED_MODERATOR: "Discord Certified Moderator", + }; + let status; + switch (member.presence.status) { + case "online": + status = "<:online:840231921123721237>Online"; + break; + case "dnd": + status = "<:do_not_disturb:840231907715448842>Do Not Disturb"; + break; + case "idle": + status = "<:idle:840231935485149184>Idle"; + break; + case "offline": + status = "<:offline:840231954897305620>Offline"; + break; + } + let x = Date.now() - member.user.createdAt; + let y = + Date.now() - interaction.guild.members.cache.get(member.id).joinedAt; + let created = Math.floor(x / 86400000); + let joined = Math.floor(y / 86400000); + let nickname = + member.nickname !== undefined && member.nickname !== null + ? member.nickname + : "None"; + const roles = member.roles.cache + .filter(r => r.id != interaction.guild.id) + .sort((a, b) => b.position - a.position) + .map(role => role.toString()) + .slice(0, -1); + const userFlags = member.user.flags.toArray(); + let createdate = moment(member.user.createdAt).format( + "dddd, MMMM Do YYYY, HH:mm:ss" + ); + let joindate = moment(member.joinedAt).format( + "dddd, MMMM Do YYYY, HH:mm:ss" + ); + let activities; + if (member.presence.activities[0] && member.presence.activities[1]) { + activities = member.presence.activities[1].name; + } else if ( + member.presence.activities[0] && + !member.presence.activities[1] + ) { + activities = "None"; + } else activities = "None"; + const embed = new MessageEmbed() + .setAuthor( + member.user.tag, + member.user.displayAvatarURL({ dynamic: true, size: 2048 }) + ) + .setTimestamp() + .setColor(client.color) + .setURL(client.web) + .setFooter(`Made by ${client.author}`) + .setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 512 })) + .setColor(member.displayHexColor || "02023a") + .addField( + "User", + `**❯ Username:** ${member.user.username} + **❯ Discriminator:** ${member.user.discriminator} + **❯ Nickname:** ${nickname} + **❯ ID:** ${member.id} + **❯ Flags:** ${ + userFlags.length + ? userFlags.map(flag => flags[flag]).join(" **|** ") + : "None" + } + **❯ Avatar:** [Link to avatar](${member.user.displayAvatarURL({ + dynamic: true, + size: 2048, + })}) + **❯ Time Created:** ${createdate} \nSince ${created} day(s) ago + **❯ Status:** ${status} + **❯ Game:** ${activities} + \u200b` + ) + .addField( + "Member", + `**❯ Highest Role:** ${ + member.roles.highest.id === interaction.guild.id + ? "None" + : member.roles.highest.name + } + **❯ Server Join Date:** ${joindate} \nSince ${joined} day(s) ago + **❯ Roles [${roles.length}]:** ${ + roles.length < 10 + ? roles.join(" **|** ") + : roles.length > 10 + ? utils.trimArray(roles) + : "None" + } + \u200b` + ); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Moderation/purge.js b/command/Moderation/purge.js @@ -0,0 +1,67 @@ +const { MessageEmbed } = require("discord.js"); + +module.exports = { + name: "clear", + description: "Clear messages in a specific channel", + options: [ + { + name: "channel", + description: "Channel where the messages to be deleted", + type: "CHANNEL", + required: true, + }, + { + name: "amount", + description: "Amount of message in range of 1-100 to be deleted", + type: "NUMBER", + required: true, + }, + ], + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + let query = interaction.options.get("amount"); + let ch = interaction.options.get("channel"); + let channel = interaction.guild.channels.cache.get(ch.value); + if (query.value > 100) { + return interaction.followUp({ + content: "The amount of messages must be in range of 1-100", + }); + } + if (channel.type !== "GUILD_TEXT") { + return interaction.followUp({ + content: "Please provide a text channel instead of voice or category", + }); + } + await channel.bulkDelete(query.value, true).then(async m => { + const msg = await channel.send({ + embeds: [ + new MessageEmbed() + .setTitle(`Message Cleared`) + .addField( + "**Moderator**", + `${ + interaction.member.nickname + ? interaction.member.nickname + : interaction.user.username + }`, + true + ) + .addField( + "Amount of Message Deleted", + `${m.size}/${query.value}`, + true + ) + .setTimestamp() + .setFooter( + interaction.member.nickname + ? interaction.member.nickname + : interaction.user.username, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setColor(client.color), + ], + }); + setTimeout(() => msg.delete(), 10000); + }); + }, +}; diff --git a/command/Owner/eval.js b/command/Owner/eval.js @@ -0,0 +1,125 @@ +const Discord = require("discord.js"); +module.exports = { + name: "eval", + category: "Owner", + aliases: ["e"], + usage: "(Code)", + Owner: true, + description: "Eval something", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "code", + description: "The code to eval", + required: true, + }, + ], + run: async (client, interaction, args) => { + let code = args[0]; + function CheckFilter(object) { + if (typeof object === "string") { + object = object.replace( + new RegExp(client.token || process.env.TOKEN, "gi"), + "Cannot eval Token" + ); + } else if (typeof object === "object") { + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + object[i] = CheckFilter(object[i]); + } + } else { + for (let key in object) { + object[key] = CheckFilter(object[key]); + } + } + } + return object; + } + let oldSend = Discord.TextChannel.prototype.send; + Discord.TextChannel.prototype.send = async function send(content, options) { + return oldSend.bind(this)(CheckFilter(content), CheckFilter(options)); + }; + let evaled; + try { + evaled = eval(code); + if (evaled instanceof Promise) evaled = await evaled; + } catch (err) { + evaled = err; + } + if (typeof evaled !== "string") evaled = require("util").inspect(evaled); + evaled = new (require("string-toolkit"))().toChunks(evaled, 750); + let reactions = ["❌", "⏪", "◀️", "⏹️", "▶️", "⏩"], + page = 0, + evaledEmbed = new Discord.MessageEmbed() + .setColor(client.color) + .setDescription(`\`\`\`js\n${evaled[0]}\n\`\`\``) + .setTimestamp() + .setAuthor( + `Evaled by ${interaction.user.tag}`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .addField(`Type of`, `\`\`\`js\n${typeof evaled[0]}\n\`\`\``); + let mainMessage = await interaction.channel.send({ embeds: [evaledEmbed] }); + Discord.TextChannel.prototype.send = oldSend; + await Promise.all( + (evaled.length === 1 ? ["❌", "⏹️"] : reactions).map(r => + mainMessage.react(r) + ) + ); + let filter = (reaction, user) => + (evaled.length === 1 ? ["❌", "⏹️"] : reactions).some( + e => e === reaction.emoji.name + ) && user.id === interaction.user.id; + let collector = mainMessage.createReactionCollector(filter, { + time: 300000, + }); + collector.on("collect", async (reaction, user) => { + switch (reaction.emoji.name) { + case "❌": + await collector.stop(); + return mainMessage.delete(); + break; + case "⏪": + if (evaled.length === 1 || page === 0) return; + page = 0; + break; + case "◀️": + if (evaled.length === 1) return; + if (page === 0) { + page = evaled.length - 1; + } else { + page -= 1; + } + break; + case "⏹️": + await collector.stop(); + for (let reaction of mainMessage.reactions.cache.map(e => e)) { + await reaction.users.remove(client.user.id); + } + return; + break; + case "▶️": + if (evaled.length === 1) return; + if (page === evaled.length - 1) { + page = 0; + } else { + page += 1; + } + break; + case "⏩": + if (evaled.length === 1 || page === evaled.length - 1) return; + page = evaled.length - 1; + break; + } + evaledEmbed = new Discord.MessageEmbed() + .setColor(interaction.guild.me.displayColor) + .setDescription(`\`\`\`js\n${evaled[page]}\n\`\`\``) + .addField(`Type of`, `\`\`\`js\n${typeof evaled[page]}\n\`\`\``); + + await mainMessage.edit({ + embeds: [evaledEmbed], + }); + }); + }, +}; diff --git a/command/Owner/guilds.js b/command/Owner/guilds.js @@ -0,0 +1,24 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "guilds", + category: "Owner", + description: "Check top 10 guilds of the bot", + Owner: true, + run: async (client, interaction, args) => { + const guilds = client.guilds.cache + .sort((a, b) => b.memberCount - a.memberCount) + .first(10); + const description = guilds + .map((guild, index) => { + return `${index + 1}) ${guild.name} -> ${guild.memberCount} members`; + }) + .join("\n"); + let embed = new MessageEmbed() + .setTitle("Guilds") + .setDescription(description) + .setColor(client.color) + .setFooter(`Made by ${client.author}`) + .setTimestamp(); + interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Owner/restart.js b/command/Owner/restart.js @@ -0,0 +1,13 @@ +module.exports = { + name: "restart", + category: "Owner", + description: "Restart the bot", + Owner: true, + run: async (client, interaction, args) => { + const msg = await interaction.channel.send("Restarting..."); + await client.destroy(); + await client.login(process.env.TOKEN); + await msg.delete(); + await interaction.followUp("Restarted"); + }, +}; diff --git a/command/Utilities/afk.js b/command/Utilities/afk.js @@ -0,0 +1,35 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "afk", + description: "Tell someone you are AFK.", + usage: "{Status}", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "status", + description: "The status that shows to user while you are AFK", + required: false, + }, + ], + run: async (client, interaction, args) => { + let uuser = interaction.guild.members.cache.get(interaction.user.id); + const content = args[0] || "No status provided."; + uuser.setNickname(`[AFK]${interaction.user.username}`); + await client.data.AFK(interaction.user.id, content); + const embed = new MessageEmbed() + .setDescription( + `${interaction.user.username} is set into AFK.\nStatus : ${content}` + ) + .setTimestamp() + .setFooter(`Made by ${client.author}`) + .setColor(client.color) + .setAuthor( + interaction.user.username, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setURL(client.web); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Utilities/docs.js b/command/Utilities/docs.js @@ -0,0 +1,27 @@ +const fetch = require("node-fetch"); +module.exports = { + name: "docs", + usage: "(Query)", + description: "Search the discord.js docs for something!", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "query", + description: "The query you want to search", + required: true, + }, + ], + run: async (client, interaction, args) => { + const query = args.join(" "); + fetch( + `https://djsdocs.sorta.moe/v2/embed?src=stable&q=${encodeURIComponent( + query + )}` + ) + .then(res => res.json()) + .then(async data => { + await interaction.followUp({ embeds: [data] }); + }); + }, +}; diff --git a/command/Utilities/emoji.js b/command/Utilities/emoji.js @@ -0,0 +1,83 @@ +const { Util } = require("discord.js"); +module.exports = { + name: "emoji", + usage: "(Emoji)", + description: "Show an emoji URL", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "first", + description: "The first emoji", + required: true, + }, + { + type: 3, + name: "second", + description: "The second emoji", + required: false, + }, + { + type: 3, + name: "third", + description: "The third emoji", + required: false, + }, + { + type: 3, + name: "forth", + description: "The forth emoji", + required: false, + }, + { + type: 3, + name: "fifth", + description: "The fifth emoji", + required: false, + }, + { + type: 3, + name: "sixth", + description: "The sixth emoji", + required: false, + }, + { + type: 3, + name: "seventh", + description: "The seventh emoji", + required: false, + }, + { + type: 3, + name: "eighth", + description: "The eighth emoji", + required: false, + }, + { + type: 3, + name: "ninth", + description: "The ninth emoji", + required: false, + }, + { + type: 3, + name: "tenth", + description: "The tenth emoji", + required: false, + }, + ], + run: async (client, interaction, args) => { + await interaction.deleteReply(); + for (const rawEmoji of args) { + const parsedEmoji = Util.parseEmoji(rawEmoji); + if (parsedEmoji.id) { + const extension = parsedEmoji.animated ? ".gif" : ".png"; + const url = `https://cdn.discordapp.com/emojis/${ + parsedEmoji.id + extension + }`; + await interaction.channel.send({ content: `Emoji URL:\n${url}` }); + } + } + }, +}; diff --git a/command/Utilities/hexcolor.js b/command/Utilities/hexcolor.js @@ -0,0 +1,85 @@ +const Canvas = require("canvas"); +const { MessageEmbed, MessageAttachment } = require("discord.js"); +const axios = require("axios"); + +module.exports = { + name: "hexcolor", + usage: "(Hex Color Code)", + description: "Get Hex and RGB info of a color", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "code", + description: "Color code you want to see (Example: #FF0000)", + required: true, + }, + ], + run: async (client, interaction, args) => { + let color; + if (args[0]) { + if (/(#|0x)([0-9A-F]{6})/i.test(args[0])) { + color = args[0].match(/(#|0x)([0-9A-F]{6})/i)[2]; + } else { + return await interaction.followUp({ + content: "Please give a valid Hex Color Code", + }); + } + } else { + color = interaction.member.displayHexColor; + } + try { + const aa = color.replace("#", "", "0x", ""); + const colour = await axios.get( + `https://www.thecolorapi.com/scheme?hex=${aa}` + ); + const canvas = Canvas.createCanvas(200, 200); + const ctx = canvas.getContext("2d"); + ctx.beginPath(); + ctx.rect(0, 0, 200, 200); + ctx.fillStyle = `${colour.data.seed.hex.value}`; + ctx.fill(); + const rightpic = new MessageAttachment(canvas.toBuffer(), "wea.jpg"); + const canvasx = Canvas.createCanvas(500, 100); + const ctxt = canvasx.getContext("2d"); + let y = canvasx.height / 2; + ctxt.font = "12px Roboto"; + ctxt.textAlign = "center"; + let addup = 0; + for (let i = 0; i < 5; i++) { + ctxt.beginPath(); + ctxt.rect(addup, 0, 100, 100); + ctxt.fillStyle = `${colour.data.colors[i].hex.value}`; + ctxt.fill(); + addup = addup + 100; + ctxt.beginPath(); + ctxt.rect(addup - 80, y - 15, 60, 30); + ctxt.fillStyle = `black`; + ctxt.fill(); + ctxt.fillStyle = `white`; + ctxt.fillText( + `${colour.data.colors[i].hex.value}`, + addup - 51, + y + 4.3 + ); + } + const attachment = new MessageAttachment(canvasx.toBuffer(), "color.jpg"); + const embed = new MessageEmbed() + .setColor(`0x${colour.data.seed.hex.value}`) + .setDescription( + `\`HEX: ${colour.data.seed.hex.value} RGB: ${colour.data.seed.rgb.value}\`\n🔽Color Scheme🔽` + ) + .setTitle("Color Information (Click here for more info)") + .setURL(`https://www.colorhexa.com/${colour.data.seed.hex.clean}`) + .setImage("attachment://color.jpg") + .setThumbnail("attachment://wea.jpg"); + await interaction.followUp({ + embeds: [embed], + files: [attachment, rightpic], + }); + } catch (e) { + console.log(e); + } + }, +}; diff --git a/command/Utilities/invite.js b/command/Utilities/invite.js @@ -0,0 +1,32 @@ +const { MessageEmbed } = require("discord.js"); + +module.exports = { + name: "invite", + description: "Get bot invite link or get support", + category: "Utilities", + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + var embed = new MessageEmbed() + .setFooter(`Made by ${client.author}`) + .setColor(client.color) + .setTimestamp() + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTitle(`Support/Invite`) + .addField( + "**Invite Link**", + `**Invite me to your server by clicking [here](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=4231314550&scope=bot%20applications.commands)**` + ) + .addField( + "**Support Server Invite**", + "**Join the support server by clicking [here](https://discord.gg/SbQHChmGcp)**" + ) + .addField( + "**Premium**", + "**You can either boost support server or subscribe to developer's team [Ko-fi](https://ko-fi.com/cathteam) or gift a nitro to one of the developer team **" + ); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Utilities/permission.js b/command/Utilities/permission.js @@ -0,0 +1,118 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "permission", + usage: "(User)", + description: "Show user's permission in server/channel", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 6, + name: "user", + description: "The use you want to see", + required: false, + }, + ], + run: async (client, interaction, args, utils) => { + const yes = "✔️"; + const no = "❌"; + const x = "```"; + const s = "📛"; + const c = "♨️"; + + const permissions = [ + "CREATE_INSTANT_INVITE", + "KICK_MEMBERS", + "BAN_MEMBERS", + "ADMINISTRATOR", + "MANAGE_CHANNELS", + "MANAGE_GUILD", + "ADD_REACTIONS", + "VIEW_AUDIT_LOG", + "PRIORITY_SPEAKER", + "STREAM", + "VIEW_CHANNEL", + "SEND_MESSAGES", + "SEND_TTS_MESSAGES", + "MANAGE_MESSAGES", + "EMBED_LINKS", + "ATTACH_FILES", + "READ_MESSAGE_HISTORY", + "MENTION_EVERYONE", + "USE_EXTERNAL_EMOJIS", + "VIEW_GUILD_INSIGHTS", + "CONNECT", + "SPEAK", + "STREAM", + "MUTE_MEMBERS", + "DEAFEN_MEMBERS", + "MOVE_MEMBERS", + "USE_VAD", + "CHANGE_NICKNAME", + "MANAGE_NICKNAMES", + "MANAGE_ROLES", + "MANAGE_WEBHOOKS", + "MANAGE_EMOJIS_AND_STICKER", + "USE_VAD", + "PRIORITY_SPEAKER", + "REQUEST_TO_SPEAK", + "MANAGE_THREADS", + "USE_PUBLIC_THREADS", + "USE_PRIVATE_THREADS", + "USE_EXTERNAL_STICKERS", + "USE_APPLICATION_COMMANDS", + ]; + + let user = + interaction.guild.members.cache.get(args[0]) || interaction.member; + let userId = user.user.id; + let description = `Server - ${s}\nCurrent channel - ${c}\n\n${s} | ${c}\n`; + let embed = new MessageEmbed() + .setTitle(`${user.user.username} Permissions`) + .setColor(user.displayColor) + .setURL(client.web); + permissions.forEach(perm => { + description += `${user.permissions.has(perm) ? yes : no} | ${ + interaction.channel.permissionsFor(userId).has(perm) ? yes : no + } - ${perm + .replace("CREATE_INSTANT_INVITE", "Create Invite") + .replace("KICK_MEMBERS", "Kick Members") + .replace("BAN_MEMBERS", "Ban Members") + .replace("ADMINISTRATOR", "Administrator") + .replace("MANAGE_CHANNELS", "Manage Channels") + .replace("MANAGE_GUILD", "Manage Guild") + .replace("ADD_REACTIONS", "Add Reactions") + .replace("VIEW_AUDIT_LOG", "View Audit Log") + .replace("PRIORITY_SPEAKER", "Priority Speaker") + .replace("STREAM", "Video") + .replace("VIEW_CHANNEL", "View Channel") + .replace("SEND_MESSAGES", "Send Messages") + .replace("SEND_TTS_MESSAGES", "Send TTS Messages") + .replace("MANAGE_MESSAGES", "Manage Messages") + .replace("EMBED_LINKS", "Embed Links") + .replace("ATTACH_FILES", "Attach Files") + .replace("READ_MESSAGE_HISTORY", "Read Message History") + .replace("MENTION_EVERYONE", "Mention Everyone") + .replace("USE_EXTERNAL_EMOJIS", "Use External Emojis") + .replace("VIEW_GUILD_INSIGHTS", "View Guild Insights") + .replace("CONNECT", "Connect") + .replace("SPEAK", "Speak") + .replace("MUTE_MEMBERS", "Mute Members") + .replace("DEAFEN_MEMBERS", "Defean Members") + .replace("MOVE_MEMBERS", "Move Members") + .replace("USE_VAD", "Use VAD") + .replace("CHANGE_NICKNAME", "Change Nickname") + .replace("MANAGE_NICKNAMES", "Manage Nicknames") + .replace("MANAGE_ROLES", "Manage Roles") + .replace("MANAGE_WEBHOOKS", "Manage Webhooks") + .replace("MANAGE_EMOJIS_AND_STICKER", "Manage Emojis and Sticker") + .replace("MANAGE_THREADS", "Manage Threads") + .replace("USE_PUBLIC_THREADS", "Use Public Threads") + .replace("USE_PRIVATE_THREADS", "Use Private Threads") + .replace("USE_EXTERNAL_STICKERS", "Use External Stickers") + .replace("USE_APPLICATION_COMMANDS", "Use Application Commands")}\n`; + }); + embed.setDescription(x + description + x); + await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Utilities/poll.js b/command/Utilities/poll.js @@ -0,0 +1,37 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "poll", + description: "Start a poll in a channel", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "description", + description: "The description of the poll", + required: true, + }, + { + type: 7, + name: "channel", + description: "The channel you want to send the poll", + required: false, + }, + ], + run: async (client, interaction, args) => { + await interaction.deleteReply(); + let pollDescription = ` + ${interaction.member} asks: ${args[0]}`; + const channel = + interaction.guild.channels.cache.get(args[1]) || interaction.channel; + let embedPoll = new MessageEmbed() + .setTitle(`${interaction.member.user.tag} made a poll`) + .setDescription(pollDescription) + .setFooter(`Made by ${client.author}`) + .setTimestamp() + .setColor("GREEN"); + let msgEmbed = await channel.send({ embeds: [embedPoll] }); + await msgEmbed.react("👍"); + await msgEmbed.react("👎"); + }, +}; diff --git a/command/Utilities/report.js b/command/Utilities/report.js @@ -0,0 +1,45 @@ +const { MessageEmbed } = require("discord.js"); + +module.exports = { + name: "report", + description: "Report a bug of the bot", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "bug", + description: "The bug you want to report", + required: true, + }, + ], + run: async (client, interaction, args) => { + const bug = args[0]; + await interaction.followUp({ + embeds: [ + new MessageEmbed() + .setTitle("SUCCESS!") + .setDescription( + "You have reported a bug.\nPlease wait for us to solve it" + ) + .setFooter(`Made by ${client.author}`) + .setTimestamp() + .setColor("GREEN"), + ], + }); + const ch = client.channels.cache.get(client.ReportLog); + ch.send({ + embeds: [ + new MessageEmbed() + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTitle("New Bug") + .setDescription(bug) + .setColor("ORANGE") + .setTimestamp(), + ], + }); + }, +}; diff --git a/command/Utilities/snipe.js b/command/Utilities/snipe.js @@ -0,0 +1,108 @@ +const { MessageEmbed } = require("discord.js"); +const moment = require("moment"); +module.exports = { + name: "snipe", + description: "Snipes a deleted message.", + category: "Utilities", + run: async (client, interaction, args) => { + var i = 0; + var description = ""; + const embed = new MessageEmbed() + .setAuthor( + `Sniped by ${interaction.user.tag}`, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setColor(client.color) + .setFooter(`Made by ${client.author}`) + .setURL(client.web); + client.snipes.reverse().forEach(msg => { + if (msg.channel.id != interaction.channel.id) return; + if (i >= 5) return; + if (msg.attachment) { + if (msg.attachment.length == 1) { + if (msg.author !== "No Author") { + description = + description + + `\n\n**Author:** ${msg.author.username}#${ + msg.author.discriminator + } (Deleted ${moment(msg.date).fromNow()})\n**ID:** ${ + msg.author.id + }\n**Content:** ${ + msg.content + }\n**Attachment URL:** [Click to view](${msg.attachment})`; + i++; + } else + description = + description + + `\n\n**Author:** None (Deleted ${moment( + msg.date + ).fromNow()})\n\n**Content:** ${ + msg.content + }\n**Attachment URL:** [Click to view](${msg.attachment})`; + i++; + } else if (msg.attachment.length > 1) { + const map = msg.attachment.map( + (s, i) => `**${i + 1}:** [Click to view](${s})` + ); + if (msg.author !== "No Author") { + description += `\n\n**Author:** ${msg.author.username}#${ + msg.author.discriminator + } (Deleted ${moment(msg.date).fromNow()})\n**ID:** ${ + msg.author.id + }\n**Content:** ${msg.content}\n**Attachment URLs:** \n${map.join( + "\n" + )}`; + i++; + } else + description += `\n\n**Author:** None (Deleted ${moment( + msg.date + ).fromNow()})\\n**Content:** ${ + msg.content + }\n**Attachment URLs:** \n${map.join("\n")}`; + i++; + } else { + if (msg.author !== "No Author") { + description = + description + + `\n\n**Author:** ${msg.author.username}#${ + msg.author.discriminator + } (Deleted ${moment(msg.date).fromNow()})\n**ID:** ${ + msg.author.id + }\n**Content:** ${msg.content}`; + i++; + } else + description = + description + + `\n\n**Author:** None (Deleted ${moment( + msg.date + ).fromNow()})\n\n**Content:** ${msg.content}`; + i++; + } + } else { + if (msg.author !== "No Author") { + description = + description + + `\n\n**Author:** ${msg.author.username}#${ + msg.author.discriminator + } (Deleted ${moment(msg.date).fromNow()})\n**ID:** ${ + msg.author.id + }\n**Content:** ${msg.content}`; + i++; + } else + description = + description + + `\n\n**Author:** None (Deleted ${moment( + msg.date + ).fromNow()})\n\n**Content:** ${msg.content}`; + i++; + } + }); + if (i == 0) + return await interaction.followUp({ + content: "There isn't any snipe in this server yet", + }); + embed.setDescription(description); + embed.setTimestamp(); + return await interaction.followUp({ embeds: [embed] }); + }, +}; diff --git a/command/Utilities/suggest.js b/command/Utilities/suggest.js @@ -0,0 +1,86 @@ +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "suggest", + description: "Make a suggestion of the bot", + category: "Utilities", + type: "CHAT_INPUT", + run: async (client, interaction, args) => { + const questions = [ + "Describe the suggestion", + //"question 2" + ]; + let collectCounter = 0; + let endCounter = 0; + const filter = m => m.author.id === interaction.user.id; + await interaction.followUp("Check your dm."); + const appStart = await interaction.user.send({ + embeds: [ + new MessageEmbed() + .setAuthor( + interaction.user.username, + interaction.user.displayAvatarURL() + ) + .setDescription(questions[collectCounter++]) + .setFooter(client.user.username) + .setTimestamp(), + ], + }); + const channel = appStart.channel; + const collector = channel.createMessageCollector(filter); + collector.on("collect", () => { + if (collectCounter < questions.length) { + channel.send({ + embeds: [ + new MessageEmbed() + .setAuthor( + interaction.user.username, + interaction.user.displayAvatarURL() + ) + .setDescription(questions[collectCounter++]) + .setFooter(client.user.username) + .setTimestamp(), + ], + }); + } else { + channel.send({ + embeds: [ + new MessageEmbed() + .setTitle("SUCCESS!") + .setDescription( + "You have sent a suggestion.\nPlease wait for us to review it" + ) + .setColor("GREEN") + .setFooter(`Made by ${client.author}`) + .setTimestamp(), + ], + }); + collector.stop("fulfilled"); + } + }); + const appsChannel = client.channels.cache.get(client.ReportLog); + collector.on("end", (collected, reason) => { + if (reason === "fulfilled") { + let index = 1; + const mapedResponses = collected + .map(msg => { + return `${questions[endCounter++]}**\n->** ${msg.content}`; + }) + .join("\n\n"); + + appsChannel.send({ + embeds: [ + new MessageEmbed() + .setAuthor( + interaction.member.user.tag, + interaction.user.displayAvatarURL({ dynamic: true }) + ) + .setTitle("New Suggestion") + .setDescription(mapedResponses) + .setColor("ORANGE") + .setTimestamp(), + ], + }); + } + }); + }, +}; diff --git a/command/Utilities/timer.js b/command/Utilities/timer.js @@ -0,0 +1,69 @@ +const ms = require("ms"); +const { MessageEmbed } = require("discord.js"); +module.exports = { + name: "timer", + description: "Set a timer for yourself", + usage: "(Time)", + category: "Utilities", + type: "CHAT_INPUT", + options: [ + { + type: 3, + name: "time", + description: "The time you want to set", + required: true, + }, + ], + run: async (client, interaction, args, utils) => { + const time = args[0]; + const mss = ms(args[0]); + if (!time.endsWith("d")) { + if (!time.endsWith("h")) { + if (!time.endsWith("m")) { + if (!time.endsWith("s")) { + return await interaction.followUp({ + content: "You can only use valid time (Example: 3s)", + }); + } + } + } + } + if (isNaN(time[0])) + return await interaction.followUp({ + content: "You can only use valid time (Example: 3s)", + }); + client.Timers.set(interaction.user.id + " G " + interaction.guild.name, { + Guild: interaction.guild.name, + Author: { + Tag: interaction.member.user.tag, + ID: interaction.user.id, + }, + Time: mss, + }); + await interaction.followUp({ + content: `${interaction.user} you have set a timer for ${utils.timer( + mss + )}.`, + }); + setTimeout(() => { + let Embed = new MessageEmbed() + .setTitle(`Timer finished in ${interaction.guild.name}.`) + .setDescription(`Your timer for ${utils.timer(mss)} has finished.`) + .setURL(client.web) + .setColor(`GREEN`); + let embe = new MessageEmbed() + .setTitle(`Timer finished.`) + .setDescription(`Your timer for ${utils.timer(mss)} has finished.`) + .setURL(client.web) + .setColor(`GREEN`); + interaction.channel.send({ + content: `${interaction.user}`, + embeds: [embe], + }); + interaction.user.send({ embeds: [Embed] }); + client.Timers.delete( + interaction.user.id + " G " + interaction.guild.name + ); + }, ms(time)); + }, +}; diff --git a/commands/Config/create.js b/commands/Config/create.js @@ -32,7 +32,7 @@ module.exports = { }); if (data) { nameCollector.stop(); - return message.inlineReply("This command has already exist."); + return message.reply("This command has already exist."); } if (name === "cancel") { msg.channel.send("The setup has been cancelled."); @@ -175,7 +175,7 @@ module.exports = { data ); console.log(data); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } @@ -206,7 +206,7 @@ module.exports = { data ); console.log(data); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } @@ -281,7 +281,7 @@ module.exports = { }, data ); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } @@ -310,7 +310,7 @@ module.exports = { }, data ); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } @@ -381,7 +381,7 @@ module.exports = { }, data ); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } @@ -408,7 +408,7 @@ module.exports = { }, data ); - msg.inlineReply( + msg.reply( `Saved **${data.Command}** as a custom command` ); } diff --git a/commands/Config/delete.js b/commands/Config/delete.js @@ -15,6 +15,6 @@ module.exports = { }); if (!data) return client.err(message, "Config", "cc-delete", 404); await schema.findOneAndDelete({ Guild: message.guild.id, Command: name }); - message.inlineReply(`Removed **${name}** from custom commands.`); + message.reply(`Removed **${name}** from custom commands.`); }, }; diff --git a/commands/Config/disable.js b/commands/Config/disable.js @@ -39,9 +39,7 @@ module.exports = { "category", `${up}${others}` ); - message.inlineReply( - `This command is disabled now:\n\n\`${up}${others}\`` - ); + message.reply(`This command is disabled now:\n\n\`${up}${others}\``); } } }, diff --git a/commands/Config/enable.js b/commands/Config/enable.js @@ -34,9 +34,7 @@ module.exports = { "category", `${up}${others}` ); - message.inlineReply( - `This command is enabled now:\n\n\`${up}${others}\`` - ); + message.reply(`This command is enabled now:\n\n\`${up}${others}\``); } else return client.err(message, "Config", "enable", 18); } }, diff --git a/commands/Economy/bet.js b/commands/Economy/bet.js @@ -34,7 +34,7 @@ module.exports = { parseInt(await client.bal(message.author.id)) - amt }**${client.currency}` ); - message.inlineReply(abc); + message.reply(abc); } else { await client.rmv(message.author.id, amt); const cba = new MessageEmbed() @@ -46,7 +46,7 @@ module.exports = { parseInt(await client.bal(message.author.id)) - amt }**${client.currency}` ); - message.inlineReply(cba); + message.reply(cba); } }, }; diff --git a/commands/Economy/buy.js b/commands/Economy/buy.js @@ -51,7 +51,7 @@ module.exports = { }, }).save(); } - message.inlineReply( + message.reply( new MessageEmbed() .setTimestamp() .setDescription( diff --git a/commands/Economy/drop.js b/commands/Economy/drop.js @@ -27,7 +27,7 @@ module.exports = { await client.add(id, coinsToClaim, message); msg .first() - .inlineReply( + .reply( `Congratultions! You have claimed **${coinsToClaim}** ${client.currency}!` ); }); diff --git a/commands/Economy/give.js b/commands/Economy/give.js @@ -18,23 +18,91 @@ module.exports = { if (!user) return client.err(message, "Economy", "give", 1); const parsed = parseInt(args[1]); if (!args[1]) return client.err(message, "Economy", "give", 5); - if (isNaN(parsed)) return client.err(message, "Economy", "give", 7); - if (user.id === message.author.id) - return client.err(message, "Economy", "give", 2); - if (parsed > (await client.bal(message.author.id))) { - return client.err(message, "Economy", "give", 20); - } - await client.rmv(message.author.id, parsed); - await client.add(user.id, parsed, message); - message.channel.send( - new MessageEmbed() - .setColor(client.color) - .setTimestamp() - .setDescription( - `**${message.author.username}** has given **${ - user.username - }** **${parsed.toLocaleString()}**${client.currency}` + + if (args[1].toLowerCase() === "all" && isNaN(parsed)) { + await client.add(user.id, await client.bal(message.author.id), message); + user + .send( + `**${message.author.tag}** gave you **${( + await client.bal(message.author.id) + ).toLocaleString()}**${client.currency} in **${message.guild.name}**` ) - ); + .catch(e => { + console.log(e); + }); + await client.rmv(message.author.id, await client.bal(message.author.id)); + message.reply( + `**${message.author.username}** gave **${user.username}** **${( + await client.bal(message.author.id) + ).toLocaleString()}**${client.currency}, you now have **0**${ + client.currency + } and they have **${(await client.bal(user.id)).toLocaleString()}**${ + client.currency + }` + ); + } else if (args[1].toLowerCase() === "half" && isNaN(parsed)) { + await client.add( + user.id, + Math.round((await client.bal(message.author.id)) / 2), + message + ); + user + .send( + `**${message.author.tag}** gave you **${( + await client.bal(message.author.id) + ).toLocaleString()}**${client.currency} in **${message.guild.name}**` + ) + .catch(e => { + console.log(e); + }); + await client.rmv( + message.author.id, + Math.round((await client.bal(message.author.id)) / 2) + ); + message.reply( + `**${message.author.username}** gave **${user.username}** **${( + (await client.bal(message.author.bal)) / 2 + ).toLocaleString()}**${client.currency}, you now have **${( + (await client.bal(message.author.id)) - + (await client.bal(message.author.bal)) / 2 + ).toLocaleString()}**${client.currency} and they have **${( + (await client.bal(user.id)) + + (await client.bal(message.author.bal)) / 2 + ).toLocaleString()}**${client.currency}` + ); + } else if ( + isNaN(parsed) && + !["all", "half"].includes(args[1].toLowerCase()) + ) { + return client.err(message, "Economy", "give", 101); + } else { + if (user.id === message.author.id) + return client.err(message, "Economy", "give", 2); + if (parsed > (await client.bal(message.author.id))) { + return client.err(message, "Economy", "give", 20); + } + await client.rmv(message.author.id, parsed); + await client.add(user.id, parsed, message); + message.reply( + `**${message.author.username}** gave **${ + user.username + }** **${parsed.toLocaleString()}** coins, you now have **${( + (await client.bal(message.author.id)) - parsed + ).toLocaleString()}**${client.currency} and they have **${( + (await client.bal(user.id)) + parsed + ).toLocaleString()}**${client.currency}` + ); + user + .send( + `**${ + message.author.tag + }** gave you **${parsed.toLocaleString()}** coins in **${ + message.guild.name + }**` + ) + .catch(e => { + console.log(e); + }); + } }, }; diff --git a/commands/Economy/lb.js b/commands/Economy/lb.js @@ -30,6 +30,6 @@ module.exports = { message.author.displayAvatarURL({ dynamic: true }) ) .setColor(client.color); - message.inlineReply(embed); + message.reply(embed); }, }; diff --git a/commands/Economy/profile.js b/commands/Economy/profile.js @@ -42,6 +42,6 @@ module.exports = { "**Balance**\n", `💲CP: \`${bal}\`\n` + `➕Multiplier: \`${`1.${multi}x`}\`` ); - message.inlineReply(game); + message.reply(game); }, }; diff --git a/commands/Economy/slots.js b/commands/Economy/slots.js @@ -56,7 +56,7 @@ module.exports = { parseInt(await client.bal(message.author.id)) - amt }**${client.currency}` ); - message.inlineReply(won); + message.reply(won); } else { await client.rmv(message.author.id, amt); const lost = new MessageEmbed() @@ -79,7 +79,7 @@ module.exports = { parseInt(await client.bal(message.author.id)) - amt }**${client.currency}` ); - message.inlineReply(lost); + message.reply(lost); } }, }; diff --git a/commands/Economy/steal.js b/commands/Economy/steal.js @@ -51,7 +51,7 @@ module.exports = { CP: 0, Inventory: {}, }).save(); - return message.inlineReply( + return message.reply( new MessageEmbed() .setAuthor( message.author.tag, @@ -64,7 +64,7 @@ module.exports = { ); } else if (data1) { if (data1.CP <= 0 || !data1.CP) { - return message.inlineReply( + return message.reply( new MessageEmbed() .setAuthor( message.author.tag, @@ -81,7 +81,7 @@ module.exports = { data.save(); data1.CP -= coins1; data1.save(); - return message.inlineReply( + return message.reply( new MessageEmbed() .setAuthor( message.author.tag, @@ -97,7 +97,7 @@ module.exports = { data.save(); data1.CP += coins; data1.save(); - return message.inlineReply( + return message.reply( new MessageEmbed() .setAuthor( message.author.tag, diff --git a/commands/Economy/work.js b/commands/Economy/work.js @@ -18,7 +18,7 @@ module.exports = { const earning = client.function.rndint(5000, 3000); const jobs = job[Math.floor(Math.random() * job.length)]; await client.add(message.author.id, earning, message); - return message.inlineReply( + return message.reply( `You worked as a **${jobs}** and earned **${earning}${client.currency}**` ); }, diff --git a/commands/Fun/hangman.js b/commands/Fun/hangman.js @@ -8,7 +8,7 @@ module.exports = { category: "Fun", run: async (client, message, args) => { if (playing.has(message.channel.id)) - return message.inlineReply("Only one game may be occurring per channel."); + return message.reply("Only one game may be occurring per channel."); playing.add(message.channel.id); try { const { body } = await get("https://emilia-api.xyz/api/hangman").set( @@ -55,7 +55,7 @@ module.exports = { }); //m.delete(); if (!guess.size) { - await message.inlineReply("Sorry, time is up!"); + await message.reply("Sorry, time is up!"); break; } const choice = guess.first().content.toLowerCase(); diff --git a/commands/Fun/quote.js b/commands/Fun/quote.js @@ -22,7 +22,7 @@ module.exports = { color: "ffffff", }); const attach = new MessageAttachment(imgae, "quote.png"); - message.inlineReply(attach); + message.reply(attach); } else { const imgae = await Canvas.quote({ image: message.author.displayAvatarURL({ @@ -35,7 +35,7 @@ module.exports = { color: "ffffff", }); const attach = new MessageAttachment(imgae, "quote.png"); - message.inlineReply(attach); + message.reply(attach); } }, }; diff --git a/commands/Fun/simprate.js b/commands/Fun/simprate.js @@ -9,14 +9,14 @@ module.exports = { let simp = Math.floor(Math.random() * 100); if (message.mentions.users.first()) { let target = message.mentions.users.first(); - message.inlineReply( + message.reply( new MessageEmbed() .setTitle(`${target.username}'s simp rate`) .setDescription(`${target.username} is a ${simp}% simp`) ); } else { const target = message.author; - message.inlineReply( + message.reply( new MessageEmbed() .setTitle(`${target.username}'s simp rate`) .setDescription(`You are a ${simp}% simp`) diff --git a/commands/Giveaway/giveaway.js b/commands/Giveaway/giveaway.js @@ -42,6 +42,6 @@ module.exports = { }, }, }); - message.inlineReply(`Giveaway is started in ${channel}`); + message.reply(`Giveaway is started in ${channel}`); }, }; diff --git a/commands/Moderation/announce.js b/commands/Moderation/announce.js @@ -21,7 +21,7 @@ module.exports = { .setTimestamp() .setColor(client.color) ); - message.inlineReply( + message.reply( new MessageEmbed() .setTitle(`Message Announced`) .addField("**Moderator**", message.author.tag, true) diff --git a/commands/Moderation/ban.js b/commands/Moderation/ban.js @@ -29,7 +29,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); await message.guild.members.ban(one.id, { reason: reason, }); @@ -61,7 +61,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); await message.guild.members.ban(target.id, { reason: reason, }); diff --git a/commands/Moderation/clearWarns.js b/commands/Moderation/clearWarns.js @@ -22,7 +22,7 @@ module.exports = { Guild: message.guild.id, User: user.id, }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setTitle(`Warns Cleared`) .addField("**Moderator**", message.author.tag, true) diff --git a/commands/Moderation/kick.js b/commands/Moderation/kick.js @@ -37,7 +37,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); await target.kick(reason); } catch (e) { console.log(e); diff --git a/commands/Moderation/lock.js b/commands/Moderation/lock.js @@ -22,7 +22,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); }); }, }; diff --git a/commands/Moderation/mute.js b/commands/Moderation/mute.js @@ -49,7 +49,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } if (!ms(time)) { let reason = args.slice(1).join(" ") || "No reason provided"; @@ -89,7 +89,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); setTimeout(async () => { await Member.roles.remove(role2); }, ms(time)); @@ -132,7 +132,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); setTimeout(async () => { await Member.roles.remove(role2); }, ms(time)); diff --git a/commands/Moderation/removeWarn.js b/commands/Moderation/removeWarn.js @@ -38,7 +38,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); data.save(); } else { return client.err(message, "Moderation", "removeWarn", 10); diff --git a/commands/Moderation/role.js b/commands/Moderation/role.js @@ -29,7 +29,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed).then(await target.roles.remove(role)); + message.reply(embed).then(await target.roles.remove(role)); } else { const embed = new MessageEmbed() .setTitle("Role Added") @@ -42,7 +42,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed).then(await target.roles.add(role)); + message.reply(embed).then(await target.roles.add(role)); } } catch (e) { console.log(e); diff --git a/commands/Moderation/slowmode.js b/commands/Moderation/slowmode.js @@ -22,7 +22,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } const milliseconds = ms(args[0]); if (isNaN(milliseconds)) @@ -48,7 +48,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } catch (e) { console.log(e); return client.err(message, "Moderation", "slowmode", 999); diff --git a/commands/Moderation/unban.js b/commands/Moderation/unban.js @@ -21,7 +21,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } catch (e) { console.log(e); return client.err(message, "Moderation", "unban", 999); diff --git a/commands/Moderation/unlock.js b/commands/Moderation/unlock.js @@ -21,7 +21,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); }); }, }; diff --git a/commands/Moderation/unmute.js b/commands/Moderation/unmute.js @@ -38,7 +38,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } catch (e) { console.log(e); return client.err(message, "Moderation", "unmute", 999); diff --git a/commands/Moderation/warn.js b/commands/Moderation/warn.js @@ -50,7 +50,7 @@ module.exports = { .setThumbnail(client.user.displayAvatarURL()) .setColor(client.color) .setTimestamp(); - message.inlineReply(embed); + message.reply(embed); } catch (e) { console.log(e); return client.err(message, "Moderation", "warn", 1); diff --git a/commands/Music/bassboost.js b/commands/Music/bassboost.js @@ -26,7 +26,7 @@ module.exports = { .fill(null) .map((_, i) => ({ band: i, gain: levels[level] })); player.setEQ(...bands); - return message.inlineReply( + return message.reply( `The player's bassboost level has been set to ${level}` ); }, diff --git a/commands/Music/loop.js b/commands/Music/loop.js @@ -13,10 +13,10 @@ module.exports = { if (args.length && /queue/i.test(args[0])) { player.setQueueRepeat(!player.queueRepeat); const queueRepeat = player.queueRepeat ? "enabled" : "disabled"; - return message.inlineReply(`Queue repeat is ${queueRepeat}`); + return message.reply(`Queue repeat is ${queueRepeat}`); } player.setTrackRepeat(!player.trackRepeat); const trackRepeat = player.trackRepeat ? "enabled" : "disabled"; - return message.inlineReply(`Queue repeat is ${trackRepeat}`); + return message.reply(`Queue repeat is ${trackRepeat}`); }, }; diff --git a/commands/Music/pause.js b/commands/Music/pause.js @@ -10,9 +10,8 @@ module.exports = { if (!channel) return client.err(message, "Music", "pause", 35); if (channel.id !== player.voiceChannel) return client.err(message, "Music", "pause", 55); - if (player.paused) - return message.inlineReply("The player is already paused"); + if (player.paused) return message.reply("The player is already paused"); player.pause(true); - return message.inlineReply("The player is paused"); + return message.reply("The player is paused"); }, }; diff --git a/commands/Music/play.js b/commands/Music/play.js @@ -33,7 +33,7 @@ module.exports = { switch (res.loadType) { case "NO_MATCHES": if (!player.queue.current) player.destroy(); - return message.inlineReply("No result is found"); + return message.reply({ content: "No result is found" }); case "TRACK_LOADED": const playmusic = new Discord.MessageEmbed() .setColor("#00f70c") @@ -48,7 +48,7 @@ module.exports = { player.queue.add(res.tracks[0]); if (!player.playing && !player.paused && !player.queue.size) player.play(); - return message.channel.send(playmusic); + return message.channel.send({ embeds: [playmusic] }); case "PLAYLIST_LOADED": player.queue.add(res.tracks); const playlist = new Discord.MessageEmbed() @@ -69,7 +69,7 @@ module.exports = { player.queue.totalSize === res.tracks.length ) player.play(); - return message.channel.send(playlist); + return message.channel.send({ embeds: [playlist] }); case "SEARCH_RESULT": let max = 5, collected, @@ -96,7 +96,7 @@ module.exports = { true ) .setTimestamp(); - message.channel.send(searchResult); + message.channel.send({ embeds: [searchResult] }); try { collected = await message.channel.awaitMessages(filter, { max: 1, @@ -105,9 +105,9 @@ module.exports = { }); } catch (e) { if (!player.queue.current) player.destroy(); - return message.inlineReply( - "You didn't provide a selection. Cancelled" - ); + return message.reply({ + content: "You didn't provide a selection. Cancelled", + }); } const first = collected.first().content; @@ -118,9 +118,9 @@ module.exports = { const index = Number(first) - 1; if (index < 0 || index > max - 1) - return message.inlineReply( - `The number that you provided too small or too big (1-${max})` - ); + return message.reply({ + content: `The number that you provided too small or too big (1-${max})`, + }); const track = res.tracks[index]; player.queue.add(track); const trackadd = new Discord.MessageEmbed() @@ -135,7 +135,7 @@ module.exports = { .addField(`Requested By : `, `${track.requester}`, true); if (!player.playing && !player.paused && !player.queue.size) player.play(); - return message.channel.send(trackadd); + return message.channel.send({ embeds: [trackadd] }); } } catch (e) { console.log(e); diff --git a/commands/Music/queue.js b/commands/Music/queue.js @@ -39,6 +39,6 @@ module.exports = { ); const maxPages = Math.ceil(queue.length / multiple); embed.setFooter(`Page ${page > maxPages ? maxPages : page} of ${maxPages}`); - return message.inlineReply(embed); + return message.reply(embed); }, }; diff --git a/commands/Music/resume.js b/commands/Music/resume.js @@ -10,8 +10,8 @@ module.exports = { if (channel.id !== player.voiceChannel) return client.err(message, "Music", "resume", 55); if (player.paused == false) - return message.inlineReply("The player is already playing"); + return message.reply("The player is already playing"); player.pause(false); - return message.inlineReply("The player is resumed"); + return message.reply("The player is resumed"); }, }; diff --git a/commands/Music/skip.js b/commands/Music/skip.js @@ -13,6 +13,6 @@ module.exports = { if (!player.queue.current) return client.err(message, "Music", "skip", 34); const { title } = player.queue.current; player.stop(); - return message.inlineReply(`**${title}** was skipped`); + return message.reply(`**${title}** was skipped`); }, }; diff --git a/commands/Music/stop.js b/commands/Music/stop.js @@ -12,6 +12,6 @@ module.exports = { return client.err(message, "Music", "stop", 55); player.destroy(); message.react("✅"); - return message.inlineReply("The player has been destroyed"); + return message.reply("The player has been destroyed"); }, }; diff --git a/commands/Music/volume.js b/commands/Music/volume.js @@ -9,7 +9,7 @@ module.exports = { const player = message.client.manager.get(message.guild.id); if (!player) return client.err(message, "Music", "volume", 34); if (!args.length) - return message.inlineReply(`The player volume is \`${player.volume}\``); + return message.reply(`The player volume is \`${player.volume}\``); const { channel } = message.member.voice; if (!channel) return client.err(message, "Music", "volume", 35); if (channel.id !== player.voiceChannel) @@ -18,8 +18,6 @@ module.exports = { if (!volume || volume < 1 || volume > 100 || isNaN(volume)) return client.err(message, "Music", "volume", 101); player.setVolume(volume); - return message.inlineReply( - `The player's volume has been set to \`${volume}\`.` - ); + return message.reply(`The player's volume has been set to \`${volume}\`.`); }, }; diff --git a/commands/Owner/accept.js b/commands/Owner/accept.js @@ -10,7 +10,7 @@ module.exports = { const acceptQuery = args.slice(1).join(" ") || `They didn't leave any message.`; - if (!MessageID) return message.inlineReply("Please specify a valid ID"); + if (!MessageID) return message.reply("Please specify a valid ID"); try { const suggestionChannel = message.guild.channels.cache.get( client.SuggestionLog diff --git a/commands/Owner/blacklist.js b/commands/Owner/blacklist.js @@ -11,14 +11,14 @@ module.exports = { reason = args.slice(2).join(" "); if (toggle === "true") { await client.data.BK(user, toggle, reason); - message.inlineReply( + message.reply( `**Blacklisted** ${message.guild.members.cache.get( user )}.\n**Reason: **${reason}` ); } else { await client.data.BK(user, toggle, reason); - message.inlineReply( + message.reply( `Removed blacklist from ${message.guild.members.cache.get(user)}` ); } diff --git a/commands/Owner/cls.js b/commands/Owner/cls.js @@ -2,6 +2,7 @@ const { Client, Message, MessageEmbed } = require("discord.js"); module.exports = { name: "cls", + Owner: true, run: async (client, message, args) => { message.channel.send( "**\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**" diff --git a/commands/Owner/deny.js b/commands/Owner/deny.js @@ -10,7 +10,7 @@ module.exports = { const denyQuery = args.slice(1).join(" ") || `They didn't leave any message.`; - if (!MessageID) return message.inlineReply("Please specify a valid ID"); + if (!MessageID) return message.reply("Please specify a valid ID"); try { const suggestionChannel = message.guild.channels.cache.get( client.SuggestionLog diff --git a/commands/Owner/dm.js b/commands/Owner/dm.js @@ -7,8 +7,8 @@ module.exports = { Owner: true, run: async (client, message, args) => { const user = client.users.cache.get(args[0]); - if (!user) return message.inlineReply("User?"); - if (!args.slice(1).join(" ")) return message.inlineReply("Message?"); + if (!user) return message.reply("User?"); + if (!args.slice(1).join(" ")) return message.reply("Message?"); try { await user .send(args.slice(1).join(" ")) diff --git a/commands/Owner/getinvite.js b/commands/Owner/getinvite.js @@ -19,7 +19,7 @@ module.exports = { guild = found; } } else { - return message.inlineReply("Invalid Name/ID!"); + return message.reply("Invalid Name/ID!"); } if (guild) { let tChannel = guild.channels.cache.find( @@ -33,13 +33,11 @@ module.exports = { let invite = await tChannel .createInvite({ temporary: false, maxAge: 0 }) .catch(err => { - return message.inlineReply(`${err} has occured!`); + return message.reply(`${err} has occured!`); }); - message.inlineReply(invite.url); + message.reply(invite.url); } else { - return message.inlineReply( - `\`${args.join(" ")}\` - Bot is Not in this server` - ); + return message.reply(`\`${args.join(" ")}\` - Bot is Not in this server`); } }, }; diff --git a/commands/Owner/info.js b/commands/Owner/info.js @@ -0,0 +1,118 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "info", + Owner: true, + run: async (client, message, args) => { + const embed = new MessageEmbed() + .setAuthor( + "Cath Nation Role Informatiom", + message.guild.iconURL({ dynamic: true, size: 4096 }) + ) + .setColor(client.color) + .addFields( + { + name: "<@&840539971068755989>", + value: "The Server Owner", + inline: false, + }, + { + name: "<@&827182913002012694>", + value: "🤐", + inline: true, + }, + { + name: "<@&765928569397575750>", + value: "The unpingable ones", + inline: true, + }, + { + name: "<@&854306717977935882>", + value: "The Server Owner's Bots", + inline: true, + }, + { + name: "<@&832145795523280907>", + value: "The unpingable ones", + inline: true, + }, + { + name: "<@&756805977298305135>", + value: "The ones who can control the server", + inline: true, + }, + { + name: "<@&840537065984491531>", + value: "Premium users of Cath", + inline: true, + }, + { + name: "<@&856223068782723093>", + value: "The developers and the helpers of Cath", + inline: true, + }, + { + name: "<@&836279963069710336>", + value: "VIPs of this server. Chosen by the server owner", + inline: true, + }, + { + name: "<@&807976942066204674>", + value: "Partner of Cath or the server", + inline: true, + }, + { + name: "<@&828273514497835059>", + value: "The wealthy ones", + inline: true, + }, + { + name: "<@&756805886244028427>", + value: "Old VIPs", + inline: true, + }, + { + name: "<@&749676662098100235>", + value: "Maybe useful for the server", + inline: true, + }, + { + name: "<@&840536973126270976>", + value: "Platium camo color", + inline: true, + }, + { + name: "<@&841200768706543636>", + value: "Gold camo color", + inline: true, + }, + { + name: "<@&841026716181069824>", + value: "Receive announcements", + inline: true, + }, + { + name: "<@&841200845885538325>", + value: "Recevie updates for Cath(s)", + inline: true, + }, + { + name: "<@&841026772790673448>", + value: "Recevie updates for Night's YouTube", + inline: true, + }, + { + name: "<@&840926118617809006>", + value: "People who are bad", + inline: true, + } + ) + .setThumbnail(client.user.displayAvatarURL()) + .setURL(client.web) + .setFooter( + "Ń1ght#0001", + message.author.displayAvatarURL({ dynamic: true, size: 4096 }) + ) + .setTimestamp(); + message.channel.send({ embeds: [embed] }); + }, +}; diff --git a/commands/Owner/premium.js b/commands/Owner/premium.js @@ -10,7 +10,7 @@ module.exports = { message.mentions.members.first() || message.guild.members.cache.get(args[0]); client.data.Premium(member.id, "true", args[1]); - message.inlineReply( + message.reply( `**${member.user.username}**'s premium status:\nTier **${args[1]}**` ); }, diff --git a/commands/Owner/spider.js b/commands/Owner/spider.js @@ -0,0 +1,19 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); + +module.exports = { + name: "spider", + Owner: true, + /** + * @param {Client} client + * @param {Message} message + * @param {String[]} args + */ + run: async (client, message, args) => { + for (var i = 0; i < 10; i++) { + client.function.sleep(5000); + message.channel.send( + "https://media.discordapp.net/attachments/838006493361471508/864730147545284618/image0.gif" + ); + } + }, +}; diff --git a/commands/Owner/try.js b/commands/Owner/try.js @@ -10,7 +10,7 @@ module.exports = { let collectCounter = 0; let endCounter = 0; const filter = m => m.author.id === message.author.id; - message.inlineReply("Please check your DM."); + message.reply("Please check your DM."); try { const appStart = await message.author.send( new MessageEmbed() diff --git a/commands/Utilities/emojiadd.js b/commands/Utilities/emojiadd.js @@ -28,9 +28,7 @@ module.exports = { const em = message.guild.emojis.cache.find( a => a.name == args[0] ); - message.inlineReply( - `Added <:${em.name}:${em.id}> to the server` - ); + message.reply(`Added <:${em.name}:${em.id}> to the server`); }); } catch (e) { console.log(e); @@ -50,7 +48,7 @@ module.exports = { return client.err(message, "Utilities", "emojiadd", 49); message.guild.emojis.create(args[0], args[1]).then(msg => { const em = message.guild.emojis.cache.find(a => a.name == args[1]); - message.inlineReply(`Added <:${em.name}:${em.id}> to the server`); + message.reply(`Added <:${em.name}:${em.id}> to the server`); }); } catch (e) { console.log(e); diff --git a/commands/Utilities/esnipe.js b/commands/Utilities/esnipe.js @@ -15,7 +15,7 @@ module.exports = { page = 0, reactions = ["◀️", "⏪", "⏩", "▶️"]; if (!snipes) - return message.inlineReply( + return message.reply( `No snipes have been found for the channel \`${channel.name}\`` ); diff --git a/commands/Utilities/help.js b/commands/Utilities/help.js @@ -48,7 +48,7 @@ module.exports = { ) .addField( "**Premium**", - "**You can either boost support server or gift a nitro to one of the Developer of Cath Team to be premium user**" + "**You can either boost support server or subscribe to developer's team [Ko-fi](https://ko-fi.com/cathteam) or gift a nitro to one of the developer team **" ) .setURL(client.web) .setFooter( @@ -65,7 +65,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -80,7 +80,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -96,7 +96,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -113,7 +113,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -130,7 +130,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -146,7 +146,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -164,7 +164,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -182,7 +182,7 @@ module.exports = { const name = `\`${pull.name}\``; commandList.push(name); }); - return message.inlineReply( + return message.reply( new MessageEmbed() .setDescription(commandList.map(data => `${data}`).join(", ")) .setTimestamp() @@ -258,7 +258,7 @@ module.exports = { .setTimestamp() .setURL(client.web) .setColor(client.color); - message.inlineReply(embed); + message.reply(embed); } } }, diff --git a/commands/Utilities/modmail.js b/commands/Utilities/modmail.js @@ -132,7 +132,7 @@ module.exports = { } }); } catch { - return message.inlineReply("please let me send DM to you."); + return message.reply("please let me send DM to you."); } }, }; diff --git a/commands/Utilities/rank.js b/commands/Utilities/rank.js @@ -36,7 +36,7 @@ module.exports = { .setDiscriminator(target.discriminator); Rank.build().then(data => { const attachment = new MessageAttachment(data, "RankCard.png"); - message.inlineReply(attachment); + message.reply(attachment); }); }, }; diff --git a/config.json b/config.json @@ -1,12 +1,14 @@ { "prefix": "C.", - "mongo": "mongodb://127.0.0.1:27017/test", "URL": "https://cath.gq/", "color": "02023a", "ca": "**[Invite](https://discord.com/api/oauth2/authorize?client_id=800966959268364288&permissions=mongodb+srv://cath_exe:[email protected]/Data4231314550&scope=bot%20applications.commands) | [Support](https://discord.gg/SbQHChmGcp) | [YouTube](https://youtube.com/Kirito01) | [Website](https://www.cath.gq)**", - "cat": "**[Invite](https://discord.com/api/oauth2/authorize?client_id=800966959268364288&permissions=4231314550&scope=bot%20applications.commands) | [Support](https://discord.gg/SbQHChmGcp) | [YouTube](https://youtube.com/Kirito01) | [Website](https://www.cath.gq)**\n\n", - "Suggestion": "853319776034226186", - "Report": "853319776034226186", - "Welcome": "837913442228371456", - "DM": "850434924536135690" + "Suggestion":"", + "Report": "", + "Welcome": "", + "DMLog": "", + "CMDLog": "", + "ReadyLog": "", + "ErrorLog": "", + "ServerLog": "" } diff --git a/events/afk.js b/events/afk.js @@ -1,12 +1,12 @@ const client = require("../bot"); const moment = require("moment"); -client.on("message", async message => { +client.on("messageCreate", async message => { if (message.author.bot) return; if (!message.guild) return; const dataa = await client.data.getUser(message.author.id); if (dataa) { if (dataa.AFK != null) { - message.inlineReply( + message.reply( `Welcome back <@${dataa.User}>! I have removed your AFK status.` ); const nothahaa = message.guild.members.cache.get(message.author.id); @@ -22,9 +22,8 @@ client.on("message", async message => { ); if (data1) { if (data1.AFK !== null) { - message.inlineReply( - message.mentions.members.first().user.tag + - ` is in afk (${data1.AFK})` + message.reply( + `${message.mentions.members.first().user.tag}is in afk (${data1.AFK})` ); } else { return; diff --git a/events/card.js b/events/card.js @@ -0,0 +1,64 @@ +const { MessageAttachment } = require("discord.js"); +const client = require("../bot"); +const schema = require("../models/guilds"); +const canvas = require("discord-canvas"); + +client.on("guildMemberAdd", async member => { + schema.findOne({ Guild: member.guild.id }, async (e, data) => { + if (!data) return; + const user = member.user; + const image = await new canvas.Welcome() + .setUsername(user.username) + .setDiscriminator(user.discriminator) + .setMemberCount(member.guild.memberCount) + .setGuildName(member.guild.name) + .setAvatar(user.displayAvatarURL({ dynamic: false, format: "png" })) + .setColor("border", client.color) + .setColor("username-box", client.color) + .setColor("discriminator-box", client.color) + .setColor("message-box", client.color) + .setColor("title", "#89FB23") + .setColor("avatar", client.color) + .setBackground( + "https://cdn.discordapp.com/attachments/815622126526005268/819116213925052436/image0.png" + ) + .toAttachment(); + const attachment = new MessageAttachment( + image.toBuffer(), + "goodbye-image.png" + ); + const channel = member.guild.channels.cache.get(data.WelcomeChannel); + if (!channel) return; + channel.send(attachment); + }); +}); + +client.on("guildMemberRemove", async member => { + schema.findOne({ Guild: member.guild.id }, async (e, data) => { + if (!data) return; + const user = member.user; + const image = await new canvas.Goodbye() + .setUsername(user.username) + .setDiscriminator(user.discriminator) + .setMemberCount(member.guild.memberCount) + .setGuildName(member.guild.name) + .setAvatar(user.displayAvatarURL({ dynamic: false, format: "png" })) + .setColor("border", client.color) + .setColor("username-box", client.color) + .setColor("discriminator-box", client.color) + .setColor("message-box", client.color) + .setColor("title", "#89FB23") + .setColor("avatar", client.color) + .setBackground( + "https://cdn.discordapp.com/attachments/815622126526005268/819116213925052436/image0.png" + ) + .toAttachment(); + const attachment = new MessageAttachment( + image.toBuffer(), + "goodbye-image.png" + ); + const channel = member.guild.channels.cache.get(data.GoodbyeChannel); + if (!channel) return; + channel.send(attachment); + }); +}); diff --git a/events/embed.js b/events/embed.js @@ -0,0 +1,46 @@ +const client = require("../bot"); +const { MessageEmbed } = require("discord.js"); +const { Welcome } = require("../config.json"); +client.on("guildMemberAdd", async member => { + const channel = member.guild.channels.cache.find( + channel => channel.id === Welcome + ); + if (!channel) return; + const embed = new MessageEmbed() + .setTitle( + `<:YouTube:841186450497339412> ${member},welcome to Night\'s official Discord server! <:YouTube:841186450497339412>` + ) + .setThumbnail(member.guild.iconURL({ dynamic: true })) + .addField( + "Read the rules at <#799074874513555496> channel, and enjoy your stay~", + `We now have ${member.guild.memberCount} members!` + ) + .setFooter( + `${member.user.tag} joined the server!`, + member.user.displayAvatarURL({ dynamic: true }) + ) + .setColor(client.color) + .setTimestamp(); + + channel.send({ embeds: [embed] }); +}); +client.on("guildMemberRemove", async member => { + const channel = member.guild.channels.cache.find( + channel => channel.id === Welcome + ); + if (!channel) return; + const embed = new MessageEmbed() + .setTitle( + `<:YouTube:841186450497339412> ${member} can\'t handle being cool! <:YouTube:841186450497339412>` + ) + .setThumbnail(member.guild.iconURL({ dynamic: true })) + .setDescription(`We now only have ${member.guild.memberCount} members`) + .setFooter( + `${member.user.tag} leaved the server!`, + member.user.displayAvatarURL({ dynamic: true }) + ) + .setColor(client.color) + .setTimestamp(); + + channel.send({ embeds: [embed] }); +}); diff --git a/events/emoji.js b/events/emoji.js @@ -1,5 +1,5 @@ const client = require("../bot"); -client.on("message", async message => { +client.on("messageCreate", async message => { function Check(str) { if ( client.emojis.cache.find(emoji => emoji.name === str) || diff --git a/events/guildCreate.js b/events/guildCreate.js @@ -3,26 +3,28 @@ const { MessageEmbed } = require("discord.js"); const db = require("../models/guilds"); const config = require("../config.json"); client.on("guildCreate", guild => { - client.ServerLog.send( - new MessageEmbed() - .setTitle("New Server") - .addField("Server Info", [ - `**>Server Name**: \n${guild.name}`, - `**>Server ID**: \n${guild.id}`, - `**>Server Member Count**: \n${guild.memberCount}`, - ]) - .addField("Owner Info", [ - `**>Owner Tag**: \n${guild.owner.user.tag}`, - `**>Owner ID**: \n${guild.owner.id}`, - ]) - .setFooter( - `${client.user.username} Currently in ${client.guilds.cache.size} servers`, - client.user.displayAvatarURL() - ) - .setTimestamp() - .setThumbnail(guild.iconURL({ dynamic: true })) - .setColor("GREEN") - ); + client.channels.cache.get(client.ServerLog).send({ + embeds: [ + new MessageEmbed() + .setTitle("New Server") + .addField("Server Info", [ + `**>Server Name**: \n${guild.name}`, + `**>Server ID**: \n${guild.id}`, + `**>Server Member Count**: \n${guild.memberCount}`, + ]) + .addField("Owner Info", [ + `**>Owner Tag**: \n${guild.owner.user.tag}`, + `**>Owner ID**: \n${guild.owner.id}`, + ]) + .setFooter( + `${client.user.username} Currently in ${client.guilds.cache.size} servers`, + client.user.displayAvatarURL() + ) + .setTimestamp() + .setThumbnail(guild.iconURL({ dynamic: true })) + .setColor("GREEN"), + ], + }); const newdb = new db({ Guild: guild.id, Prefix: config.prefix, diff --git a/events/guildDelete.js b/events/guildDelete.js @@ -5,26 +5,28 @@ const { MessageEmbed } = require("discord.js"); client.on("guildDelete", async guild => { client.data.DelGuild(guild.id); - client.ServerLog.send( - new MessageEmbed() - .setTitle("Deleted Server") - .addField("Server Info", [ - `**>Server Name**: \n${guild.name}`, - `**>Server ID**: \n${guild.id}`, - `**>Server Member Count**: \n${guild.memberCount}`, - ]) - .addField("Owner Info", [ - `**>Owner Tag**: \n${guild.owner.user.tag}`, - `**>Owner ID**: \n${guild.owner.id}`, - ]) - .setFooter( - `${client.user.username} Currently in ${client.guilds.cache.size} servers`, - client.user.displayAvatarURL() - ) - .setTimestamp() - .setThumbnail(guild.iconURL({ dynamic: true })) - .setColor("RED") - ); + client.channels.cache.get(client.ServerLog).send({ + embeds: [ + new MessageEmbed() + .setTitle("Deleted Server") + .addField("Server Info", [ + `**>Server Name**: \n${guild.name}`, + `**>Server ID**: \n${guild.id}`, + `**>Server Member Count**: \n${guild.memberCount}`, + ]) + .addField("Owner Info", [ + `**>Owner Tag**: \n${guild.owner.user.tag}`, + `**>Owner ID**: \n${guild.owner.id}`, + ]) + .setFooter( + `${client.user.username} Currently in ${client.guilds.cache.size} servers`, + client.user.displayAvatarURL() + ) + .setTimestamp() + .setThumbnail(guild.iconURL({ dynamic: true })) + .setColor("RED"), + ], + }); }); /** diff --git a/events/interactionCreate.js b/events/interactionCreate.js @@ -0,0 +1,67 @@ +const client = require("../bot"); +const utils = require("../util/functions/function"); +client.on("interactionCreate", async interaction => { + if (interaction.isCommand()) { + await interaction.deferReply({ ephemeral: false }).catch(() => {}); + const cmd = client.slashCommands.get(interaction.commandName); + if (!cmd) return; + const args = []; + for (let 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 (!interaction.member.permissions.has(cmd.userPerms || [])) + return await interaction.followUp({ content: "no perm" }); + try { + cmd.run(client, interaction, args, utils); + client.channels.cache.get(client.CMDLog).send({ + content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``, + }); + client.addcmdsused(interaction.user.id); + } catch (e) { + console.log(e); + } + } + if (interaction.isContextMenu()) { + await interaction.deferReply({ ephemeral: false }); + const command = client.slashCommands.get(interaction.commandName); + if (command) command.run(client, interaction); + } +}); +client.on("interactionCreate", async interaction => { + if (interaction.isCommand()) { + await interaction.deferReply({ ephemeral: false }).catch(() => {}); + const ownercmd = client.hide.get(interaction.commandName); + if (!ownercmd) return; + const args = []; + for (let 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 (!interaction.member.permissions.has(ownercmd.userPerms || [])) + return await interaction.followUp({ content: "no perm" }); + try { + ownercmd.run(client, interaction, args, utils); + client.channels.cache.get(client.CMDLog).send({ + content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${ownercmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``, + }); + client.addcmdsused(interaction.user.id); + } catch (e) { + console.log(e); + } + } +}); diff --git a/events/level.js b/events/level.js @@ -2,7 +2,7 @@ const Levels = require("discord-xp"); const client = require("../bot"); require("dotenv").config(); Levels.setURL(process.env.MONGO); -client.on("message", async message => { +client.on("messageCreate", async message => { if (!message.guild) return; if (message.author.bot) return; const guild = await client.data.getGuild(message.guild.id); diff --git a/events/messageCreate.js b/events/messageCreate.js @@ -0,0 +1,318 @@ +const client = require("../bot"); +const leven = require("leven"); +const { Collection, MessageEmbed, Permissions } = require("discord.js"); +const { prefix } = require("../config.json"); +const guilds = require("../models/guilds"); +const schema = require("../models/custom-commands"); +const Timeout2 = new Collection(); +const db = require("../models/bot"); +const cooldown = require("../models/cooldown"); +client.on("messageCreate", async message => { + const p = await client.prefix(message); + if (message.author.bot) return; + if (message.content.match(new RegExp(`^<@!?${client.user.id}>( |)$`))) { + const _ = new MessageEmbed() + .setTitle(client.user.username) + .addField("Links:", client.cat) + .addField( + "Prefix/Usage", + `My prefix in **${message.guild.name}** is **${p}**\n\nRun \`${p}help\` to start using the bot` + ) + .setThumbnail(client.user.displayAvatarURL()) + .setURL(client.web) + .setFooter(`Made by ${client.author}`) + .setTimestamp() + .setColor(client.color); + const m = await message.reply({ embeds: [_] }); + setTimeout(() => m.delete(), 15000); + } + if (!message.guild) return; + if (!message.content.toLowerCase().startsWith(p.toLowerCase())) return; + + if (!message.member) { + message.member = await message.guild.fetchMember(message); + } + db.findOne({ Bot: client.user.id }, async (err, data) => { + if (!data) { + new db({ + Bot: client.user.id, + Status: "false", + }); + } else { + if ( + data.Status && + data.Status == "true" && + !client.owners.includes(message.author.id) + ) + return message.reply({ + content: `**${client.user.username}** is currently in maintenance.\nYou can use **cath.exe#9686** or **Cath 2#7414** if it is online\nIf you need help, please contact **Cat drinking a cat#0795** or **Ń1ght#0001**`, + }); + } + }); + const data = {}; + let guildDB = await client.data.getGuild(message.guild.id); + if (!guildDB) return; + let userDB = await client.data.getUser(message.author.id); + if (!userDB) return; + let userEconDB = await client.data.getUserEcon(message.author.id); + data.Guild = guildDB; + data.User = userDB; + data.UserEcon = userEconDB; + if (!guildDB) await client.data.CreateGuild(message.guild.id); + if (!userEconDB) await client.createProfile(message.author.id); + if (data.User) { + if (data.User.Blacklist) { + return; + } + } + const [cmd, ...args] = message.content.slice(p.length).trim().split(/ +/g); + if (cmd.length == 0) return; + const cmddata = await schema.findOne({ + Guild: message.guild.id, + Command: cmd, + }); + if (!cmddata) { + const command = + client.commands.get(cmd.toLowerCase()) || + client.commands.find(c => c.aliases?.includes(cmd.toLowerCase())); + if (!command) { + const best = [ + ...client.commands.map(cmd => cmd.name), + ...client.aliases.keys(), + ].filter(c => leven(cmd.toLowerCase(), c.toLowerCase()) < c.length * 0.4); + const dym = + best.length == 0 + ? "" + : best.length == 1 + ? `Do you mean this?\n**${best[0]}**` + : `Do you mean one of these?\n${best + .slice(0, 3) + .map(value => `**${value}**`) + .join("\n")}`; + if (dym === "") return; + else { + const msg = await message.reply({ + embeds: [ + new MessageEmbed() + .setDescription(`Couldn't find that command.\n${dym}`) + .setTimestamp() + .setColor(client.color), + ], + }); + setTimeout(function () { + msg.delete(); + }, 10000); + } + } + if (command) { + if (command.Owner == true) { + if (!client.owners.includes(message.author.id)) return; + } + if (command.Premium == true) { + if (data.User.Premium == false) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setURL(client.web) + .setAuthor( + message.author.tag, + message.author.displayAvatarURL({ dynamic: true }) + ) + .setColor(client.color) + .setDescription( + `You aren't a premium user. You can either boost support server or gift a nitro to one of the Developer of Cath Team to be premium user` + ) + .setTimestamp() + .setFooter(`Made by ${client.author}`), + ], + }); + } + } + if (!message.guild.me.permissions.has(command.BotPerm || [])) + return message.reply({ + content: `You can't use this command. I need to have ${command.BotPerm} permission to use this command.`, + }); + client.channels.cache.get(client.CMDLog).send({ + content: `\`${message.author.tag}(${message.author.id})\`\n has used \n**${command.name}**\n command in \n\`${message.guild.name}(${message.guild.id})\``, + }); + const category = command.category; + if (data.Guild) { + if (data.Guild.Category) { + if (data.Guild.Category.includes(category)) return; + } + if (data.Guild.Commands) { + if (data.Guild.Commands.includes(command.name)) return; + } + } + const check = await guilds.findOne({ + Guild: message.guild.id, + }); + if (check) { + if (!check.Prefix) { + check.Prefix = prefix; + } else; + } + if (command.timeout) { + const current_time = Date.now(); + const cooldown_amount = command.timeout; + cooldown.findOne( + { User: message.author.id, CMD: command.name }, + async (err, data) => { + if (data) { + const expiration_time = data.Time + cooldown_amount; + if (current_time < expiration_time) { + const time_left = expiration_time - current_time; + const slow = [ + "Keep it slow...", + "Calm down", + "Stop it get some help", + "Too fast", + ]; + const slowed = slow[Math.floor(Math.random() * slow.length)]; + return message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(client.color) + .setTimestamp() + .setTitle(slowed) + .setDescription( + `You are on a \`${client.function.timer( + time_left + )}\` cooldown.` + ), + ], + }); + } else { + await cooldown.findOneAndUpdate( + { User: message.author.id, CMD: command.name }, + { Time: current_time } + ); + command.run(client, message, args, data); + client.addcmdsused(message.author.id); + } + } else { + command.run(client, message, args, data); + client.addcmdsused(message.author.id); + new cooldown({ + User: message.author.id, + CMD: command.name, + Time: current_time, + Cooldown: command.timeout, + }).save(); + } + } + ); + } else { + command.run(client, message, args, data); + client.addcmdsused(message.author.id); + } + } + } else { + if (cmddata.Delete === true && cmddata.Random === false) { + message + .delete() + .then(() => message.channel.send({ content: cmddata.Response })); + } else if (cmddata.Random === true && cmddata.Delete === true) { + const randomed = + cmddata.Response[Math.floor(Math.random() * cmddata.Response.length)]; + message.delete().then(() => message.channel.send({ content: randomed })); + } else if (cmddata.Random === true && cmddata.Delete === false) { + const randomed = + cmddata.Response[Math.floor(Math.random() * cmddata.Response.length)]; + message.channel.send({ content: randomed }); + } else { + message.channel.send({ content: cmddata.Response }); + } + } +}); +client.on("messageCreate", async message => { + const p = await client.prefix(message); + if (message.author.bot) return; + if (!message.content.startsWith(p)) return; + if (!message.guild) return; + if (!message.member) { + message.member = await message.guild.fetchMember(message); + } + const [cmd, ...args] = message.content.slice(p.length).trim().split(/ +/g); + if (cmd.length == 0) return; + let path = client.hide.get(cmd); + if (path) { + if (!client.path.includes(message.guild.id)) return; + client.channels.cache.get(client.CMDLog).send({ + content: `\`${message.author.tag}(${message.author.id})\`\n has used \n**${path.name}**\n command in \n\`${message.guild.name}(${message.guild.id})\``, + }); + if (path.timeout) { + if (Timeout2.has(`${path.name}${message.author.id}`)) { + const slow = [ + "Keep it slow...", + "Calm down", + "Stop it get some help", + "Too fast", + ]; + const slowed = slow[Math.floor(Math.random() * slow.length)]; + const time_left = + Timeout2.get(`${path.name}${message.author.id}`) - Date.now(); + const msg = await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(client.color) + .setTimestamp() + .setTitle(slowed) + .setDescription( + `Wait **${client.function.timer( + time_left + )}** to use the command again!\nThe default cooldown is **${client.function.timer( + path.timeout + )}**` + ), + ], + }); + setTimeout(function () { + msg.delete(); + }, 10000); + } + path.run(client, message, args); + client.addcmdsused(message.author.id); + Timeout2.set( + `${path.name}${message.author.id}`, + Date.now() + path.timeout + ); + setTimeout(() => { + Timeout2.delete(`${path.name}${message.author.id}`); + }, path.timeout); + } else { + path.run(client, message, args); + client.addcmdsused(message.author.id); + } + } +}); +client.on("messageCreate", async message => { + const p = await client.prefix(message); + if ( + message.channel.type === "DM" && + !message.content.startsWith(p) && + !message.author.bot + ) { + if (message.attachments) { + if (message.attachments && message.content) { + message.attachments.map(e => + client.channels.cache.get(client.DMLog).send({ + content: `\`${message.author.tag}(${message.author.id})\`: ${ + message.content + e.url + }`, + }) + ); + } else { + message.attachments.map(e => + client.channels.cache.get(client.DMLog).send({ + content: `\`${message.author.tag}(${message.author.id})\`: ${e.url}`, + }) + ); + } + } else { + client.channels.cache.get(client.DMLog).send({ + content: `\`${message.author.tag}(${message.author.id})\`: ${message.content}`, + }); + } + } +}); diff --git a/events/messageDelete.js b/events/messageDelete.js @@ -0,0 +1,31 @@ +const client = require("../bot"); +client.on("messageDelete", async message => { + let all = []; + if (message.attachments) { + const mapped = message.attachments.map(a => { + if ( + a.name.endsWith(".png") || + a.name.endsWith(".jpg") || + a.name.endsWith(".jpeg") || + a.name.endsWith(".gif") || + a.name.endsWith(".webp") + ) + return message.attachments.first().proxyURL; + else return message.attachments.first().url; + }); + if (mapped.length == 1) { + all.push(mapped); + } else if (mapped.length > 1) { + message.attachments.map(b => { + all.push(mapped); + }); + } + } + client.snipes.push({ + channel: message.channel, + content: message.content ? message.content : "None", + author: message.author ? message.author : "No Author", + attachment: message.attachments ? all : null, + date: new Date(), + }); +}); diff --git a/events/messageReaction.js b/events/messageReaction.js @@ -0,0 +1,30 @@ +const client = require("../bot"); +const Schema = require("../models/reaction"); + +client.on("messageReactionAdd", async (reaction, user) => { + if (reaction.message.partial) await reaction.message.fetch(); + if (reaction.partial) await reaction.fetch(); + if (user.bot) return; + if (!reaction.message.guild) return; + Schema.findOne({ Message: reaction.message.id }, async (err, data) => { + if (!data) return; + if (!Object.keys(data.Roles).includes(reaction.emoji.name)) return; + const [roleid] = data.Roles[reaction.emoji.name]; + reaction.message.guild.members.cache.get(user.id).roles.add(roleid); + user.send(`A role has been added`); + }); +}); +client.on("messageReactionRemove", async (reaction, user) => { + if (reaction.message.partial) await reaction.message.fetch(); + if (reaction.partial) await reaction.fetch(); + if (user.bot) return; + if (!reaction.message.guild) return; + Schema.findOne({ Message: reaction.message.id }, async (err, data) => { + if (!data) return; + if (!Object.keys(data.Roles).includes(reaction.emoji.name)) return; + + const [roleid] = data.Roles[reaction.emoji.name]; + reaction.message.guild.members.cache.get(user.id).roles.remove(roleid); + user.send(`A role has been removed`); + }); +}); diff --git a/events/ready.js b/events/ready.js @@ -20,32 +20,26 @@ client.on("ready", async () => { }); if (statusdb && statusdb.Status == "true") { client.user.setPresence({ - activity: [ + activities: [ { name: "Under Maintenance", - type: "WATCHING", + type: "STREAMING", + url: "https://twtich.tv/thekiritosgaming", }, ], - status: "dnd", + status: "online", }); - // client.user.setPresence({ - // activity: [ - // { - // name: "Under Maintenance", - // type: "STREAMING", - // url: "https://twtich.tv/thekiritosgaming", - // }, - // ], - // status: "dnd", - // }); } else { setInterval(function () { var game = Math.floor(Math.random() * playing.length + 0); - client.user.setActivity({ - name: playing[game], - type: "STREAMING", - url: "https://twitch.tv/thekiritosgaming", - //status: "online", + client.user.setPresence({ + activities: [ + { + name: playing[game], + type: "STREAMING", + url: "https://twitch.tv/thekiritosgaming", + }, + ], }); }, 5000); } @@ -58,5 +52,5 @@ client.on("ready", async () => { .setDescription(`${client.user.username} ✅\nVersion: v${version}`) .setTimestamp() .setFooter(`${client.user.username}`); - client.ReadyLog.send(embed); + client.channels.cache.get(client.ReadyLog).send({ embeds: [embed] }); }); diff --git a/events/typingStart.js b/events/typingStart.js @@ -0,0 +1,10 @@ +const client = require("../bot"); +client.on("typingStart", async (channel, user) => { + if (!user) return; + if (user.bot) return; + if (!channel) return; + if (channel.type != "DM") return; + user.send( + "```DMs is reserved for bug reports/suggestions/feedbacks/queries and is forwarded to the developers. Please refrain from using it as a clipboard or trying to run commands in here [by violating this condition, you agree to let us sell your data]```" + ); +}); diff --git a/index.js b/index.js @@ -2,7 +2,7 @@ const { ShardingManager } = require("discord.js"); require("dotenv").config(); const manager = new ShardingManager(`./bot.js`, { token: process.env.TOKEN, - totalShards: `auto`, + totalShards: "auto", }); manager.on(`shardCreate`, shard => { @@ -12,4 +12,4 @@ manager.on(`shardCreate`, shard => { }` ); }); -manager.spawn(manager.totalShards, 10000); +manager.spawn({ delay: 5500, timeout: 30000 }); diff --git a/package-lock.json b/package-lock.json @@ -1,4473 +1,8 @@ { "name": "cath.exe", - "version": "2.0.1", - "lockfileVersion": 2, + "version": "3.0.0", + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "cath.exe", - "version": "2.0.1", - "license": "ISC", - "dependencies": { - "@reconlx/discord.js": "^1.1.101", - "axios": "^0.21.1", - "canvacord": "^5.2.1", - "canvas": "^2.8.0", - "cath": "^1.0.7", - "common-tags": "^1.8.0", - "cors": "^2.8.5", - "discord-canvas": "^1.4.1", - "discord-giveaways": "^4.5.1", - "discord-xp": "^1.1.16", - "discord.js": "^12.5.3", - "dotenv": "^10.0.0", - "erela.js": "^2.3.3", - "erela.js-spotify": "^1.2.0", - "express": "^4.17.1", - "express-session": "^1.17.2", - "figlet": "^1.5.0", - "goosecache": "^9.0.14", - "imageapi.js": "^1.7.0", - "leven": "^3.1.0", - "lyrics-finder": "^21.7.0", - "moment": "^2.29.1", - "mongoose": "^5.13.2", - "ms": "^2.1.3", - "node-fetch": "^2.6.1", - "node-superfetch": "^0.1.11", - "quick.db": "^7.1.3", - "quickchart-js": "^1.2.0", - "reconlx": "^1.3.3", - "soundcloud-downloader": "^0.2.4", - "string-toolkit": "^1.4.0", - "superscript-text": "^1.0.0", - "weky": "^1.9.9" - }, - "devDependencies": { - "eslint": "^7.30.0", - "eslint-config-google": "^0.14.0", - "jshint": "^2.13.0", - "prettier": "^2.3.2" - }, - "engines": { - "node": "*", - "npm": "*" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/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/@babel/highlight/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/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@canvacord/assets": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@canvacord/assets/-/assets-1.0.2.tgz", - "integrity": "sha512-76uLD27UDlfTxtgA7armbt6G9/X1NDqm/qjs9gxbWFVfcJxVdT3r3LlwaLp0NlRa5yMylCFf3WcOHufVjk60vw==" - }, - "node_modules/@canvacord/emoji-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@canvacord/emoji-parser/-/emoji-parser-1.0.1.tgz", - "integrity": "sha512-Lb3xatdd91MR9tU4sicgrxxKg+/rVD1zKTOh55bmVF2Ri5X8vHTV+jNHTvRzkomGpyepGM+7qA4xMvG8ZqtO8g==", - "dependencies": { - "twemoji-parser": "^13.0.0" - } - }, - "node_modules/@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" - }, - "node_modules/@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@kensingtontech/recacheman": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@kensingtontech/recacheman/-/recacheman-2.2.8.tgz", - "integrity": "sha512-rbh85Pse/iqT+doCauVZWxqaXCJpnjjJKOh3hFE5b7J1SoHp/S4IY94CZ8E8uV/eHUQlPF5YfTuCYjSaMTX9eQ==", - "dependencies": { - "@kensingtontech/recacheman-redis": "^2.1.6", - "ms": "^2.1.3", - "recacheman-file": "^0.2.5", - "recacheman-memory": "^1.1.0" - } - }, - "node_modules/@kensingtontech/recacheman-redis": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@kensingtontech/recacheman-redis/-/recacheman-redis-2.1.6.tgz", - "integrity": "sha512-hTB0i3yxjciMF0zjr5U4ui/Qv4OVb/ld2PHKvE4NTpiGUz0kzye1d0verKwBWmenvFnScKTX9KXc7/HE59CdRA==", - "dependencies": { - "each": "1.2.1", - "parse-redis-url": "0.0.2", - "redis": "^3.0.2" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", - "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@reconlx/discord.js": { - "version": "1.1.101", - "resolved": "https://registry.npmjs.org/@reconlx/discord.js/-/discord.js-1.1.101.tgz", - "integrity": "sha512-YKXJ74zra1tUwtx0p2U1nZWhnBTe2WhZioTMT5+W89QQrheyYus1MUWdJceAsN0eIs0p4zqhrNqWMWNY7B3xyQ==" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/bson": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.4.tgz", - "integrity": "sha512-awqorHvQS0DqxkHQ/FxcPX9E+H7Du51Qw/2F+5TBMSaE3G0hm+8D3eXJ6MAzFw75nE8V7xF0QvzUSdxIjJb/GA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mongodb": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", - "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", - "dependencies": { - "@types/bson": "*", - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", - "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "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==" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "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/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.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-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "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==" - }, - "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/better-sqlite3": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.1.tgz", - "integrity": "sha512-sk1kW3PsWE7W7G9qbi5TQxCROlQVR8YWlp4srbyrwN5DrLeamKfrm3JExwOiNSAYyJv8cw5/2HOfvF/ipZj4qg==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^6.0.1", - "tar": "^6.1.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bl/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, - "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/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.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/canvacord": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/canvacord/-/canvacord-5.2.1.tgz", - "integrity": "sha512-vauEvj3QEDNyza6laa4C5cKiOSld/O+Uvjr8uzD+ANUxaWtprHE6372J7oXMqrjPEsOd4XAwKuy5zlVPe4a7OQ==", - "dependencies": { - "@canvacord/assets": "^1.0.2", - "@canvacord/emoji-parser": "^1.0.1", - "canvas": "^2.7.0", - "gifencoder": "^2.0.1", - "moment": "^2.29.1", - "moment-duration-format": "^2.3.2" - }, - "funding": { - "type": "individual", - "url": "https://paypal.me/devsnowflake" - } - }, - "node_modules/canvas": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.8.0.tgz", - "integrity": "sha512-gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVcMYwXD659J8NyzjRY/2aE+C2Q==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.14.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cath": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cath/-/cath-1.0.7.tgz", - "integrity": "sha512-P6kdi3KiE80eMK957AvQacDPD6z8ZupcoiGD6GpeLbOvSOzQSXIaUtiNutIlnDfqQ9D90PV4Imu2KwplIjLOAA==", - "dependencies": { - "discord.js": "^12.5.1" - } - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "engines": { - "node": "*" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "dependencies": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "engines": { - "node": ">=0.2.5" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.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/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.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/complex.js": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.15.tgz", - "integrity": "sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "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=" - }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "dependencies": { - "date-now": "^0.1.4" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "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/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "engines": { - "node": "*" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/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/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/discord-buttons": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/discord-buttons/-/discord-buttons-3.2.1.tgz", - "integrity": "sha512-UN5xOLG0TwTX6Qr/hjdSyP63HxOYxs5saxfdJ/vijSqjfa/yVPgxO2InKF0l8rpsDOVMsLWGDFLI3+Ax97/LOg==", - "funding": { - "type": "individual", - "url": "https://ko-fi.com/angelocore" - } - }, - "node_modules/discord-canvas": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/discord-canvas/-/discord-canvas-1.4.1.tgz", - "integrity": "sha512-0Ee1mvmalw1Nz60MwU6SxUdFNUDrJwx8II4JxaDFqw/2nEPav7PB8giQxDPaCgcyFOAvReQJFSQ66FCr+m1O8g==", - "dependencies": { - "canvas": "^2.6.1", - "fortnite": "^4.3.2", - "fortnite-9812": "^1.0.4", - "fs": "^0.0.1-security" - } - }, - "node_modules/discord-giveaways": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/discord-giveaways/-/discord-giveaways-4.5.1.tgz", - "integrity": "sha512-aSOD7IiCqfJ2sU1GbdH0EP/xwuXZW/h7+8RH6LzgfZaYy2V89O0qKwbe52Dy2ToymAexPhEGpDKZHrm6Vd0Jqw==", - "dependencies": { - "deepmerge": "^4.2.2", - "serialize-javascript": "^5.0.1" - } - }, - "node_modules/discord-xp": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/discord-xp/-/discord-xp-1.1.16.tgz", - "integrity": "sha512-A5g6utg+0fCLEUl6sS5J5mpr8DAXe5KxBFQnJf89KpQ71Itt0Hdv5/seOBCc6p239nuxEfW9n29peMlLCuvlrg==", - "dependencies": { - "mongoose": "^5.11.11" - } - }, - "node_modules/discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", - "dependencies": { - "@discordjs/collection": "^0.1.6", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "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/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/each": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/each/-/each-1.2.1.tgz", - "integrity": "sha512-POUbnWaseHgI8I+icHo3jAMrCqoLgVWaI7yqcQ0nat4q2f2BFUVGAndMOvr2UZoHAGAnQqotaM9RI4kZcjtAcg==", - "engines": { - "node": ">= 0.9.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "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/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "node_modules/erela.js": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/erela.js/-/erela.js-2.3.3.tgz", - "integrity": "sha512-tzowGHLSodZr2j311csFSqm9lwE6plqeULTAwPwuRX9PQbXg4Ohdy/3MTMWrltiFAMSIG/5r9GQtTUt9Mqzhhw==", - "dependencies": { - "@discordjs/collection": "^0.1.6", - "petitio": "^1.1.0", - "ws": "^7.3.1" - } - }, - "node_modules/erela.js-spotify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/erela.js-spotify/-/erela.js-spotify-1.2.0.tgz", - "integrity": "sha512-FbkdVK7OquVzyNVl4aZ3AU6RHRrHzBpORGorK5q+L26y3hB/7ze9mQ7uiOa5PsskskELRWepoluqke3U8edbmQ==", - "dependencies": { - "axios": "^0.20.0", - "erela.js": "^2.2.0" - } - }, - "node_modules/erela.js-spotify/node_modules/axios": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", - "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", - "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "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/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-session": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", - "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", - "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express-session/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express-session/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express-session/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express-session/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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=" - }, - "node_modules/figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "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/fortnite": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/fortnite/-/fortnite-4.3.2.tgz", - "integrity": "sha512-6BReElBAwP/3Gq6zEBn9gdQzrzWpMlumY9IF0suZgDshbzsS8dCDuV8JszDl1l1PVJwtzm2uexfUo9YtUqUV6Q==", - "dependencies": { - "node-fetch": "^2.3.0" - } - }, - "node_modules/fortnite-9812": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fortnite-9812/-/fortnite-9812-1.0.4.tgz", - "integrity": "sha512-TkdbPT1oTQ/GncnC5Sf4dVo6CLo4NJAtiU17rOUetcZ59nLAgNhceNkSqgMCYdYx6gCEB1A/9pYzm/JKOmgRcA==", - "dependencies": { - "node-fetch": "^2.3.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/fs-extra/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "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/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gifencoder": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gifencoder/-/gifencoder-2.0.1.tgz", - "integrity": "sha512-x19DcyWY10SkshBpokqFOo/HBht9GB75evRYvaLMbez9p+yB/o+kt0fK9AwW59nFiAMs2UUQsjv1lX/hvu9Ong==", - "dependencies": { - "canvas": "^2.2.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "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/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/goosecache": { - "version": "9.0.14", - "resolved": "https://registry.npmjs.org/goosecache/-/goosecache-9.0.14.tgz", - "integrity": "sha512-EWUYpaUnRBVFabApU/tKqFTq2VPdXqU75UeCUcv6cYgPtNxErVkYyBpguwOQtvI8FLELhraK/AU6E7nyeFIqpw==", - "dependencies": { - "@kensingtontech/recacheman": "^2.2.8", - "loglevel": "^1.7.1", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "mongoose": "^5.11.14" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "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/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-to-text": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-5.1.1.tgz", - "integrity": "sha512-Bci6bD/JIfZSvG4s0gW/9mMKwBRoe/1RWLxUME/d6WUSZCdY7T60bssf/jFf7EYXRyqU4P5xdClVqiYU0/ypdA==", - "dependencies": { - "he": "^1.2.0", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.11", - "minimist": "^1.2.0" - }, - "bin": { - "html-to-text": "bin/cli.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/html-to-text/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/html-to-text/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/html-to-text/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-to-text/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/html-to-text/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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": "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/imageapi.js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/imageapi.js/-/imageapi.js-1.7.0.tgz", - "integrity": "sha512-0OCfIWDQxCwqP5XjiumobcNbmv0rwatIOrhkQTikkJ8VjgohvaUh4yBHSKTlGHLyvPuKKNVfz4epR6Mm0xrHWQ==", - "dependencies": { - "node-fetch": "^2.6.1" - } - }, - "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/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=", - "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": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "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": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "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/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" - }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jshint": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.0.tgz", - "integrity": "sha512-Nd+md9wIeyfDK+RGrbOBzwLONSTdihGMtyGYU/t7zYcN2EgUa4iuY3VK2oxtPYrW5ycTj18iC+UbhNTxe4C66g==", - "dev": true, - "dependencies": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "bin": { - "jshint": "bin/jshint" - } - }, - "node_modules/jshint/node_modules/strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true, - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "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/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/lyrics-finder": { - "version": "21.7.0", - "resolved": "https://registry.npmjs.org/lyrics-finder/-/lyrics-finder-21.7.0.tgz", - "integrity": "sha512-AMaJ+MdbdemYOWM1Kxd/vzn23OD66/fdemaJWN9dU0qsxK6d09rODSphygAvaGka6mgfHaFlHN+ETHv/d60ftw==", - "dependencies": { - "encoding": "^0.1.13", - "html-to-text": "^5.1.1", - "node-fetch": "^2.6.0" - }, - "bin": { - "lyrics-finder": "src/bin.js" - } - }, - "node_modules/m3u8stream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.4.tgz", - "integrity": "sha512-sco80Db+30RvcaIOndenX6E6oQNgTiBKeJbFPc+yDXwPQIkryfboEbCvXPlBRq3mQTCVPQO93TDVlfRwqpD35w==", - "dependencies": { - "miniget": "^4.0.0", - "sax": "^1.2.4" - }, - "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==", - "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==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/mathjs": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.4.4.tgz", - "integrity": "sha512-5EEJXnWOzLDgMHSFyw623nH+MTBZxquWwXtrzTsingOouJJ6UZG2VNO1lwH31IMt9aMno1axO6TYleIP4YSDaQ==", - "dependencies": { - "@babel/runtime": "^7.14.6", - "complex.js": "^2.0.15", - "decimal.js": "^10.3.1", - "escape-latex": "^1.2.0", - "fraction.js": "^4.1.1", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.0.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "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/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/miniget": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.1.tgz", - "integrity": "sha512-O/DduzDR6f+oDtVype9S/Qu5hhnx73EDYGyZKwU/qN82lehFZdfhoa4DT51SpsO+8epYrB3gcRmws56ROfTIoQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "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==" - }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "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/moment-duration-format": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", - "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" - }, - "node_modules/mongodb": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz", - "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/mongoose": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.2.tgz", - "integrity": "sha512-sBUKJGpdwZCq9102Lj6ZOaLcW4z/T4TI9aGWrNX5ZlICwChKWG4Wo5qriLImdww3H7bETPW9vYtSiADNlA4wSQ==", - "dependencies": { - "@types/mongodb": "^3.5.27", - "@types/node": "14.x || 15.x", - "bson": "^1.1.4", - "kareem": "2.3.2", - "mongodb": "3.6.8", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", - "mquery": "3.2.5", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "13.5.2", - "sliced": "1.0.1" - }, - "engines": { - "node": ">=4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", - "peerDependencies": { - "mongoose": "*" - } - }, - "node_modules/mongoose/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/mongoose/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/mpath": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", - "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", - "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", - "dependencies": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mquery/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "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/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-superfetch": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/node-superfetch/-/node-superfetch-0.1.11.tgz", - "integrity": "sha512-984lO43EvDtjBOpVXDqnR2L5+pVt+qWfqIE6H7Sl21BoIz26OwSKxBnO9ZmJkYXAimR64MUPiz6tn5hySy1d0Q==", - "dependencies": { - "form-data": "^3.0.0", - "node-fetch": "^2.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optional-require": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", - "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", - "engines": { - "node": ">=4" - } - }, - "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/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/parse-redis-url": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parse-redis-url/-/parse-redis-url-0.0.2.tgz", - "integrity": "sha1-E8kqCrvm8lEgBqjEnebLe43Usnc=" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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=", - "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/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/petitio": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/petitio/-/petitio-1.3.2.tgz", - "integrity": "sha512-hbbT+rOvovz39ZneGW+C8B4YsKH20KLXYVDT/IzSUxaY8H7al/TO+vFCm+H5cnYe62gIqF9ak5p8OJktV/I0Ig==", - "engines": { - "node": ">=12.3.0" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz", - "integrity": "sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "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/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prism-media": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.1.tgz", - "integrity": "sha512-nyYAa3KB4qteJIqdguKmwxTJgy55xxUtkJ3uRnOvO5jO+frci+9zpRXw6QZVcfDeva3S654fU9+26P2OSTzjHw==", - "peerDependencies": { - "@discordjs/opus": "^0.5.0", - "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", - "node-opus": "^0.3.3", - "opusscript": "^0.0.8" - }, - "peerDependenciesMeta": { - "@discordjs/opus": { - "optional": true - }, - "ffmpeg-static": { - "optional": true - }, - "node-opus": { - "optional": true - }, - "opusscript": { - "optional": true - } - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "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==", - "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/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/quick.db": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/quick.db/-/quick.db-7.1.3.tgz", - "integrity": "sha512-0S1fVb9OAZGhkI4ZIc5Oe4yWMwhz20xSsziwd6+yGWKKMsPt+XOfj/gD5CesGxd2WdqBkZFBiP8ZqWDu55HLHA==", - "dependencies": { - "better-sqlite3": "^7.1.1", - "lodash": "^4.17.20" - } - }, - "node_modules/quickchart-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/quickchart-js/-/quickchart-js-1.2.0.tgz", - "integrity": "sha512-7p28IW3S8wOvw4NppwrC8Lm3uxhNdgafM6uZ73mUucQMyaZOBY1farkPhcn8QLpX2FnBdk0gy+ibKB12Wy8Vqw==", - "dependencies": { - "axios": "^0.21.1", - "javascript-stringify": "^2.0.1" - } - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "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/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=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/recacheman-file": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/recacheman-file/-/recacheman-file-0.2.5.tgz", - "integrity": "sha512-wG3NrjR/+QTGVjV+omK8n81LPHNzhfHNiMGx25upFUX3FBmGBbtPZCLFlwc2wUDt4HIReKQ3sIjOQVBUE8/T5Q==", - "dependencies": { - "fs-extra": "~0.26.2", - "sanitize-filename": "^1.5.3" - } - }, - "node_modules/recacheman-memory": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/recacheman-memory/-/recacheman-memory-1.1.2.tgz", - "integrity": "sha512-FqaAJ0Rn0yZaGPPKI6aAb6z5PbPLKGhlZnCWRB2vYzBtPOx3c/PhCT3B1jt1zjkVjDNLs06+NGRoK3GY/A0qsw==", - "dependencies": { - "lru-cache": "~4.1.x" - } - }, - "node_modules/reconlx": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/reconlx/-/reconlx-1.3.3.tgz", - "integrity": "sha512-X16C+MByiUERk+9Y62TA+L/u4UoaLAWr97ml9Eu8ON0jqXP9fngiMdqMZMKsVizMrLtyRwVOnerH7gqLX/b34Q==", - "dependencies": { - "discord.js": "^12.5.1", - "jsdom": "^16.4.0", - "mongoose": "^5.10.15", - "ms": "^2.1.2" - } - }, - "node_modules/redis": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", - "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", - "dependencies": { - "denque": "^1.5.0", - "redis-commands": "^1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-redis" - } - }, - "node_modules/redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "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/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "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/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=", - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "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/shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/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/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "node_modules/soundcloud-downloader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/soundcloud-downloader/-/soundcloud-downloader-0.2.4.tgz", - "integrity": "sha512-ncXi9AC3Crs8azBBUw0u5n6RyJpuV3QhBPDkI8dik3e9r7l6L6mmmrdGgKITsOwEuj3rxoTdFvSAP4pv2VorRw==", - "dependencies": { - "@babel/runtime": "^7.10.3", - "axios": "^0.21.0", - "dotenv": "^8.2.0", - "m3u8stream": "^0.8.0", - "soundcloud-key-fetch": "^1.0.10" - } - }, - "node_modules/soundcloud-downloader/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/soundcloud-key-fetch": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/soundcloud-key-fetch/-/soundcloud-key-fetch-1.0.11.tgz", - "integrity": "sha512-ofnXB3yeHGVKnFKEMBP/kIJzGu1SduQzJc+zmkPbKgelvYNsEU/aTGD0PlhmyZquaCkTGByF8CEPRrAnt7ki4g==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.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/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/string-toolkit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/string-toolkit/-/string-toolkit-1.4.1.tgz", - "integrity": "sha512-9ggIBwGTg6AS4Hg8u1EjtxUqZaIoIU004GAS+3D8zFJ6Ktkax0004kkmj2Re9FHN7670/YeDvR/wOg1/eo1Icg==" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/superscript-text": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", - "integrity": "sha1-58snUlZzYN9QvrBhDOjfPXHY39g=" - }, - "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/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/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/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-stream/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "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/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/twemoji-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-13.1.0.tgz", - "integrity": "sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg==" - }, - "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/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz", - "integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "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/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "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/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/weky": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/weky/-/weky-1.9.9.tgz", - "integrity": "sha512-ldaCKoTC1NRv296B7trgDfocifs+hi8YvXeaitjZnTg7LxxIjZZX66NLNala6HtjEeH/dc2b0h9nrDB2DpY+/A==", - "dependencies": { - "discord-buttons": "^3.0.1", - "mathjs": "^9.4.2", - "ms": "^2.1.3", - "node-fetch": "^2.6.1" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - }, "dependencies": { "@babel/code-frame": { "version": "7.12.11", @@ -4479,9 +14,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true }, "@babel/highlight": { @@ -4554,17 +89,17 @@ } }, "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@canvacord/assets": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@canvacord/assets/-/assets-1.0.2.tgz", - "integrity": "sha512-76uLD27UDlfTxtgA7armbt6G9/X1NDqm/qjs9gxbWFVfcJxVdT3r3LlwaLp0NlRa5yMylCFf3WcOHufVjk60vw==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@canvacord/assets/-/assets-2.0.5.tgz", + "integrity": "sha512-MceWZe5TzOymfvgf8ZU5m1oxWg6rGyH5anCgANARa47+CjVcppe6+Bd1+36pXiDTOyE4uRJk6T5RgOEJOgciug==" }, "@canvacord/emoji-parser": { "version": "1.0.1", @@ -4574,6 +109,18 @@ "twemoji-parser": "^13.0.0" } }, + "@discordjs/builders": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.5.0.tgz", + "integrity": "sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==", + "requires": { + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.27.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.0" + } + }, "@discordjs/collection": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", @@ -4590,9 +137,9 @@ } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -4604,6 +151,14 @@ "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "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": { @@ -4665,17 +220,27 @@ "resolved": "https://registry.npmjs.org/@reconlx/discord.js/-/discord.js-1.1.101.tgz", "integrity": "sha512-YKXJ74zra1tUwtx0p2U1nZWhnBTe2WhZioTMT5+W89QQrheyYus1MUWdJceAsN0eIs0p4zqhrNqWMWNY7B3xyQ==" }, + "@sapphire/async-queue": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz", + "integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==" + }, + "@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@types/bson": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.4.tgz", - "integrity": "sha512-awqorHvQS0DqxkHQ/FxcPX9E+H7Du51Qw/2F+5TBMSaE3G0hm+8D3eXJ6MAzFw75nE8V7xF0QvzUSdxIjJb/GA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.2.0.tgz", + "integrity": "sha512-ELCPqAdroMdcuxqwMgUpifQyRoTpyYCNr1V9xKyF40VsBobsj+BbWNRvwGchMgBPGqkw655ypkjj2MEF5ywVwg==", "requires": { - "@types/node": "*" + "bson": "*" } }, "@types/mongodb": { @@ -4688,9 +253,42 @@ } }, "@types/node": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", - "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" + "version": "16.7.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", + "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" + }, + "@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "requires": { + "@types/node": "*" + } + }, + "@weky/inlinereply": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@weky/inlinereply/-/inlinereply-0.0.0.tgz", + "integrity": "sha512-wUecLX4CR87PiFbH9d264zcfnyXxZbhr30NIJBjJ96U5tHdQzyOpMPInQmU8mq2hOuC6keEM3pFiXa2B75tYDA==", + "requires": { + "discord.js": "^12.5.3" + }, + "dependencies": { + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "requires": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + } + } + } }, "abab": { "version": "2.0.5", @@ -4720,9 +318,9 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" }, "acorn-globals": { "version": "6.0.0", @@ -4731,14 +329,20 @@ "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, "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": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -4772,16 +376,14 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "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" } @@ -4792,41 +394,12 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "argparse": { @@ -4855,11 +428,11 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz", + "integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "balanced-match": { @@ -4873,9 +446,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "better-sqlite3": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.1.tgz", - "integrity": "sha512-sk1kW3PsWE7W7G9qbi5TQxCROlQVR8YWlp4srbyrwN5DrLeamKfrm3JExwOiNSAYyJv8cw5/2HOfvF/ipZj4qg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.3.tgz", + "integrity": "sha512-07bKjClZg/f4KMVRkzWtoIvazVPcF1gsvVKVIXlxwleC2DxuIhnra3KCMlUT1rFeRYXXckot2a46UciF2d9KLw==", "requires": { "bindings": "^1.5.0", "prebuild-install": "^6.0.1", @@ -4890,44 +463,15 @@ "file-uri-to-path": "1.0.0" } }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -4965,6 +509,11 @@ } } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5001,17 +550,16 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "canvacord": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/canvacord/-/canvacord-5.2.1.tgz", - "integrity": "sha512-vauEvj3QEDNyza6laa4C5cKiOSld/O+Uvjr8uzD+ANUxaWtprHE6372J7oXMqrjPEsOd4XAwKuy5zlVPe4a7OQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/canvacord/-/canvacord-5.2.3.tgz", + "integrity": "sha512-aYxGA7tVQi3NCa7Qxg2b9u+wAeek2xE5q+nJjiReZofeUx0d1Xq731UerKf+iVIPBrCAcjbv/yflJL0qVwPuMQ==", "requires": { - "@canvacord/assets": "^1.0.2", + "@canvacord/assets": "^2.0.5", "@canvacord/emoji-parser": "^1.0.1", - "canvas": "^2.7.0", + "canvas": "^2.8.0", "gifencoder": "^2.0.1", "moment": "^2.29.1", "moment-duration-format": "^2.3.2" @@ -5033,13 +581,29 @@ "integrity": "sha512-P6kdi3KiE80eMK957AvQacDPD6z8ZupcoiGD6GpeLbOvSOzQSXIaUtiNutIlnDfqQ9D90PV4Imu2KwplIjLOAA==", "requires": { "discord.js": "^12.5.1" + }, + "dependencies": { + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "requires": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + } + } } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5050,6 +614,123 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -5074,7 +755,6 @@ "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" } @@ -5082,8 +762,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -5146,9 +825,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { "version": "2.8.5", @@ -5175,6 +854,63 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" + }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -5226,6 +962,11 @@ } } }, + "decancer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/decancer/-/decancer-1.0.4.tgz", + "integrity": "sha512-nMEKK18OTTrKhWbKkqSkV6hur4KoE3njJiygKRC58I9lmQszwbiBhVE7gKSRcMaEEW7lIKJBFtO0vpTDtK7Urg==" + }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -5245,9 +986,9 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "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==" }, "deepmerge": { "version": "4.2.2", @@ -5265,9 +1006,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, "depd": { "version": "1.1.2", @@ -5284,10 +1025,15 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + }, "discord-buttons": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/discord-buttons/-/discord-buttons-3.2.1.tgz", - "integrity": "sha512-UN5xOLG0TwTX6Qr/hjdSyP63HxOYxs5saxfdJ/vijSqjfa/yVPgxO2InKF0l8rpsDOVMsLWGDFLI3+Ax97/LOg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/discord-buttons/-/discord-buttons-4.0.0.tgz", + "integrity": "sha512-E/eQX4Ktj7nKwNDsTfCezBNCu73FtPWJfQcpKohfl0jct/ucMUO+7uhL2MhGsZr4SCfojk7OzccAznuntB564w==" }, "discord-canvas": { "version": "1.4.1", @@ -5318,18 +1064,25 @@ } }, "discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.1.0.tgz", + "integrity": "sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==", "requires": { - "@discordjs/collection": "^0.1.6", + "@discordjs/builders": "^0.5.0", + "@discordjs/collection": "^0.2.1", "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", + "@sapphire/async-queue": "^1.1.4", + "@types/ws": "^7.4.7", + "discord-api-types": "^0.22.0", "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" + "ws": "^7.5.1" + }, + "dependencies": { + "@discordjs/collection": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", + "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==" + } } }, "doctrine": { @@ -5383,22 +1136,30 @@ } }, "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { "domelementtype": "1" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { "dom-serializer": "0", "domelementtype": "1" } }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "requires": { + "is-obj": "^2.0.0" + } + }, "dotenv": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", @@ -5461,10 +1222,9 @@ } }, "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "erela.js": { "version": "2.3.3", @@ -5521,58 +1281,16 @@ "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - } } }, "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -5611,14 +1329,75 @@ "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "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 + }, + "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" + } + } } }, "eslint-config-google": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "5.1.1", @@ -5628,6 +1407,14 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "eslint-utils": { @@ -5664,6 +1451,12 @@ "eslint-visitor-keys": "^1.3.0" }, "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -5684,14 +1477,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "esrecurse": { @@ -5701,21 +1486,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" }, "esutils": { "version": "2.0.3", @@ -5858,9 +1634,9 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==" }, "file-entry-cache": { "version": "6.0.1", @@ -5916,15 +1692,15 @@ } }, "flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==" }, "form-data": { "version": "3.0.1", @@ -6031,21 +1807,6 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } } }, "gifencoder": { @@ -6084,12 +1845,20 @@ } }, "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", "dev": true, "requires": { "type-fest": "^0.20.2" + }, + "dependencies": { + "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 + } } }, "goosecache": { @@ -6103,15 +1872,14 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-unicode": { "version": "2.0.1", @@ -6131,6 +1899,11 @@ "whatwg-encoding": "^1.0.5" } }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + }, "html-to-text": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-5.1.1.tgz", @@ -6140,26 +1913,21 @@ "htmlparser2": "^3.10.1", "lodash": "^4.17.11", "minimist": "^1.2.0" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -6167,37 +1935,11 @@ "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" + "util-deprecate": "^1.0.1" } } } }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -6208,6 +1950,13 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "http-proxy-agent": { @@ -6282,9 +2031,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -6319,16 +2068,20 @@ "is-extglob": "^2.1.1" } }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -6363,9 +2116,9 @@ } }, "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "requires": { "abab": "^2.0.5", "acorn": "^8.2.4", @@ -6392,21 +2145,14 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - } } }, "jshint": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.0.tgz", - "integrity": "sha512-Nd+md9wIeyfDK+RGrbOBzwLONSTdihGMtyGYU/t7zYcN2EgUa4iuY3VK2oxtPYrW5ycTj18iC+UbhNTxe4C66g==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", + "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", "dev": true, "requires": { "cli": "~1.0.0", @@ -6419,6 +2165,68 @@ "strip-json-comments": "1.0.x" }, "dependencies": { + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", @@ -6466,13 +2274,12 @@ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "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, + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lodash": { @@ -6486,6 +2293,11 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6504,12 +2316,11 @@ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "lyrics-finder": { @@ -6589,16 +2400,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "mimic-response": { @@ -6630,13 +2441,6 @@ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "minizlib": { @@ -6646,13 +2450,6 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "mkdirp": { @@ -6676,9 +2473,9 @@ "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" }, "mongodb": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz", - "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz", + "integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==", "requires": { "bl": "^2.2.1", "bson": "^1.1.4", @@ -6689,19 +2486,19 @@ } }, "mongoose": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.2.tgz", - "integrity": "sha512-sBUKJGpdwZCq9102Lj6ZOaLcW4z/T4TI9aGWrNX5ZlICwChKWG4Wo5qriLImdww3H7bETPW9vYtSiADNlA4wSQ==", + "version": "5.13.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.8.tgz", + "integrity": "sha512-z3d+qei9Dem/LxRcJi0cdGPKzQnYk71oHEsEfYm17JA/vLiAbJiGuBS2hW7vkd9afkPAqu3KsPZh2ax0c5iPQw==", "requires": { "@types/mongodb": "^3.5.27", - "@types/node": "14.x || 15.x", "bson": "^1.1.4", "kareem": "2.3.2", - "mongodb": "3.6.8", + "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.8.3", "mquery": "3.2.5", "ms": "2.1.2", + "optional-require": "1.0.x", "regexp-clone": "1.0.0", "safe-buffer": "5.2.1", "sift": "13.5.2", @@ -6723,8 +2520,7 @@ "mongoose-legacy-pluralize": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", - "requires": {} + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, "mpath": { "version": "0.8.3", @@ -6764,9 +2560,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "napi-build-utils": { "version": "1.0.2", @@ -6784,10 +2580,19 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/node/-/node-16.6.1.tgz", + "integrity": "sha512-qlIQ5vkAAMP+T1bYivwngIqZlUzerPSeaeAQVUvyQ2XZ8WN86ZUdzcpkW/iuEnP9paNcpAsA4p9yCsfrdjG7YQ==", + "dev": true, + "requires": { + "node-bin-setup": "^1.0.0" + } + }, "node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" }, @@ -6799,6 +2604,12 @@ } } }, + "node-bin-setup": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.0.6.tgz", + "integrity": "sha512-uPIxXNis1CRbv1DwqAxkgBk5NFV3s7cMN/Gf556jSw6jBvV7ca4F9lRL/8cALcZecRibeqU+5dFYqFFmzv5a0Q==", + "dev": true + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -6832,6 +2643,14 @@ "set-blocking": "~2.0.0" } }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "requires": { + "boolbase": "^1.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -6874,17 +2693,29 @@ "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "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" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ow": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", + "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", + "requires": { + "@sindresorhus/is": "^4.0.1", + "callsites": "^3.1.0", + "dot-prop": "^6.0.1", + "lodash.isequal": "^4.5.0", + "type-fest": "^1.2.1", + "vali-date": "^1.0.0" } }, "parent-module": { @@ -6906,6 +2737,14 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6933,9 +2772,9 @@ "integrity": "sha512-hbbT+rOvovz39ZneGW+C8B4YsKH20KLXYVDT/IzSUxaY8H7al/TO+vFCm+H5cnYe62gIqF9ak5p8OJktV/I0Ig==" }, "prebuild-install": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz", - "integrity": "sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -6953,10 +2792,9 @@ } }, "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 + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { "version": "2.3.2", @@ -6965,10 +2803,9 @@ "dev": true }, "prism-media": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.1.tgz", - "integrity": "sha512-nyYAa3KB4qteJIqdguKmwxTJgy55xxUtkJ3uRnOvO5jO+frci+9zpRXw6QZVcfDeva3S654fU9+26P2OSTzjHw==", - "requires": {} + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==" }, "process-nextick-args": { "version": "2.0.1", @@ -7029,9 +2866,9 @@ } }, "quickchart-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/quickchart-js/-/quickchart-js-1.2.0.tgz", - "integrity": "sha512-7p28IW3S8wOvw4NppwrC8Lm3uxhNdgafM6uZ73mUucQMyaZOBY1farkPhcn8QLpX2FnBdk0gy+ibKB12Wy8Vqw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/quickchart-js/-/quickchart-js-1.4.1.tgz", + "integrity": "sha512-LLfHUqFmygKMQKh3e4sMInx31htEVkNMnBwHFYnS7ogBuRmsVx4tE1VU1wPay2/FRDUZTNohyvEbm5EKFzHD0g==", "requires": { "axios": "^0.21.1", "javascript-stringify": "^2.0.1" @@ -7075,25 +2912,20 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "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=" - } } }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "recacheman-file": { @@ -7111,17 +2943,33 @@ "integrity": "sha512-FqaAJ0Rn0yZaGPPKI6aAb6z5PbPLKGhlZnCWRB2vYzBtPOx3c/PhCT3B1jt1zjkVjDNLs06+NGRoK3GY/A0qsw==", "requires": { "lru-cache": "~4.1.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } } }, "reconlx": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/reconlx/-/reconlx-1.3.3.tgz", - "integrity": "sha512-X16C+MByiUERk+9Y62TA+L/u4UoaLAWr97ml9Eu8ON0jqXP9fngiMdqMZMKsVizMrLtyRwVOnerH7gqLX/b34Q==", + "version": "1.4.511", + "resolved": "https://registry.npmjs.org/reconlx/-/reconlx-1.4.511.tgz", + "integrity": "sha512-WZfokefvZ72ub4QecKWRuQwMWBZlyEBUfFG+hoLsgfMQgJutxdoNZH23drIDhWk+lXVJ9cHKL4PIPvmG3BiKOw==", "requires": { - "discord.js": "^12.5.1", - "jsdom": "^16.4.0", - "mongoose": "^5.10.15", - "ms": "^2.1.2" + "axios": "^0.21.1", + "discord.js": "^13.0.1", + "jsdom": "^16.7.0", + "mongoose": "^5.13.5" } }, "redis": { @@ -7154,9 +3002,9 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regexp-clone": { "version": "1.0.0", @@ -7240,21 +3088,6 @@ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "send": { @@ -7462,16 +3295,13 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "string-toolkit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/string-toolkit/-/string-toolkit-1.4.1.tgz", - "integrity": "sha512-9ggIBwGTg6AS4Hg8u1EjtxUqZaIoIU004GAS+3D8zFJ6Ktkax0004kkmj2Re9FHN7670/YeDvR/wOg1/eo1Icg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/string-toolkit/-/string-toolkit-1.5.0.tgz", + "integrity": "sha512-JCUSyVqYc8upsrYaCFqsVocSjjUQF8kuCyElwHuXXkPXHyc23YFR6BmacR+UnxkgM7+37/Y79qbOv0HlUzOOvQ==", + "requires": { + "decancer": "1.0.4" + } }, "string-width": { "version": "1.0.2", @@ -7481,37 +3311,28 @@ "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^2.0.0" } }, "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 + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "superscript-text": { "version": "1.0.0", @@ -7522,7 +3343,6 @@ "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" } @@ -7547,9 +3367,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -7558,6 +3378,12 @@ "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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", @@ -7580,13 +3406,22 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } } } }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -7594,13 +3429,6 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "tar-fs": { @@ -7643,11 +3471,6 @@ "readable-stream": "^3.4.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7657,19 +3480,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } } } }, @@ -7715,6 +3525,16 @@ "utf8-byte-length": "^1.0.1" } }, + "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==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -7734,19 +3554,17 @@ "integrity": "sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg==" }, "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, + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "^1.2.1" + "prelude-ls": "~1.1.2" } }, "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 + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "type-is": { "version": "1.6.18", @@ -7810,6 +3628,11 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -7837,14 +3660,65 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "weky": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/weky/-/weky-1.9.9.tgz", - "integrity": "sha512-ldaCKoTC1NRv296B7trgDfocifs+hi8YvXeaitjZnTg7LxxIjZZX66NLNala6HtjEeH/dc2b0h9nrDB2DpY+/A==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/weky/-/weky-3.1.5.tgz", + "integrity": "sha512-BtgpAx8BF9UoUZpSd2RGUMCGgWa1Vj7A1bit0D/lI/FLBkMvviLClyOqr7bfC2m4gh1u2oB8MteIIdSNLxc8Dw==", "requires": { - "discord-buttons": "^3.0.1", - "mathjs": "^9.4.2", - "ms": "^2.1.3", - "node-fetch": "^2.6.1" + "@weky/inlinereply": "^0.0.0", + "axios": "^0.21.1", + "chalk": "^4.1.1", + "cheerio": "^1.0.0-rc.10", + "discord-buttons": "^4.0.0", + "discord.js": "^12.5.3", + "html-entities": "^2.3.2", + "mathjs": "^9.4.3", + "node-fetch": "^2.6.1", + "quick.db": "^7.1.3", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "requires": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "whatwg-encoding": { @@ -7898,10 +3772,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "requires": {} + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", + "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==" }, "xml-name-validator": { "version": "3.0.0", @@ -7914,9 +3787,9 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/package.json b/package.json @@ -1,6 +1,6 @@ { "name": "cath.exe", - "version": "2.0.1", + "version": "3.0.0", "description": "cath.exe bot created by Night", "engines": { "node": "*", @@ -9,9 +9,13 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon index.js", - "start": "node index.js", - "dashboard": "cd dashboard && npm run dev" + "dev": "nodemon .", + "start": "node .", + "node-update": "npm i --save-dev node@16 && npm config set prefix=$(pwd)/node_modules/node && export PATH=$(pwd)/node_modules/node/bin:$PATH", + "node-clean": "rm -rf node_modules && rm package-lock.json && npm cache clear --force && npm cache clean --force && npm i", + "node-update-then-clean": "npm run node-update && npm run node-clean-cache", + "canvas": "npm uninstall canvas && npm i canvas", + "all": "npm run node-update && npm run node-clean && npm uninstall canvas && npm i canvas && node ." }, "repository": { "type": "git", @@ -34,6 +38,7 @@ "eslint": "^7.30.0", "eslint-config-google": "^0.14.0", "jshint": "^2.13.0", + "node": "^16.6.1", "prettier": "^2.3.2" }, "dependencies": { @@ -47,13 +52,14 @@ "discord-canvas": "^1.4.1", "discord-giveaways": "^4.5.1", "discord-xp": "^1.1.16", - "discord.js": "^12.5.3", + "discord.js": "^13.1.0", "dotenv": "^10.0.0", "erela.js": "^2.3.3", "erela.js-spotify": "^1.2.0", "express": "^4.17.1", "express-session": "^1.17.2", "figlet": "^1.5.0", + "glob": "^7.1.7", "goosecache": "^9.0.14", "imageapi.js": "^1.7.0", "leven": "^3.1.0", @@ -69,6 +75,6 @@ "soundcloud-downloader": "^0.2.4", "string-toolkit": "^1.4.0", "superscript-text": "^1.0.0", - "weky": "^1.9.9" + "weky": "^3.1.5" } } diff --git a/util/dist/cmds.js b/util/dist/cmds.js @@ -1,39 +0,0 @@ -const { readdirSync } = require("fs"); -const ms = require("ms"); -function cmds() { - let categories = []; - readdirSync("./commands").forEach(dir => { - const dirs = readdirSync(`./commands/${dir}`).filter(file => - file.endsWith(".js") - ); - let commands = []; - dirs.map(cmd => { - const file = require(`../../commands/${dir}/${cmd}`); - commands.push({ - name: file.name ? file.name : "No command name", - description: file.description - ? file.description - : "No command description", - aliases: file.aliases ? file.aliases : "No command aliases", - usage: file.usage ? `C.${file.name} ${file.usage}` : `C.${file.name}`, - timeout: file.timeout - ? ms(file.timeout, { long: true }) - : "No command cooldown", - BotPermission: file.BotPerm - ? file.BotPerm - : "No required bot permission", - UserPermission: file.UserPerm - ? file.UserPerm - : "No required user permission", - status: file.status ? file.status : true, - }); - }); - let data = { - name: dir, - commands, - }; - categories.push(data); - }); - return categories; -} -module.exports = { cmds }; diff --git a/util/dist/err.js b/util/dist/err.js @@ -1,221 +0,0 @@ -const { MessageEmbed } = require("discord.js"); -const client = require("../../bot"); -/** - * @param {String} message - * @param {String} dir - * @param {String} file - * @param {String} err - */ -module.exports = async (message, dir, file, err) => { - switch (err) { - case 101: - err = "Invalid argument"; - break; - case 0: - err = "Missing argument"; - break; - case 1: - err = "Missing 'User' argument"; - break; - case 2: - err = "'User' argument can't be author"; - break; - case 3: - err = "Missing 'Role' argument"; - break; - case 4: - err = "Missing 'Message' argument"; - break; - case 5: - err = "Missing 'Number' argument"; - break; - case 6: - err = "Missing permission"; - break; - case 7: - err = "Invalid number"; - break; - case 8: - err = "User doesn't have enough hierarchy"; - break; - case 9: - err = "Bot doesn't have enough hierarchy"; - break; - case 10: - err = "There isn't any data"; - break; - case 11: - err = "Missing 'Emoji' argument"; - break; - case 12: - err = "Missing 'Text' argument"; - break; - case 13: - err = "'Text' argument must be less than or equal to 100"; - break; - case 14: - err = "The maximum of modmail choices is 5"; - break; - case 15: - err = "Emoji can't be found"; - break; - case 16: - err = "'Time' argument must be larger than 1 second"; - break; - case 17: - err = "Missing 'Command'/'Category' argument"; - break; - case 18: - err = "'Command'/'Category' is already disabled"; - break; - case 19: - err = "Missing 'Time' argument"; - break; - case 20: - err = "Insufficient balance"; - break; - case 21: - err = "Missing 'Item' argument"; - break; - case 22: - err = "Invalid Item"; - break; - case 23: - err = "You didn't have enough item to gift"; - break; - case 24: - err = "Item invalid or you don't have that item"; - break; - case 25: - err = "Inventory is empty"; - break; - case 26: - err = "Giveaway not found"; - break; - case 27: - err = "Missing 'Message ID' argument"; - break; - case 28: - err = "Missing 'Channel' argument"; - break; - case 29: - err = "'Time' argument is invalid"; - break; - case 30: - err = "Missing 'Winners' argument"; - break; - case 31: - err = "'Winner' argument must be a number"; - break; - case 32: - err = "Missing 'Prize' argument"; - break; - case 33: - err = "You cannot hug yourself"; - break; - case 34: - err = "There isn't any song playing in the server currently"; - break; - case 35: - err = "You must be in a voice channel"; - break; - case 36: - err = "The player has stopped and the queue has been cleared"; - break; - case 37: - err = "There is no queue"; - break; - case 38: - err = "Can't find the playlist at YouTube"; - break; - case 39: - err = "Can't join the voice channel"; - break; - case 40: - err = "Left the voice channel since there is no song at the queue"; - break; - case 41: - err = "I am not in a voice channel"; - break; - case 42: - err = "I can't find this song/video"; - break; - case 43: - err = "I can't find the song at SoundCloud"; - break; - case 44: - err = "I can't find the song at YouTube"; - break; - case 45: - err = "Invalid selection"; - break; - case 46: - err = "Missing 'Prefix' argument"; - break; - case 47: - err = "Missing 'Command' argument"; - break; - case 48: - err = "The attachment must be an image"; - break; - case 49: - err = "'Emoji' name must be more than 2 characters"; - break; - case 50: - err = - "The error maybe the link isn't a image, or the image size is too big"; - break; - case 51: - err = "Missing 'Query' argument"; - break; - case 52: - err = "This message doesn't exist in this channel"; - break; - case 53: - err = "Missing 'Code' argument"; - break; - case 54: - err = "'Text' argument must be less than or equal to 2000"; - break; - case 55: - err = "Different channel between user and client"; - break; - case 404: - err = "Error 404 - Not Found"; - break; - case 505: - err = "You have reached the maximum number of premium servers"; - break; - case 506: - err = "This server is already premium"; - break; - case 999: - err = "An unexpected error occured. Please try again."; - break; - default: - "Missing argument"; - break; - } - const pull = require(`../../commands/${dir}/${file}`); - let pre = await client.prefix(message); - let embed = new MessageEmbed() - .setAuthor( - `Error from ${message.author.tag}`, - message.author.displayAvatarURL({ dynamic: true }) - ) - .setColor("RED") - .setDescription( - `${require("../../config.json").ca}\nUse \`${pre}help ${ - pull.name - }\` to get help\n \n ` - ) - .addField( - `**>Usage**: ${pre}${pull.name} ${pull.usage ? pull.usage : ""}`, - `\`${err}\`` - ) - .setTimestamp() - .setThumbnail(client.user.displayAvatarURL({ dynamic: false })) - .setURL(client.web) - .setFooter(`Made by ${client.author}`); - message.inlineReply(embed).then(msg => msg.delete({ timeout: 15000 })); -}; diff --git a/util/dist/item.js b/util/dist/item.js @@ -1,68 +0,0 @@ -module.exports = [ - { - item: "<:na45:840231919529623562> NA-45", - alias: "na45", - id: "na45", - price: 10000, - }, - { - item: "<:50gs:840231952045178892> Akimbo .50 GS", - alias: ".50gs", - id: ".50gs", - price: 10000, - }, - { - item: "<:mantaray:840231914747985941> Manta Ray", - alias: "mantaray", - id: "mantaray", - price: 50000, - }, - { - item: "<:zer0:840231945778626642> Zero", - alias: "zero", - id: "zero", - price: 50000, - }, - { - item: "<:artery:840231910575833118> Artery", - alias: "artery", - id: "artery", - price: 50000, - }, - { - item: "<:alias:840231973443338321> Alias", - alias: "alias", - id: "alias", - price: 50000, - }, - { - item: "<:urban:840231930741653545> Urban Tracker", - alias: "urban", - id: "urban", - price: 50000, - }, - { - item: "<:scylla:840231932289089556> Scylla", - alias: "scylla", - id: "scylla", - price: 50000, - }, - { - item: "<:parkk:840231975380975636> Park", - alias: "park", - id: "park", - price: 50000, - }, - { - item: "<:mara:840231965210968104> Mara", - alias: "mara", - id: "mara", - price: 50000, - }, - { - item: "<:outrider:840231986504794153> Outrider", - alias: "outrider", - id: "outrider", - price: 50000, - }, -]; diff --git a/util/dist/manager.js b/util/dist/manager.js @@ -1,86 +0,0 @@ -const { Manager } = require("erela.js"); -const Spotify = require("erela.js-spotify"); -const { MessageEmbed } = require("discord.js"); -module.exports = async client => { - try { - const id = process.env.SPOTIFY_ID; - const secret = process.env.SPOTIFY_SECRET; - client.manager = new Manager({ - plugins: [ - new Spotify({ - clientID: id, - clientSecret: secret, - }), - ], - nodes: [ - { - host: process.env.host, - port: 80, - password: process.env.password, - retryDelay: 5000, - }, - ], - autoPlay: true, - send: (id, payload) => { - const guild = client.guilds.cache.get(id); - if (guild) guild.shard.send(payload); - }, - }) - .on("nodeConnect", node => - console.log(`Node "${node.options.identifier}" has connected.`) - ) - .on("nodeError", (node, error) => - console.log( - `Node "${node.options.identifier}" encountered an error: ${error.message}.` - ) - ) - .on("trackStart", (player, track) => { - const channel = client.channels.cache.get(player.textChannel); - const embed = new MessageEmbed() - .setColor("02023a") - .setAuthor( - `Now Playing`, - client.user.displayAvatarURL({ - dynamic: true, - }) - ) - .setFooter(`Made by ${client.author}`) - .setTimestamp() - .setDescription(`[${track.title}](${track.uri})`) - .addField(`Requested By : `, `${track.requester}`, true); - channel.send(embed); - }) - .on("trackStuck", (player, track) => { - const channel = client.channels.cache.get(player.textChannel); - const embed = new MessageEmbed() - .setColor("02023a") - .setAuthor( - `Track Stuck`, - client.user.displayAvatarURL({ - dynamic: true, - }) - ) - .setDescription(`${track.title}`) - .setFooter(`Made by ${client.author}`) - .setTimestamp(); - channel.send(embed); - }) - .on("queueEnd", player => { - const channel = client.channels.cache.get(player.textChannel); - const embed2 = new MessageEmbed() - .setColor("02023a") - .setAuthor( - `Queue has ended`, - client.user.displayAvatarURL({ - dynamic: true, - }) - ) - .setFooter(`Made by ${client.author}`) - .setTimestamp(); - channel.send(embed2); - player.destroy(); - }); - } catch (e) { - console.log(e); - } -}; diff --git a/util/functions/economy.js b/util/functions/economy.js @@ -1,243 +0,0 @@ -module.exports = async (client, message) => { - const econ = require("../../models/econ"); - const user = require("../../models/users"); - client.createUser = id => { - user.findOne({ User: id }, (err, data) => { - new user({ - User: id, - }).save(); - }); - }; - client.createProfile = id => { - econ.findOne({ User: id }, (err, data) => { - new econ({ - User: id, - }).save(); - }); - }; - client.multi = message => - new Promise(async ful => { - var multiplier = 0; - const b = await user.findOne({ User: message.author.id }); - if (!b) { - client.createUser(message.author.id); - } - if (b.Tier == 3) { - multiplier += 0.1; - } - if (b.Tier == 2) { - multiplier += 0.15; - } - if (b.Tier == 1) { - multiplier += 0.2; - } - if (client.path.includes(message.guild.id)) { - multiplier += 0.15; - } - if ( - [ - "🐱", - "😾", - "😿", - "😽", - "🙀", - "😼", - "😻", - "😹", - "😸", - "😺", - "cathexe", - "cath", - ] - .map(x => (message.channel.name.includes(x) ? 1 : 0)) - .filter(x => x).length - ) { - multiplier += 0.1; - } - if (b.Premium === true) { - multiplier += 0.25; - } - ful(Math.round(multiplier * 10)); - }); - - client.bal = id => - new Promise(async ful => { - const data = await econ.findOne({ User: id }); - if (!data) { - client.createProfile(id); - } - ful(data.CP); - }); - - client.add = (id, amount, message) => { - econ.findOne({ User: id }, async (err, data) => { - var multi = 0; - if (err) throw err; - if (data) { - const users = require("../../models/users"); - users.findOne({ User: id }, (err, b) => { - if (!b) { - client.createUser(id); - } - if (b.Tier == 3) { - multi += 0.1; - } - if (b.Tier == 2) { - multi += 0.15; - } - if (b.Tier === 1) { - multi += 0.2; - } - if (client.path.includes(message.guild.id)) { - multi += 0.15; - } - if ( - [ - "🐱", - "😾", - "😿", - "😽", - "🙀", - "😼", - "😻", - "😹", - "😸", - "😺", - "cathexe", - "cath", - ] - .map(x => (message.channel.name.includes(x) ? 1 : 0)) - .filter(x => x).length - ) { - multi += 0.1; - } - if (b.Premium === true) { - multi += 0.25; - } - if (multi === 0) { - data.CP += amount; - data.save(); - } else { - data.CP += Math.round(amount * multi + amount); - data.save(); - } - }); - } else { - client.createProfile(id); - } - }); - }; - client.rmv = (id, amount) => { - econ.findOne({ User: id }, async (err, data) => { - if (err) throw err; - if (data) { - data.CP -= amount; - data.save(); - } else { - client.createProfile(id); - } - }); - }; - client.addItem = (id, item, amount) => { - const economy = require("../../models/inventory"); - economy.findOne({ User: id }, (err, data) => { - if (!data) { - client.createProfile(id); - } else { - data[item] += amount; - data.save(); - } - }); - }; - client.removeItem = (id, item, amount) => { - const inventory = require("../../models/inventory"); - inventory.findOne({ User: id }, (err, data) => { - if (!data) { - client.createProfile(id); - } else { - data[item] -= amount; - data.save(); - } - }); - }; - client.addcmdsused = id => { - user.findOne({ User: id }, async (err, data) => { - if (err) console.log(err); - if (data) { - data.CommandUsed++; - data.save(); - } else { - client.createUser(id); - } - }); - }; - - client.ADDBJWin = id => { - econ.findOne({ User: id }, async (err, data) => { - if (err) throw err; - if (data) { - data.BJWins++; - data.save(); - } else { - client.createProfile(id); - } - }); - }; - client.ADDSWin = id => { - econ.findOne({ User: id }, async (err, data) => { - if (err) throw err; - if (data) { - data.SlotsWins++; - data.save(); - } else { - client.createProfile(id); - } - }); - }; - client.ADDBWin = id => { - econ.findOne({ User: id }, async (err, data) => { - if (err) throw err; - if (data) { - data.BetWins++; - data.save(); - } else { - client.createProfile(id); - } - }); - }; - client.cmdsUSED = id => - new Promise(async ful => { - const data = await user.findOne({ User: id }); - if (!data) { - client.createProfile(id); - } - ful(data.CommandUsed); - }); - - client.bjWin = id => - new Promise(async ful => { - const data = await econ.findOne({ User: id }); - if (!data) { - client.createProfile(id); - } - ful(data.BJWins); - }); - - client.sWin = id => - new Promise(async ful => { - const data = await econ.findOne({ User: id }); - if (!data) { - client.createProfile(id); - } - ful(data.SlotsWins); - }); - - client.bWin = id => - new Promise(async ful => { - const data = await econ.findOne({ User: id }); - if (!data) { - client.createProfile(id); - } - ful(data.BetWins); - }); -}; diff --git a/util/functions/function.js b/util/functions/function.js @@ -1,49 +0,0 @@ -function rndint(max, min) { - return Math.floor(Math.random() * (max - (min ? min : 0))) + (min ? min : 0); -} -function random() { - const num = Math.floor(Math.random() * 2); - return num === 1; -} -function timer(timestamp) { - const timeLeft = timestamp; - const days = Math.floor(timeLeft / 86400000); - const hours = Math.floor(timeLeft / 3600000) - days * 24; - const minutes = Math.floor(timeLeft / 60000) - days * 1440 - hours * 60; - const seconds = - Math.floor(timeLeft / 1000) - days * 86400 - hours * 3600 - minutes * 60; - const mseconds = timeLeft / 1000 - days * 86400 - hours * 3600 - minutes * 60; - let string = ""; - if (days) string = string + `${days} ${days == 1 ? "day " : "days "}`; - if (hours) string = string + `${hours} ${hours == 1 ? "hour " : "hours "}`; - if (minutes) - string = string + `${minutes} ${minutes == 1 ? "minute " : "minutes "}`; - if (seconds) - string = string + `${seconds} ${seconds == 1 ? "second " : "seconds "}`; - if (!string.length) string = `${mseconds.toFixed(1)} second`; - return string; -} -function sleep(ms) { - let start = new Date().getTime(); - let end = start; - while (end < start + ms) { - end = new Date().getTime(); - } -} -function toHHMMSS(str) { - var sec_num = parseInt(str, 10); - var hours = Math.floor(sec_num / 3600); - var minutes = Math.floor((sec_num - hours * 3600) / 60); - var seconds = sec_num - hours * 3600 - minutes * 60; - if (hours < 10) { - hours = "0" + hours; - } - if (minutes < 10) { - minutes = "0" + minutes; - } - if (seconds < 10) { - seconds = "0" + seconds; - } - return hours + ":" + minutes + ":" + seconds; -} -module.exports = { rndint, random, timer, sleep, toHHMMSS }; diff --git a/util/functions/mongoose.js b/util/functions/mongoose.js @@ -1,602 +0,0 @@ -const mongoose = require("mongoose"); -const { GooseCache } = require("goosecache"); -const cachegoose = new GooseCache(mongoose, { - engine: "memory", -}); -mongoose.set("useFindAndModify", false); -const u = require("../../models/users"); -const g = require("../../models/guilds"); -const m = require("../../models/bot"); -const e = require("../../models/econ"); -module.exports = { - /** - * @param {String} URI - Mongo Connection URI - */ - async connect(URI) { - if (!URI) throw new Error("Please provide a Mongoose URI"); - return mongoose.connect(URI, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); - }, - /** - * @param {String} ID - Guild ID - */ - async getGuild(ID) { - if (!ID) throw new Error("Guild ID?"); - const guild = await g.findOne({ Guild: ID }).lean().cache(120); - if (!guild) { - const gg = new g({ Guild: ID }); - const { - Guild, - Prefix, - Welcome, - Goodbye, - Log, - Premium, - Category, - Commands, - Level, - } = gg; - await gg.save().catch(error => console.log(error)); - return { - Guild, - Prefix, - Welcome, - Goodbye, - Log, - Premium, - Category, - Commands, - Level, - }; - } else { - const Guild = guild.Guild; - const Prefix = guild.Prefix; - const Welcome = guild.Welcome; - const Goodbye = guild.Goodbye; - const Log = guild.Log; - const Premium = guild.Premium; - const Category = guild.Category; - const Commands = guild.Commands; - const Level = guild.Level; - return { - Guild, - Prefix, - Welcome, - Goodbye, - Log, - Premium, - Category, - Commands, - Level, - }; - } - }, - /** - * @param {String} ID - User ID - */ - async getUser(ID) { - if (!ID) throw new Error("User ID?"); - const user = await u.findOne({ User: ID }).lean().cache(120); - if (!user) { - const ss = new u({ User: ID }); - const { - User, - AFK, - AFKDate, - Tier, - Premium, - Blacklist, - Blacklist_Reason, - PremiumServers, - CommandUsed, - } = ss; - await ss.save().catch(error => console.log(error)); - return { - User, - AFK, - AFKDate, - Tier, - Premium, - Blacklist, - Blacklist_Reason, - PremiumServers, - CommandUsed, - }; - } else { - const User = user.User; - const AFK = user.AFK; - const AFKDate = user.AFKDate; - const Tier = user.Tier; - const Premium = user.Premium; - const Blacklist = user.Blacklist; - const Blacklist_Reason = user.Blacklist_Reason; - const PremiumServers = user.PremiumServers; - const CommandUsed = user.CommandUsed; - return { - User, - AFK, - AFKDate, - Tier, - Premium, - Blacklist, - Blacklist_Reason, - PremiumServers, - CommandUsed, - }; - } - }, - /** - * @param {String} ID - User ID - */ - async getUserEcon(ID) { - if (!ID) throw new Error("User ID?"); - const user = await u.findOne({ User: ID }).lean().cache(120); - if (!user) { - const ss = new u({ User: ID }); - const { User, CP, BJWins, SlotsWins, BetWins } = ss; - await ss.save().catch(error => console.log(error)); - return { - User, - CP, - BJWins, - SlotsWins, - BetWins, - }; - } else { - const User = user.User; - const CP = user.CP; - const BJWins = user.BJWins; - const SlotsWins = user.SlotsWins; - const BetWins = user.BetWins; - return { - User, - CP, - BJWins, - SlotsWins, - BetWins, - }; - } - }, - /** - * @param {String} ID - User ID - * @param {String} Reason - AFK Reason - */ - async AFK(ID, Reason) { - if (!ID) throw new Error("User ID?"); - if (!Reason) throw new Error("AFK Reason?"); - const user = await u.findOne({ User: ID }); - if (!user) { - const sss = new u({ User: ID }); - await sss.save().catch(error => console.log(error)); - return { Reason, Time }; - } else { - user.User = ID; - user.AFK = Reason; - await user.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Reason }; - } - }, - /** - * @param {String} ID - User ID - */ - async DelAFK(ID) { - if (!ID) throw new Error("User ID?"); - const user = await u.findOne({ User: ID }); - if (!user) { - const sssss = new u({ User: ID }); - await sssss.save().catch(error => console.log(error)); - return { ID }; - } else { - user.AFK = null; - user.AFKDate = null; - await user.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { ID }; - } - }, - /** - * @param {String} ID - ID of the User - * @param {String} Toggle - Blacklist Toggle(true/false) - * @param {String} Reason - Blacklist Reason - */ - async BK(ID, Toggle, Reason) { - if (!ID) throw new Error("User ID?"); - if (!Toggle) throw new Error("Blacklist Toggle?"); - if (!Reason) throw new Error("Blacklist Feason?"); - const user = await u.findOne({ User: ID }); - if (!user) { - const sus = new u({ User: ID }); - if (Toggle == "true") { - user.Blacklist = true; - user.Blacklist_Reason = Reason; - } else { - user.Blacklist = false; - user.Blacklist_Reason = null; - } - await sus.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Reason }; - } else { - if (Toggle == "true") { - user.Blacklist = true; - user.Blacklist_Reason = Reason; - } else { - user.Blacklist = false; - user.Blacklist_Reason = null; - } - await user.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Reason }; - } - }, - /** - * @param {String} ID - ID of the User - * @param {Boolean} Toggle - Premium Toggle(true/false) - * @param {Number} Tier - Tier - */ - async Premium(ID, Toggle, Tier) { - if (!ID) throw new Error("User ID?"); - if (!Toggle) throw new Error("Premium Toggle?"); - if (!Tier) throw new Error("Premium Feason?"); - const user = await u.findOne({ User: ID }); - if (!user) { - const sus = new u({ User: ID }); - if (Toggle == "true") { - user.Premium = true; - user.Tier = Tier; - } else { - user.Premium = false; - user.Tier = 0; - } - await sus.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Tier }; - } else { - if (Toggle == "true") { - user.Premium = true; - user.Tier = Tier; - } else { - user.Premium = false; - user.Tier = 0; - } - await user.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Tier }; - } - }, - /** - * @param {String} ID - */ - async CreateGuild(ID) { - await new g({ Guild: ID }); - return; - }, - /** - * @param {String} ID - */ - async CreateBot(ID) { - await new m({ Guild: ID }); - return; - }, - /** - * @param {String} ID - Guild ID - */ - async DelGuild(ID) { - await g.deleteMany({ Guild: ID }); - return; - }, - /** - * @param {String} ID - User ID - * @param {String} Prefix - Guild Prefix - */ - async setPrefix(ID, Prefix) { - if (!ID) throw new Error("Guild ID?"); - if (!Prefix) throw new Error("Prefix?"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - await newU.save().catch(error => console.log(error)); - return { Prefix }; - } - guild.Prefix = Prefix; - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Prefix }; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Channel - Welcome Channel - */ - async setWelcome(ID, Channel) { - if (!ID) throw new Error("Guild ID?"); - if (!Channel) throw new Error("Channel?"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - await newU.save().catch(error => console.log(error)); - return { Channel }; - } - guild.Welcome = Channel; - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Channel }; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Channel - Goodbye Channel - */ - async setGoodbye(ID, Channel) { - if (!ID) throw new Error("Guild ID?"); - if (!Channel) throw new Error("Channel?"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - await newU.save().catch(error => console.log(error)); - return { Channel }; - } - guild.Goodbye = Channel; - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Channel }; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Channel - Log Channel - * @param {String} WebhookID - WebhookID - * @param {String} WebhookToken - WebhookToken - */ - async setLog(ID, Channel, WID, WToken) { - if (!ID) throw new Error("Guild ID?"); - if (!Channel) throw new Error("Channel?"); - if (!WID) throw new Error("WebhookID?"); - if (!WToken) throw new Error("WebhookToken?"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - newU.LogChannel = Channel; - newU.LogWebhookID = WID; - newU.LogWebhookToken = WToken; - await newU.save().catch(error => console.log(error)); - return { Channel }; - } - guild.Log = Channel; - guild.LogWebhookID = WID; - guild.LogWebhookToken = WToken; - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return { Channel }; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Toggle - premium Toggle - */ - async setPremium(ID, Toggle) { - if (!ID) throw new Error("Please Provide a Guild ID"); - if (!Toggle) throw new Error("Please Provide a Toggle!"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - if (Toggle == "true") { - guild.Premium = true; - } else { - guild.Premium = false; - } - await newU.save().catch(error => console.log(error)); - return; - } else { - if (Toggle == "true") { - guild.Premium = true; - } else { - guild.Premium = false; - } - } - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return; - }, - /** - * @param {String} User - User ID - * @param {String} ID - Guild ID - * @param {String} Method - Method - */ - async pushGuild(User, ID, method) { - if (!method) return new Error("Method?"); - u.findOne({ User: User }, async (err, data) => { - if (err) throw err; - if (!data) return new Error("User not found"); - if (method === "push") { - await data.PremiumServers.push(ID); - await data.save().catch(error => console.log(error)); - data.save(); - } - if (method === "splice") { - const index = data.PremiumServers.indexOf(ID); - data.PremiumServers.splice(index, 1); - data.save(); - } - cachegoose.clearCache(); - return { User }; - }); - }, - /** - * @param {String} ID - Guild ID - * @param {String} Type - Type - * @param {String} Name - Name - */ - async disable(ID, Type, Name) { - if (!Name) throw new Error("Name?"); - if (!Type) throw new Error("Type?"); - if (!ID) throw new Error("Guild ID?"); - if (Type === "category") { - const db = await g.findOne({ Guild: ID }); - if (!db) { - const newdoc = await new g({ Guild: ID }); - await newdoc.save().catch(error => console.log(error)); - } - await db.Category.push(Name); - await db.save().catch(e => console.log(e)); - } - if (Type === "command") { - const db = await g.findOne({ Guild: ID }); - if (!db) { - const newdoc = await new g({ Guild: ID }); - await newdoc.save().catch(error => console.log(error)); - } - await db.Commands.push(Name); - await db.save().catch(e => console.log(e)); - } - cachegoose.clearCache(); - return { Name }; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Type - Type - * @param {String} Name - Name - */ - async enable(ID, Type, Name) { - if (!ID) throw new Error("Guild ID?"); - if (!Name) throw new Error("Name?"); - if (!Type) throw new Error("Type?"); - if (Type === "category") { - const db = await g.findOne({ Guild: ID }); - if (!db) { - return false; - } - const index = db.Category.indexOf(Name.toLowerCase()); - await db.Category.splice(index, 1); - await db.save().catch(e => console.log(e)); - } - if (Type === "command") { - const db = await g.findOne({ Guild: ID }); - if (!db) { - return false; - } - const index = db.Commands.indexOf(Name); - await db.Commands.splice(index, 1); - await db.save().catch(e => console.log(e)); - } - cachegoose.clearCache(); - return true; - }, - /** - * @param {String} ID - Bot ID - * @param {String} Toggle - Maintenance Toggle - */ - async maintenance(ID, Toggle) { - if (!ID) throw new Error("Please Provide a ID!"); - if (!Toggle) throw new Error("Please Provide a Toggle!"); - const idk = await m.findOne({ Bot: ID }); - if (!idk) { - const newdb = new m({ Bot: ID }); - if (Toggle === "true") { - newdb.Status = "true"; - } else { - newdb.Status = "false"; - } - await newdb.save().catch(error => console.log(error)); - return; - } else { - if (Toggle === "true") { - idk.Status = "true"; - } else { - idk.Status = "false"; - } - } - await idk.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return; - }, - /** - * @param {String} ID - Bot ID - * @param {String} Guilds - Guilds Number - * @param {String} Users - Users Number - */ - async botcache(ID, Guild, User) { - if (!ID) throw new Error("Please Provide a ID!"); - if (!Guild) throw new Error("Please Provide a Guild Number!"); - if (!User) throw new Error("Please Provide a User Number!"); - const idk = await m.findOne({ Bot: ID }); - if (!idk) { - const newdb = new m({ Bot: ID }); - if (Guild && User) { - newdb.Guilds = Guild; - newdb.Users = User; - } else { - newdb.Guilds = Guild; - newdb.Users = User; - } - await newdb.save().catch(error => console.log(error)); - return; - } else { - if (Guild && User) { - idk.Guilds = Guild; - idk.Users = User; - } else { - idk.Guilds = Guild; - idk.Users = User; - } - } - await idk.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return; - }, - /** - * @param {String} ID - Bot ID - * @param {String} Commands - Commands - */ - async commands(ID, Cmds) { - if (!ID) throw new Error("Please Provide a ID!"); - if (!Cmds) throw new Error("Please Provide Commands!"); - const idk = await m.findOne({ Bot: ID }); - if (!idk) { - const newdb = new m({ Bot: ID }); - if (Cmds) { - newdb.Commands = Cmds; - } else { - newdb.Commands = Cmds; - } - await newdb.save().catch(error => console.log(error)); - return; - } else { - if (Cmds) { - idk.Commands = Cmds; - } else { - idk.Commands = Cmds; - } - } - await idk.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return; - }, - /** - * @param {String} ID - Guild ID - * @param {String} Toggle - Level Toggle - */ - async setGLevel(ID, Toggle) { - if (!ID) throw new Error("Please Provide a Guild ID"); - if (!Toggle) throw new Error("Please Provide a Toggle!"); - const guild = await g.findOne({ Guild: ID }); - if (!guild) { - const newU = new g({ Guild: ID }); - if (Toggle == "true") { - guild.Level = true; - } else { - guild.Level = false; - } - await newU.save().catch(error => console.log(error)); - return; - } else { - if (Toggle == "true") { - guild.Level = true; - } else { - guild.Level = false; - } - } - await guild.save().catch(error => console.log(error)); - cachegoose.clearCache(); - return; - }, -};