diff --git a/.replit b/.replit index d409ef8..33715ca 100644 --- a/.replit +++ b/.replit @@ -1,2 +1,17 @@ language = "nodejs" -run = "npm start" \ No newline at end of file +run = "npm start" + +hidden = [".config", "package-lock.json"] +entrypoint = "index.js" +modules = ["nodejs-20:v8-20230920-bd784b9"] + +[nix] +channel = "stable-22_11" + +[unitTest] +language = "nodejs" + +[deployment] +deploymentTarget = "static" +ignorePorts = false +publicDir = "./" diff --git a/Pogy.js b/Pogy.js index 129aa05..35b92f6 100644 --- a/Pogy.js +++ b/Pogy.js @@ -1,6 +1,8 @@ const { Client, Collection } = require("discord.js"); const Util = require("./src/structures/Util"); const config = require("./config.json"); +const fs = require("node:fs"); +const path = require("node:path"); const { status } = config; module.exports = class PogyClient extends Client { @@ -30,9 +32,9 @@ module.exports = class PogyClient extends Client { ], }, }); - this.validate(options); this.botCommands = new Collection(); + this.slashCommands = new Collection(); this.botEvents = new Collection(); this.aliases = new Collection(); this.utils = require("./src/utils/utils.js"); diff --git a/config.json b/config.json new file mode 100644 index 0000000..ae647c8 --- /dev/null +++ b/config.json @@ -0,0 +1,35 @@ +{ + "clientId": "1135714988493910136", + "developers": ["1067137336674107453"], + "status": "!help | website here", + "discord": "https://discord.gg/", + "dashboard": "true", + "server": "", + "prefix": "!", + "webhooks": { + "logs": "https://discord.com/api/webhooks/1191872792031932416/H2PmMiAF4ANN9XbGukEXQqHPBPFwIdCCiKGte3YCZeE0QO_My-8cbkvcw0Zw1_JNWn3T", + "maintenance_logs": "https://discord.com/api/webhooks/1191873962796392500/rB7t4OXNc4YAoRQBlBCPdtV1hRmr0wOmBVJb-4Q8b1oTyZpausXqACLDWsSFRXSNGi3B", + "ratelimit_logs": "https://discord.com/api/webhooks/1191874767704297593/AcMwK-t1kzEk6RFU-SmkQ7uIwf9dfHPu8JbuPJCkdQHAi17f7vZUB_iSc0XvnCQ1tN9r", + "blacklist": "https://discord.com/api/webhooks/1191875214368329809/5hkt3OXKkQuElqJEIQ6Tq-rxBDNz1MkGUKs7xTVkzJcAg53WvuO2jjQWcvLGSRKHYra6", + "report": "https://discord.com/api/webhooks/1191875430219776062/Kd_wqFD2I911e5fRew21E1_bNoFZAO29eJ6tdVSs0e0OnJMyK5EU-oeLpXJ50pYVhZPC", + "contact": "https://discord.com/api/webhooks/1191875563737067581/3Uib7OOD_y1MwVDlOUVu7B6DayFySZ5UAOUIhSxlBMNjWdSIdygWR-_Gs6-KdpzgvYoy", + "bugs": "https://discord.com/api/webhooks/1191875015319228456/q0Y8MCmtC6WCUzu3-Nk9ltc3By4oGSFnl8j-x4A8rtoVw4kjRyRHYLfH_oReFNOAp41n", + "premium": "https://discord.com/api/webhooks/1191874623776768142/7NW5AV84rIz4yC92aaZYYl0frdVQmJfNqzvRY3QglzBL_AkakjhhHf6KR-NTdhb-Jz7h", + "suggestions": "https://discord.com/api/webhooks/1191875689067061308/Aqt67syItFzuYR7XZqaRUMZlqumTfHz6Tyjg1P_hkYACgckq0JqvBRAWNJqu5uc9cPg2", + "votes": "https://discord.com/api/webhooks/1191875845271343144/vQ2TheQMXCT2aqR_hkoZKZZnrPRCQt640tI7zHYSJb3HDpyGZJKsOn44e9F42pgrHZ6B", + "errors": "https://discord.com/api/webhooks/1191876024607199403/t3MW9tGu4zliCbPSUY-ItHJVejPaNWjDD13afUnMbqSMrZtsOiMt4AoSY4bTH27dyM4v", + "auth": "https://discord.com/api/webhooks/1191876187421675701/1RiQKyKvR4Ise6d6J8suAf4piFSY0HkgDjVrr4x--chvnYFh0fYjwUPlzAhjhHFmOLOR", + "joinsPublic": "https://discord.com/api/webhooks/1191876306393108551/2tdtejyuGdfgZyA22wDsK-vG_bCcY6WBOReriE4DTCb5fAHbNLprwUs3r4DOOiWSn5jo", + "joinsPrivate": "https://discord.com/api/webhooks/1191876306393108551/2tdtejyuGdfgZyA22wDsK-vG_bCcY6WBOReriE4DTCb5fAHbNLprwUs3r4DOOiWSn5jo", + "leavesPublic": "https://discord.com/api/webhooks/1191876447091052655/7G1samQc5pPXnKy72MWX6ZFBc0dctsSsrlPFpP8pNx-ciXFmy81MZUxNqH4VBK09mrtm", + "leavesPrivate": "https://discord.com/api/webhooks/1191876447091052655/7G1samQc5pPXnKy72MWX6ZFBc0dctsSsrlPFpP8pNx-ciXFmy81MZUxNqH4VBK09mrtm" + }, + "maintenance": "false", + "maintenance_threshold": "5", + "invite_link": "https://discord.com/api/oauth2/authorize?client_id=1135714988493910136&permissions=70368744177663&scope=bot+applications.commands", + "seo": { + "enabled": "false", + "title": "Bot Name", + "description": "Bot description" + } +} diff --git a/index.js b/index.js index dba84ab..96e9fe2 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,11 @@ require("dotenv").config(); const PogyClient = require("./Pogy"); const config = require("./config.json"); +const deploy = require("./src/deployCommands.js"); +const path = require("node:path"); +const { Collection } = require("discord.js"); const logger = require("./src/utils/logger"); +const fs = require("node:fs"); const Pogy = new PogyClient(config); const color = require("./src/data/colors"); @@ -13,7 +17,6 @@ Pogy.emoji = emoji; let client = Pogy; const jointocreate = require("./src/structures/jointocreate"); jointocreate(client); -const fs = require('fs'); // Load user data from the JSON file let userData = require('./src/data/users.json'); @@ -44,6 +47,33 @@ client.on('messageCreate', message => { if (err) console.error('Error writing file:', err); }); }); +client.slashCommands = new Collection(); +const commandsFolders = fs.readdirSync("./src/slashCommands"); + +for (const folder of commandsFolders) { + const commandFiles = fs.readdirSync(`./src/slashCommands/${folder}`).filter((file) => file.endsWith(".js")); + + for(const file of commandFiles) { + const slashCommand = require(`./src/slashCommands/${folder}/${file}`); + client.slashCommands.set(slashCommand.data.name, slashCommand); + Promise.resolve(slashCommand); + } +} + +client.on('interactionCreate', async interaction => { + if(!interaction.isCommand()) return; + + const slashCommand = client.slashCommands.get(interaction.commandName); + + if (!slashCommand) return; + + try { + await slashCommand.execute(interaction); + } catch (error) { + await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); + } +}); + Pogy.react = new Map(); Pogy.fetchforguild = new Map(); diff --git a/package-lock.json b/package-lock.json index 6cde353..7692d31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,22 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@discordjs/builders": "^0.3.0", + "@discordjs/rest": "^0.3.0", "@krayon/discord-html-transcripts": "^2.8.3", "@top-gg/sdk": "^3.0.8", + "axios": "^1.5.0", "body-parser": "^1.19.0", "canvacord": "^5.0.8", - "canvas": "^2.9.3", + "canvas": "^2.11.2", "chalk": "^4.1.0", + "colors": "^1.4.0", "common-tags": "^1.8.0", "connect-mongo": "^4.4.1", "crypto": "^1.0.1", "datadog-metrics": "^0.8.2", "date-and-time": "^0.14.2", + "discord-api-types": "^0.37.11", "discord-canvas": "^1.5.2", "discord-slash-command-handler": "^3.2.3", "discord.js": "^13.6.0", @@ -60,7 +65,8 @@ }, "devDependencies": { "eslint": "^7.6.0", - "eslint-config-tesseract": "^0.0.3" + "eslint-config-tesseract": "^0.0.3", + "node": "^16.9.0" } }, "node_modules/@babel/code-frame": { @@ -119,40 +125,123 @@ } }, "node_modules/@discordjs/builders": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", - "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.3.0.tgz", + "integrity": "sha512-yFBPqohVAtCWoDTQCYk5ubgmkiRbGpbiR4RfYGHCmV5S2YZc7j8WzfKVksjuy2o5IWRfXFsW6G2Lr+KpW41pEA==", "deprecated": "no longer supported", "dependencies": { - "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.26.0", - "ts-mixer": "^6.0.0", - "tslib": "^2.3.1", - "zod": "^3.11.6" + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.26.0", + "ts-mixer": "^5.4.1", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/builders/node_modules/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==", + "deprecated": "No longer supported. Install the latest release!", + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/builders/node_modules/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==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@discordjs/builders/node_modules/ow": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.26.0.tgz", + "integrity": "sha512-22YUQW9d6oUSCpIQuBV25djtC1uMtpWqmtUYnuh2UHWeNMpppCFCvq3eSBIWWMDbe2UVq26kWYvBHDzOIu5NYg==", + "dependencies": { + "@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" }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@discordjs/builders/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "deprecated": "no longer supported", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@krayon/discord-html-transcripts": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@krayon/discord-html-transcripts/-/discord-html-transcripts-2.8.3.tgz", - "integrity": "sha512-hOWa87ZsRusKDcWSJuJob3aE158I9o0wo+TH80clUi+Y3GYOdjKepGd89hz3Z9sskSw3W0LgdaBzfNccLxt8Dw==", + "node_modules/@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", + "deprecated": "no longer supported", "dependencies": { - "axios": "^0.27.2", - "dotenv": "^16.0.1", - "he": "^1.2.0", - "highlight.js": "^11.6.0", - "html-minifier": "^4.0.0", - "jsdom": "^20.0.0", - "twemoji-parser": "^14.0.0" + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" } }, - "node_modules/@krayon/discord-html-transcripts/node_modules/twemoji-parser": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-14.0.0.tgz", - "integrity": "sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA==" + "node_modules/@discordjs/rest/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.9", @@ -210,6 +299,15 @@ "npm": ">=7.0.0" } }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -232,14 +330,6 @@ "node": ">=10" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, "node_modules/@top-gg/sdk": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@top-gg/sdk/-/sdk-3.0.8.tgz", @@ -352,12 +442,6 @@ "@types/node": "*" } }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -387,26 +471,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-jsx": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", @@ -416,14 +480,6 @@ "acorn": "^6.0.0 || ^7.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", @@ -673,12 +729,13 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/axios/node_modules/form-data": { @@ -1047,20 +1104,10 @@ "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/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -1208,17 +1255,6 @@ "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -1574,27 +1610,6 @@ "node": ">=8" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" - }, - "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/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1606,50 +1621,6 @@ "node": ">=0.10" } }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/datadog-metrics": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/datadog-metrics/-/datadog-metrics-0.8.2.tgz", @@ -1699,11 +1670,6 @@ "node": ">=0.10.0" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -1802,23 +1768,9 @@ } }, "node_modules/discord-api-types": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", - "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/discord-canvas": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/discord-canvas/-/discord-canvas-1.5.2.tgz", - "integrity": "sha512-P3uRPOAMbLUv8717f0Zo8QLnNsg18p5xmTGlbQk9rhtQuoB4OFvoH37zjyIgOLMbj8qvaxFhpmEHK+O9swGApA==", - "dependencies": { - "canvas": "^2.10.1", - "fortnite": "^4.3.2", - "fortnite-9812": "^1.0.4", - "moment": "^2.29.4" - } + "version": "0.37.11", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.11.tgz", + "integrity": "sha512-cUNXrCdD4hEj5iJ9SligTNur64rNnLX5s6CbvmatRpWKMZtrLTOlyLhuXmVbjfDXeXH7os8Qb71Wa7IEhC27Sw==" }, "node_modules/discord-slash-command-handler": { "version": "3.2.3", @@ -1942,16 +1894,31 @@ "npm": ">=7.0.0" } }, - "node_modules/discord.js/node_modules/@discordjs/collection": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", - "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "node_modules/discord.js/node_modules/@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", "deprecated": "no longer supported", + "dependencies": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" + } + }, "node_modules/discord.js/node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -1965,6 +1932,31 @@ "node": ">= 6" } }, + "node_modules/discord.js/node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, + "node_modules/discord.js/node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1992,26 +1984,6 @@ "dogapi": "bin/dogapi" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -2102,17 +2074,6 @@ "node": ">=8.6" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", @@ -2134,34 +2095,6 @@ "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "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.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", @@ -2279,6 +2212,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2333,6 +2267,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2616,9 +2551,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", @@ -2664,22 +2599,6 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "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.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -2989,53 +2908,6 @@ "node": ">=8" } }, - "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/highlight.js": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", - "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "dependencies": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -3056,19 +2928,6 @@ "node": ">= 0.6" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3359,11 +3218,6 @@ "node": ">=8" } }, - "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/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -3476,127 +3330,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/json-bigint": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.1.4.tgz", @@ -3778,6 +3511,11 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -3824,11 +3562,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -4251,14 +3984,28 @@ "node": ">= 0.6" } }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node_modules/node": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/node/-/node-16.9.0.tgz", + "integrity": "sha512-a7+cnQtCKnb7d/OfEF1x6OmwDkrueCIPVootf/waqVmIbYzpcIGgFriXHfaRlKRYS2ueZQurG4KQyitbDerEfA==", + "dev": true, + "hasInstallScript": true, "dependencies": { - "lower-case": "^1.1.1" + "node-bin-setup": "^1.0.0" + }, + "bin": { + "node": "bin/node" + }, + "engines": { + "npm": ">=5.0.0" } }, + "node_modules/node-bin-setup": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz", + "integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg==", + "dev": true + }, "node_modules/node-canvas-with-twemoji-and-discord-emoji": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/node-canvas-with-twemoji-and-discord-emoji/-/node-canvas-with-twemoji-and-discord-emoji-1.1.4.tgz", @@ -4378,11 +4125,6 @@ "set-blocking": "^2.0.0" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, "node_modules/oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -4758,14 +4500,6 @@ "semver": "bin/semver.js" } }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dependencies": { - "no-case": "^2.2.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4786,17 +4520,6 @@ "node": ">=6" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -4946,6 +4669,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -4997,11 +4725,6 @@ "node": ">=0.6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -5246,14 +4969,6 @@ "node": ">=8" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -5381,11 +5096,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve-alpn": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz", @@ -5468,17 +5178,6 @@ "node": ">=6" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", @@ -5732,14 +5431,6 @@ "npm": ">= 3.0.0" } }, - "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==", - "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", @@ -5957,11 +5648,6 @@ "node": ">=4" } }, - "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": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -6204,9 +5890,9 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "node_modules/ts-mixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", - "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-5.4.1.tgz", + "integrity": "sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA==" }, "node_modules/tslib": { "version": "2.4.0", @@ -6280,17 +5966,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", @@ -6432,11 +6107,6 @@ "node": ">=8" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -6445,15 +6115,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -6492,6 +6153,14 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -6518,17 +6187,6 @@ "resolved": "https://registry.npmjs.org/voucher-code-generator/-/voucher-code-generator-1.1.1.tgz", "integrity": "sha1-weedcQJQbOUMZbgkqfTeE33ScYs=" }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -6542,36 +6200,6 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-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/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "engines": { - "node": ">=12" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -6759,26 +6387,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -6787,19 +6395,6 @@ "node": ">=8" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "engines": { - "node": ">=12" - } - }, - "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/y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", @@ -6898,9 +6493,9 @@ } }, "node_modules/zod": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.18.0.tgz", - "integrity": "sha512-gwTm8RfUCe8l9rDwN5r2A17DkAa8Ez4Yl4yXqc5VqeGaXaJahzYYXbTwvhroZi0SNBqTwh/bKm2N0mpCzuw4bA==", + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", + "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -6961,36 +6556,84 @@ "kuler": "^2.0.0" } }, - "@discordjs/builders": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", - "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "@discordjs/builders": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.3.0.tgz", + "integrity": "sha512-yFBPqohVAtCWoDTQCYk5ubgmkiRbGpbiR4RfYGHCmV5S2YZc7j8WzfKVksjuy2o5IWRfXFsW6G2Lr+KpW41pEA==", "requires": { - "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.26.0", - "ts-mixer": "^6.0.0", - "tslib": "^2.3.1", - "zod": "^3.11.6" + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.26.0", + "ts-mixer": "^5.4.1", + "tslib": "^2.3.0" + }, + "dependencies": { + "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==" + }, + "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" + } + }, + "ow": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.26.0.tgz", + "integrity": "sha512-22YUQW9d6oUSCpIQuBV25djtC1uMtpWqmtUYnuh2UHWeNMpppCFCvq3eSBIWWMDbe2UVq26kWYvBHDzOIu5NYg==", + "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" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + } } }, - "@krayon/discord-html-transcripts": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@krayon/discord-html-transcripts/-/discord-html-transcripts-2.8.3.tgz", - "integrity": "sha512-hOWa87ZsRusKDcWSJuJob3aE158I9o0wo+TH80clUi+Y3GYOdjKepGd89hz3Z9sskSw3W0LgdaBzfNccLxt8Dw==", + "@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" + }, + "@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", "requires": { - "axios": "^0.27.2", - "dotenv": "^16.0.1", - "he": "^1.2.0", - "highlight.js": "^11.6.0", - "html-minifier": "^4.0.0", - "jsdom": "^20.0.0", - "twemoji-parser": "^14.0.0" + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" }, "dependencies": { - "twemoji-parser": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-14.0.0.tgz", - "integrity": "sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA==" + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } } } }, @@ -7033,6 +6676,11 @@ "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.4.0.tgz", "integrity": "sha512-1npoLO1YPPXCsWCfuonsSdtHbPUo6dvjWUJtmUHiK8yDTmy00LbkpRkdV/UycA1fh+QsxwOPhgx2zu64Z+19ww==" }, + "@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==" + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -7046,11 +6694,6 @@ "defer-to-connect": "^2.0.0" } }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - }, "@top-gg/sdk": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@top-gg/sdk/-/sdk-3.0.8.tgz", @@ -7162,11 +6805,6 @@ "@types/node": "*" } }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -7187,22 +6825,6 @@ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", "dev": true }, - "acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "requires": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - }, - "dependencies": { - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" - } - } - }, "acorn-jsx": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", @@ -7210,11 +6832,6 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==" - }, "agent-base": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", @@ -7427,12 +7044,13 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" }, "dependencies": { "form-data": { @@ -7711,17 +7329,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", @@ -7832,14 +7440,6 @@ "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "requires": { - "source-map": "~0.6.0" - } - }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -8128,26 +7728,6 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -8156,40 +7736,6 @@ "assert-plus": "^1.0.0" } }, - "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "dependencies": { - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, "datadog-metrics": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/datadog-metrics/-/datadog-metrics-0.8.2.tgz", @@ -8239,11 +7785,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -8314,20 +7855,9 @@ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" }, "discord-api-types": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", - "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" - }, - "discord-canvas": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/discord-canvas/-/discord-canvas-1.5.2.tgz", - "integrity": "sha512-P3uRPOAMbLUv8717f0Zo8QLnNsg18p5xmTGlbQk9rhtQuoB4OFvoH37zjyIgOLMbj8qvaxFhpmEHK+O9swGApA==", - "requires": { - "canvas": "^2.10.1", - "fortnite": "^4.3.2", - "fortnite-9812": "^1.0.4", - "moment": "^2.29.4" - } + "version": "0.37.11", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.11.tgz", + "integrity": "sha512-cUNXrCdD4hEj5iJ9SligTNur64rNnLX5s6CbvmatRpWKMZtrLTOlyLhuXmVbjfDXeXH7os8Qb71Wa7IEhC27Sw==" }, "discord-slash-command-handler": { "version": "3.2.3", @@ -8424,10 +7954,22 @@ "ws": "^8.4.0" }, "dependencies": { - "@discordjs/collection": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", - "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" + "@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "requires": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + } + }, + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" }, "form-data": { "version": "4.0.0", @@ -8438,6 +7980,17 @@ "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } + }, + "ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, + "ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "requires": {} } } }, @@ -8462,21 +8015,6 @@ "rc": "^1.2.8" } }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "requires": { - "webidl-conversions": "^7.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - } - } - }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -8676,7 +8214,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.3.1", @@ -8713,7 +8252,8 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, "etag": { "version": "1.8.1", @@ -8958,9 +8498,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "forever-agent": { "version": "0.6.1", @@ -8982,22 +8522,6 @@ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" }, - "fortnite": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/fortnite/-/fortnite-4.3.2.tgz", - "integrity": "sha512-6BReElBAwP/3Gq6zEBn9gdQzrzWpMlumY9IF0suZgDshbzsS8dCDuV8JszDl1l1PVJwtzm2uexfUo9YtUqUV6Q==", - "requires": { - "node-fetch": "^2.3.0" - } - }, - "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==", - "requires": { - "node-fetch": "^2.3.0" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -9230,38 +8754,6 @@ "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "highlight.js": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", - "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==" - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - } - }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -9279,16 +8771,6 @@ "toidentifier": "1.0.0" } }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -9498,11 +8980,6 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" }, - "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==" - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -9596,94 +9073,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "requires": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "requires": { - "punycode": "^2.1.1" - } - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, "json-bigint": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.1.4.tgz", @@ -9839,6 +9228,11 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -9881,11 +9275,6 @@ "triple-beam": "^1.3.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -10199,14 +9588,21 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/node/-/node-16.9.0.tgz", + "integrity": "sha512-a7+cnQtCKnb7d/OfEF1x6OmwDkrueCIPVootf/waqVmIbYzpcIGgFriXHfaRlKRYS2ueZQurG4KQyitbDerEfA==", + "dev": true, "requires": { - "lower-case": "^1.1.1" + "node-bin-setup": "^1.0.0" } }, + "node-bin-setup": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz", + "integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg==", + "dev": true + }, "node-canvas-with-twemoji-and-discord-emoji": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/node-canvas-with-twemoji-and-discord-emoji/-/node-canvas-with-twemoji-and-discord-emoji-1.1.4.tgz", @@ -10290,11 +9686,6 @@ "set-blocking": "^2.0.0" } }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, "oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -10574,14 +9965,6 @@ } } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "requires": { - "no-case": "^2.2.0" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10596,14 +9979,6 @@ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -10710,6 +10085,11 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -10752,11 +10132,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -10966,11 +10341,6 @@ "rc": "^1.2.8" } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -11065,11 +10435,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "resolve-alpn": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz", @@ -11126,14 +10491,6 @@ "sparse-bitfield": "^3.0.3" } }, - "saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "requires": { - "xmlchars": "^2.2.0" - } - }, "seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", @@ -11338,11 +10695,6 @@ "smart-buffer": "^4.2.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -11508,11 +10860,6 @@ "has-flag": "^3.0.0" } }, - "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==" - }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -11715,9 +11062,9 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "ts-mixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", - "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-5.4.1.tgz", + "integrity": "sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA==" }, "tslib": { "version": "2.4.0", @@ -11779,11 +11126,6 @@ "is-typedarray": "^1.0.0" } }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" - }, "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", @@ -11896,11 +11238,6 @@ } } }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -11909,15 +11246,6 @@ "punycode": "^2.1.0" } }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -11947,6 +11275,11 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -11967,14 +11300,6 @@ "resolved": "https://registry.npmjs.org/voucher-code-generator/-/voucher-code-generator-1.1.1.tgz", "integrity": "sha1-weedcQJQbOUMZbgkqfTeE33ScYs=" }, - "w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "requires": { - "xml-name-validator": "^4.0.0" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -11988,29 +11313,6 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "requires": { - "iconv-lite": "0.6.3" - }, - "dependencies": { - "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==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" - }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -12165,27 +11467,11 @@ "typedarray-to-buffer": "^3.1.5" } }, - "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "requires": {} - }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", @@ -12270,9 +11556,9 @@ } }, "zod": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.18.0.tgz", - "integrity": "sha512-gwTm8RfUCe8l9rDwN5r2A17DkAa8Ez4Yl4yXqc5VqeGaXaJahzYYXbTwvhroZi0SNBqTwh/bKm2N0mpCzuw4bA==" + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", + "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==" } } } diff --git a/package.json b/package.json index da3472f..37e6211 100644 --- a/package.json +++ b/package.json @@ -7,21 +7,25 @@ }, "devDependencies": { "eslint": "^7.6.0", - "eslint-config-tesseract": "^0.0.3" + "eslint-config-tesseract": "^0.0.3", + "node": "^16.9.0" }, "dependencies": { - "@krayon/discord-html-transcripts": "^2.8.3", + "@discordjs/builders": "^0.3.0", + "@discordjs/rest": "^0.3.0", "@top-gg/sdk": "^3.0.8", + "axios": "^1.5.0", "body-parser": "^1.19.0", "canvacord": "^5.0.8", - "canvas": "^2.9.3", + "canvas": "^2.11.2", "chalk": "^4.1.0", + "colors": "^1.4.0", "common-tags": "^1.8.0", "connect-mongo": "^4.4.1", "crypto": "^1.0.1", "datadog-metrics": "^0.8.2", "date-and-time": "^0.14.2", - "discord-canvas": "^1.5.2", + "discord-api-types": "^0.37.11", "discord-slash-command-handler": "^3.2.3", "discord.js": "^13.6.0", "dotenv": "^16.0.1", @@ -64,5 +68,13 @@ "author": "", "license": "ISC", "keywords": [], - "description": "" + "description": "



Pogy the Discord Bot [DJS V13]

", + "repository": { + "type": "git", + "url": "git+https://github.com/eYuM-coder/Pogy.git" + }, + "bugs": { + "url": "https://github.com/eYuM-coder/Pogy/issues" + }, + "homepage": "https://github.com/eYuM-coder/Pogy#readme" } diff --git a/replit.nix b/replit.nix new file mode 100644 index 0000000..bf2d6d9 --- /dev/null +++ b/replit.nix @@ -0,0 +1,8 @@ +{ pkgs }: { + deps = [ + pkgs.nodejs-18_x + pkgs.nodePackages.typescript-language-server + pkgs.yarn + pkgs.replitPackages.jest + ]; +} \ No newline at end of file diff --git a/src/commands/economy/addmoney.js b/src/commands/economy/addmoney.js new file mode 100644 index 0000000..08d8f23 --- /dev/null +++ b/src/commands/economy/addmoney.js @@ -0,0 +1,45 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "addmoney", + aliases: ["add"], + description: "Add money to a users wallet!", + category: "Economy", + usage: " ", + examples: ["addmoney @Peter 400"], + cooldown: 3, + }) + } + async run(message, args) { + const user = message.mentions.members.first(); + const amount = args.slice(1).join(""); + const profile = await Profile.findOne({ userID: user.id, guildId: message.guild.id }); + if (!profile) { + await createProfile(user, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to use it.`) + ] + }); + } else { + await Profile.updateOne({ + userID: message.author.id, guildId: message.guild.id + }, + { $inc: { wallet: amount} }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Added $${amount} to ${user}`) + ] + }); + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/balance.js b/src/commands/economy/balance.js new file mode 100644 index 0000000..31824cb --- /dev/null +++ b/src/commands/economy/balance.js @@ -0,0 +1,47 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "balance", + aliases: ["bal"], + description: "Check a user's balance", + category: "Economy", + usage: "[user]", + examples: ["balance", "balance @Peter"], + cooldown: 3, + }) + } + async run(message, args) { + const user = message.mentions.members.first() || message.author; + + const profile = await Profile.findOne({ + userID: user.id, + guildId: message.guild.id + }); + if (!profile) { + if(user.id !== message.author.id) return message.channel.sendCustom(`${user} doesn't have a profile!`); + + await createProfile(user, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to check your balance.`) + ] + }); + } else { + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${user.username}'s Balance`) + .setDescription(`**Wallet:** $${profile.wallet}\n**Bank:** $${profile.bank}`) + ] + }); + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/beg.js b/src/commands/economy/beg.js new file mode 100644 index 0000000..8cb9c5d --- /dev/null +++ b/src/commands/economy/beg.js @@ -0,0 +1,75 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "beg", + description: "Beg for money", + category: "Economy", + cooldown: 3, + }) + } + async run(message) { + const amount = Math.floor(Math.random() * 2000); + const profile = await Profile.findOne({ userID: message.author.id, guildId: message.guild.id }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to beg for money.`) + ] + }); + } else { + if (!profile.lastBeg) { + await Profile.updateOne( + { + userID: message.author.id, + guildId: message.guild.id + }, + { $set: { lastBeg: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }) + await message.channel.sendCustomn({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Beg`) + .setDescription(`You have begged ($${amount}).\nCome back in 3 minutes to beg again.`) + ] + }); + } else if (Date.now() - profile.lastBeg > 180000) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, + { $set: { lastBeg: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: amount } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Beg`) + .setDescription(`You begged for a total of $${amount}.`) + ] + }); + } else { + const lastBeg = new Date(profile.lastBeg); + const timeLeft = Math.round((lastBeg.getTime() + 180000 - Date.now()) / 1000); + const minutes = Math.floor(timeLeft / 60); + const seconds = timeLeft - minutes * 60; + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Beg`) + .setDescription(`You have to wait ${minutes}m ${seconds}s before you can beg again!`) + ] + }); + } + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/daily.js b/src/commands/economy/daily.js new file mode 100644 index 0000000..eb6c3a4 --- /dev/null +++ b/src/commands/economy/daily.js @@ -0,0 +1,74 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "daily", + description: "Collect daily earnings. 24hr cooldown.", + category: "Economy", + cooldown: 3, + }) + } + async run(message) { + const profile = await Profile.findOne({ guildId: message.guild.id, userID: message.author.id }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to collect your daily earnings.`) + ] + }); + } else { + if (!profile.lastDaily) { + await Profile.updateOne( + { + userID: message.author.id, guildId: message.guild.id + }, + { $set: { lastDaily: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }) + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Daily`) + .setDescription(`You have collected todays earnings ($50000).\nCome back tommorow to collect more.`) + ] + }); + } else if (Date.now() - profile.lastDaily > 86400000) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, + { $set: { lastDaily: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: 50000 } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Daily`) + .setDescription(`You have collected your daily earnings of $50000.`) + ] + }); + } else { + const lastDaily = new Date(profile.lastDaily); + const timeLeft = Math.round((lastDaily.getTime() + 86400000 - Date.now()) / 1000); + const hours = Math.floor(timeLeft / 3600); + const minutes = Math.floor((timeLeft - hours * 3600) / 60); + const seconds = timeLeft - hours * 3600 - minutes * 60; + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Daily`) + .setDescription(`You have to wait ${hours}h ${minutes}m ${seconds}s before you can collect your daily earnings!`) + ] + }); + } + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/deposit.js b/src/commands/economy/deposit.js new file mode 100644 index 0000000..54d1f89 --- /dev/null +++ b/src/commands/economy/deposit.js @@ -0,0 +1,54 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "deposit", + aliases: ["dep"], + description: "Deposit your wallet money to the bank.", + category: "Economy", + usage: "", + examples: ["dep 400"], + cooldown: 3, + }) + } + async run(message, args) { + const profile = await Profile.findOne({ userID: message.author.id, guildId: message.guild.id }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to deposit your money.`) + ] + }); + } else { + const amount = args[0]; + if (amount > profile.wallet) { + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`You don't have enough money to deposit!`) + ] + }); + } else { + await Profile.updateOne({ + userID: message.author.id, guildId: message.guild.id + }, + { $inc: { wallet: -amount, bank: amount } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Deposited $${amount} to the bank.`) + ] + }); + } + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/monthly.js b/src/commands/economy/monthly.js new file mode 100644 index 0000000..34fc895 --- /dev/null +++ b/src/commands/economy/monthly.js @@ -0,0 +1,74 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "monthly", + description: "Collect monthly coins. 30d cooldown.", + category: "Economy", + cooldown: 3, + }) + } + async run(message) { + const profile = await Profile.findOne({ + userID: message.author.id, + guildId: message.guild.id + }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to collect your monthly earnings`) + ] + }); + } else { + if (!profile.lastMonthly) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, { $set: { lastMonthly: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: 2500000 } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Monthly`) + .setDescription(`You have collected this month's earnings ($2,500,000).\nCome back next month to collect more`) + ] + }); + } else if (Date.now() - profile.lastMonthly > 2592000000) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, { $set: { lastMonthly: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: 2500000 } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Monthly`) + .setDescription(`You have collected your monthly earnings of $2,500,000.`) + ] + }); + } else { + const lastMonthly = new Date(profile.lastMonthly); + const timeLeft = Math.round((lastMonthly.getTime() + 2592000000 - Date.now()) / 1000); + const days = Math.floor(timeLeft / 86400); + const hours = Math.floor((timeLeft - days * 86400) / 3600); + const minutes = Math.floor(((timeLeft - days * 86400) - hours * 3600) / 60); + const seconds = timeLeft - days * 86400 - hours * 3600 - minutes * 60; + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Monthly`) + .setDescription(`You have to wait ${days}d ${hours}h ${minutes}m ${seconds}s before you can collect your monthly earnings!`) + ] + }) + } + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/removemoney.js b/src/commands/economy/removemoney.js new file mode 100644 index 0000000..b551ff4 --- /dev/null +++ b/src/commands/economy/removemoney.js @@ -0,0 +1,45 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "removemoney", + aliases: ["deletemoney"], + description: "Remove money from a users wallet!", + category: "Economy", + usage: " ", + examples: ["removemoney @Peter 400"], + cooldown: 3, + }) + } + async run(message, args) { + const user = message.mentions.members.first(); + const amount = args.slice(1).join(""); + const profile = await Profile.findOne({ userID: user.id, guildId: message.guild.id }); + if (!profile) { + await createProfile(user, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to use it.`) + ] + }); + } else { + await Profile.updateOne({ + userID: message.author.id, guildId: message.guild.id + }, + { $inc: { wallet: -amount } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Removed $${amount} from ${user}`) + ] + }); + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/weekly.js b/src/commands/economy/weekly.js new file mode 100644 index 0000000..63f39a4 --- /dev/null +++ b/src/commands/economy/weekly.js @@ -0,0 +1,75 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); +const ms = require("ms"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "weekly", + description: "Collect weekly coins. 7d cooldown.", + category: "Economy", + cooldown: 3, + }) + } + async run(message) { + const profile = await Profile.findOne({ + userID: message.author.id, + guildId: message.guild.id + }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to collect your weekly earnings`) + ] + }); + } else { + if (!profile.lastWeekly) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, { $set: { lastWeekly: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: 500000 } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Weekly`) + .setDescription(`You have collected this weeks earnings ($500,000).\nCome back next week to collect more`) + ] + }); + } else if (Date.now() - profile.lastWeekly > 604800000) { + await Profile.updateOne( + { userID: message.author.id, guildId: message.guild.id }, { $set: { lastWeekly: Date.now() } } + ); + await Profile.updateOne({ userID: message.author.id, guildId: message.guild.id }, { $inc: { wallet: 500000 } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Weekly`) + .setDescription(`You have collected your weekly earnings.`) + ] + }); + } else { + const lastWeekly = new Date(profile.lastWeekly); + const timeLeft = Math.round((lastWeekly.getTime() + 604800000 - Date.now()) / 1000); + const days = Math.floor(timeLeft / 86400); + const hours = Math.floor((timeLeft - days * 86400) / 3600); + const minutes = Math.floor(((timeLeft - days * 86400) - hours * 3600) / 60); + const seconds = timeLeft - days * 86400 - hours * 3600 - minutes * 60; + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setTitle(`${message.author.username}'s Weekly`) + .setDescription(`You have to wait ${days}d ${hours}h ${minutes}m ${seconds}s before you can collect your weekly earnings!`) + ] + }) + } + } + } +}; \ No newline at end of file diff --git a/src/commands/economy/withdraw.js b/src/commands/economy/withdraw.js new file mode 100644 index 0000000..ad9f9ad --- /dev/null +++ b/src/commands/economy/withdraw.js @@ -0,0 +1,54 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const Profile = require("../../database/models/economy/profile.js"); +const { createProfile } = require("../../utils/utils.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "withdraw", + aliases: ["with"], + description: "Withdraw your bank money from the bank to your wallet.", + category: "Economy", + usage: "", + examples: ["withdraw 400"], + cooldown: 3, + }) + } + async run(message, args) { + const profile = await Profile.findOne({ userID: message.author.id, guildId: message.guild.id }); + if (!profile) { + await createProfile(message.author, message.guild); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Creating profile.\nUse this command again to withdraw your money.`) + ] + }); + } else { + const amount = args[0]; + if (amount > profile.bank) { + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`You don't have enough money to withdraw!`) + ] + }); + } else { + await Profile.updateOne({ + userID: message.author.id, guildId: message.guild.id + }, + { $inc: { wallet: amount, bank: -amount } }); + await message.channel.sendCustom({ + embeds: [ + new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`Withdrawn $${amount} from the bank.`) + ] + }); + } + } + } +}; \ No newline at end of file diff --git a/src/commands/fun/hack.js b/src/commands/fun/hack.js new file mode 100644 index 0000000..53bbe1f --- /dev/null +++ b/src/commands/fun/hack.js @@ -0,0 +1,103 @@ +const Command = require("../../structures/Command"); +const Guild = require("../../database/schemas/Guild"); +const darkrandom = require("random"); +const darkemail = require("random-email"); +const darkpassword = require("generate-password"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "hack", + description: "Hack someone! (fake)", + category: "Fun", + usage: "", + examples: [ "hack @Pogy" ], + cooldown: 3, + }); + } + + async run(message) { + + + const guildDB = await Guild.findOne({ + guildId: message.guild.id + }); + + const language = require(`../../data/language/${guildDB.language}.json`) + + + const impostorpassword = darkpassword.generate({ + length: 10, + numbers: true, + }); + + const user = message.mentions.users.first(); + if(!user) { + return message.channel.sendCustom(`${language.hack1}`); + } else { + if (user.bot) { + return message.channel.sendCustom(`${language.hackbot}`); + } + } + const member = message.mentions.members.last(); + const mostCommon = [`${language.hack2}`, `${language.hack3}`, `${language.hack3}`, `${language.hack4}`, `${language.hack5}`, `${language.hack6}`]; + const lastdm = [ + `${language.hack7}`, + `${language.hack8}`, + `${language.hack9}`, + `${language.hack10}`, + ]; + + + message.channel.send(`${language.hack11} "${member.user.username}" ${language.hack12}`) + .then(async (msg) => { + setTimeout(async function () { + await msg.edit(`[▘] ${language.hack13}`).catch(() => {}); + }, 1500); + setTimeout(async function () { + await msg.edit( + `[▝] Email: \`${darkemail({ + domain: "gmail.com", + })}\`\nPassword: \`${impostorpassword}\`` + ).catch(() => {}); + }, 3000); + setTimeout(async function () { + await msg.edit( + `[▖] Last DM: "${lastdm[Math.floor(Math.random() * lastdm.length)]}"` + ).catch(() => {}); + }, 4500); + setTimeout(async function () { + await msg.edit(`[▘] ${language.hack14}`).catch(() => {}); + }, 6000); + setTimeout(async function () { + await msg.edit( + `[▝] mostCommon = "${ + mostCommon[Math.floor(Math.random() * mostCommon.length)] + }"` + ).catch(() => {}); + }, 7500); + setTimeout(async function () { + await msg.edit(`[▗] Finding IP address...`).catch(() => {}); + }, 9000) + setTimeout(async function () { + await msg.edit( + `[▖] IP address: \`127.0.0.1:${darkrandom.int(100, 9999)}\`` + ).catch(() => {}); + }, 10500); + setTimeout(async function () { + await msg.edit(`[▘] ${language.hack15}`).catch(() => {}); + }, 12000); + setTimeout(async function () { + await msg.edit(`[▝] ${language.hack16}`).catch(() => {}); + }, 13500); + setTimeout(async function () { + await msg.edit(`${language.hack17} ${member.user.username}`).catch(() => {}); + }, 15000); + setTimeout(async function () { + await message.channel.send( + `${language.hack18}` + ).catch(() => {}); + }, 16500); + }); + +}} \ No newline at end of file diff --git a/src/commands/fun/reverse.js b/src/commands/fun/reverse.js index 9d16281..96c004c 100644 --- a/src/commands/fun/reverse.js +++ b/src/commands/fun/reverse.js @@ -24,11 +24,11 @@ module.exports = class extends Command { const text = args.join(" "); const converted = text.split("").reverse().join(""); message.channel - .sendCustom( - new discord.MessageEmbed() - .setDescription(`\u180E${converted}`) - .setColor(message.client.color.blue) - ) - .catch(() => {}); + .sendCustom( + new discord.MessageEmbed() + .setDescription(`\u180E${converted}`) + .setColor(message.client.color.blue) + ) + .catch(() => {}); } }; diff --git a/src/commands/information/dashboard.js b/src/commands/information/dashboard.js new file mode 100644 index 0000000..c670fe6 --- /dev/null +++ b/src/commands/information/dashboard.js @@ -0,0 +1,22 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "dashboard", + description: "Need a way to get the bot's dashboard link but don't know it? Use this to get it!", + category: "Information", + cooldown: 3, + }); + } + async run(message) { + const dashembed = new MessageEmbed() + .setTitle("Need the bot's dashboard link? Here you go!") + .setDescription("https://v2.pogy.xyz") + .setColor("RANDOM") + .setFooter({ text: `Requested by ${message.author.username}` }) + .setTimestamp(); + message.channel.sendCustom({ embeds: [dashembed] }); + } +} diff --git a/src/commands/information/serverinfo.js b/src/commands/information/serverinfo.js index b8c513b..a109d20 100644 --- a/src/commands/information/serverinfo.js +++ b/src/commands/information/serverinfo.js @@ -1,6 +1,9 @@ const Command = require("../../structures/Command"); -const { MessageEmbed } = require("discord.js"); +const { MessageEmbed, MessageActionRow, MessageButton, MessageAttachment } = require("discord.js"); const Guild = require("../../database/schemas/Guild"); +const fs = require("fs"); +const path = require("path"); +const emojis = require("../../assets/emojis.json"); function checkDays(date) { let now = new Date(); @@ -29,12 +32,9 @@ module.exports = class extends Command { const language = require(`../../data/language/${guildDB.language}.json`); const embed = new MessageEmbed() - - .setAuthor(message.guild.name, message.guild.iconURL) + .setAuthor(message.guild.name, message.guild.iconURL()) .addField(`${language.nameS}`, `${message.guild.name}`, true) .addField("ID", `${message.guild.id}`, true) - - .addField( `${language.serverInfo1}`, `${message.guild.members.cache.size} | ${ @@ -60,6 +60,116 @@ module.exports = class extends Command { ) .setThumbnail(message.guild.iconURL()) .setColor(message.guild.me.displayHexColor); - message.channel.sendCustom({ embed }); + + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId('showServerImage') + .setLabel('Export to HTML') + .setStyle('SUCCESS') + .setEmoji(`${emojis.utility}`) + ); + + const sentMessage = await message.channel.sendCustom({ embeds: [embed], components: [row] }); + + const filter = i => i.customId === 'showServerImage' && i.user.id === message.author.id; + + const emojisList = message.guild.emojis.cache.map(emoji => `
  • ${emoji.name}:
  • `).join(''); + + const collector = sentMessage.createMessageComponentCollector({ filter, time: 15000 }); + + collector.on('collect', async i => { + + const htmlContent = ` + + + + Server Stats - ${message.guild.name} + + + +

    ${message.guild.name} - Server Stats

    +

    Some server statistics:

    +
      +
    • Server Name: ${message.guild.name}
    • +
    • ID: ${message.guild.id}
    • +
    • Member Count: ${message.guild.members.cache.size}
    • +
    • Bot Count: ${message.guild.members.cache.filter((member) => member.user.bot).size}
    • +
    • Text Channel Count: ${message.guild.channels.cache.filter((channel) => channel.type === 'text').size}
    • +
    • Voice Channel Count: ${message.guild.channels.cache.filter((channel) => channel.type === 'voice').size}
    • +
    • Role Count: ${message.guild.roles.cache.size}
    • +
    • Created At: ${message.guild.createdAt.toUTCString().substr(0, 16)} (${checkDays(message.guild.createdAt)})
    • +
    • Region: ${message.guild.region}
    • +
    • Verification Level: ${message.guild.verificationLevel}
    • +
    • Boost Count: ${message.guild.premiumSubscriptionCount}
    • +
    • Boost Tier: ${message.guild.premiumTier}
    • +
    • Boosters: ${message.guild.premiumSubscriptionCount}
    • +
    • Emojis: ${message.guild.emojis.cache.size}
    • +
    • Roles: ${message.guild.roles.cache.size}
    • +
    • Rules channel: ${message.guild.rulesChannelID? `<#${message.guild.rulesChannelID}>` : 'None'}
    • +
    • Public updates channel: ${message.guild.publicUpdatesChannelID? `<#${message.guild.publicUpdates.channelID}>` : 'None'}
    • +
    • System channel: ${message.guild.systemChannelID? `<#${message.guild.systemChannelID}>` : 'None'}
    • +
    • AFK Channel: ${message.guild.afkChannelID? `<#${message.guild.afk.channelID}>` : 'None'}
    • +
    • AFK Timeout: ${message.guild.afkTimeout} seconds
    • +
    • Owner: ${message.guild.owner}
    • +
    • Owner ID: ${message.guild.ownerID}
    • +
    • Icon:
    • +
    • Splash:
    • +
    • Banner:
    • +
    • Default Message Notification: ${message.guild.defaultMessageNotifications}
    • +
    • Explicit Content Filter: ${message.guild.explicitContentFilter}
    • +
    • MFA Level: ${message.guild.mfaLevel}
    • +
    • Widget Channel: ${message.guild.widgetChannelID? `<#${message.guild.widgetChannelID}>` : 'None'}
    • +
    • Widget Enabled: ${message.guild.widgetEnabled? 'Yes' : 'No'}
    • +
    • Widget Server: ${message.guild.widgetEnabled? message.guild.widget.server : 'None'}
    • +
    • Widget Channel: ${message.guild.widgetEnabled? message.guild.widget.channel : 'None'}
    • +
    • Widget Role: ${message.guild.widgetEnabled? message.guild.widget.role : 'None'}
    • + +
    + + + `; + + const filePath = path.join(__dirname, `${message.guild.name}_server_stats.html`); + + fs.writeFileSync(filePath, htmlContent); + + if (!fs.existsSync(filePath)) { + return message.reply("Error: Server stats file not found."); + } + + const attachment = new MessageAttachment(filePath, `${message.guild.name}_server_stats.html`); + await message.reply({ files: [attachment] }); + + fs.unlinkSync(filePath); + + sentMessage.edit({ components: [] }); + }); + + collector.on('end', collected => { + if (collected.size === 0) { + sentMessage.edit({ components: [] }); + } + }); } }; diff --git a/src/commands/moderation/modnick.js b/src/commands/moderation/modnick.js new file mode 100644 index 0000000..898b884 --- /dev/null +++ b/src/commands/moderation/modnick.js @@ -0,0 +1,85 @@ +const Command = require("../../structures/Command"); +const { MessageEmbed } = require("discord.js"); +const darkpassword = require("generate-password"); +const Logging = require("../../database/schemas/logging"); + +module.exports = class extends Command { + constructor(...args) { + super(...args, { + name: "modnick", + aliases: ["mod", "modnickname"], + description: "Moderate a users nickname to make pinging possible", + category: "Moderation", + guildOnly: true, + botPermission: ["MANAGE_NICKNAMES"], + userPermission: ["MANAGE_NICKNAMES"], + usage: "<@user> [reason]", + examples: "modnick @Peter Please make sure your nickname have characters that are typeable on a standard QWERTY keyboard", + cooldown: 30, + }); + } + + async run(message, args) { + const client = message.client + const logging = await Logging.findOne({ guildId: message.guild.id }); + + const member = + message.mentions.members.last() || + message.guild.members.cache.get(args[0]); + + const reason = args.slice(1).join(" "); + + const impostorpassword = darkpassword.generate({ + length: 6, + numbers: true, + }); + + //LOGGING HERE + if (logging) { + if (logging.moderation.delete_after_executed === "true") { + message.delete().catch(() => {}); + } + } + + if(!args[0]) { + let validmention = new MessageEmbed() + .setColor("RED") + .setDescription(`${client.emoji.fail} | Please mention a valid member!`) + return message.channel.sendCustom({ embeds: [validmention] }) + } + + if(!member) { + let usernotfound = new MessageEmbed() + .setColor("RED") + .setDescription(`${client.emoji.fail} | I can't find that member`) + return message.channel.sendCustom({ embeds: [usernotfound] }) + } + + if(member.roles.highest.position >= message.member.roles.highest.position) { + let rolesmatch = new MessageEmbed() + .setColor("RED") + .setDescription(`${client.emoji.fail} | They have more power than you or have equal power as you do!`) + return message.channel.sendCustom({ embeds: [rolesmatch] }) + } + + if(member.id === message.author.id) { + let modnickerror = new MessageEmbed() + .setColor("RED") + .setDescription(`${client.emoji.fail} | You can't moderate your own nickname!`) + return message.channel.sendCustom({ embeds: [modnickerror] }) + } + + if(member) { + const oldNickname = member.nickname || "None"; + await member.setNickname(`Moderated Nickname ${impostorpassword}`) + let embed = new MessageEmbed() + .setColor("BLURPLE") + .setDescription(`${client.emoji.success} | Moderated <@${member.id}>'s nickname for \`${reason || "No Reason Provided"}\``) + + message.channel.sendCustom({ embeds: [embed] }) + } else { + return message.reply(`I can't moderate their nickname, make sure that my role is above theirs`) + } + return undefined + } +}; \ No newline at end of file diff --git a/src/commands/moderation/warnings.js b/src/commands/moderation/warnings.js index 5de6d99..8c4f1f9 100644 --- a/src/commands/moderation/warnings.js +++ b/src/commands/moderation/warnings.js @@ -45,7 +45,10 @@ module.exports = class extends Command { return message.channel.sendCustom({ embeds: [ new discord.MessageEmbed() - .setAuthor(message.author.tag, message.author.avatarURL()) + .setAuthor({ + name: message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }), + }) .setDescription( `${message.client.emoji.fail} | **${mentionedMember.user.tag}** ${language.warningsNoError}` ) @@ -70,10 +73,10 @@ module.exports = class extends Command { const count = warnDoc.warnings.length; const embed = new MessageEmbed() - .setAuthor( - mentionedMember.user.tag, - mentionedMember.user.displayAvatarURL({ dynamic: true }) - ) + .setAuthor({ + name: mentionedMember.user.tag, + iconURL: mentionedMember.user.displayAvatarURL({ dynamic: true }), + }) .setFooter({ text: message.member.displayName, iconURL: message.author.displayAvatarURL({ dynamic: true }), @@ -132,10 +135,10 @@ module.exports = class extends Command { else { let n = 0; const json = embed - .setFooter( - `${language.warnExpire}\n` + message.member.displayName, - message.author.displayAvatarURL({ dynamic: true }) - ) + .setFooter({ + text: `${language.warnExpire}\n` + message.member.displayName, + iconURL: message.author.displayAvatarURL({ dynamic: true }), + }) .toJSON(); const first = () => { diff --git a/src/commands/reactionrole/addreaction.js b/src/commands/reactionrole/addreaction.js index 21e0044..2e61aae 100644 --- a/src/commands/reactionrole/addreaction.js +++ b/src/commands/reactionrole/addreaction.js @@ -21,7 +21,7 @@ module.exports = class extends Command { description: "Create a reaction role", category: "Reaction Role", cooldown: 3, - usage: " (option)", + usage: "[channel] (option)", userPermission: ["MANAGE_GUILD"], }); } @@ -31,9 +31,7 @@ module.exports = class extends Command { let fail = message.client.emoji.fail; let channel = - message.mentions.channels.first() || - message.guild.channels.cache.get(args[0]) || - message.guild.channels.cache.find((ch) => ch.name === args[0]); + message.mentions.channels.first() || message.channel; if (!channel) return message.channel.sendCustom({ embeds: [ diff --git a/src/commands/reactionrole/removereactionrole.js b/src/commands/reactionrole/removereactionrole.js index c04c428..1d0c43e 100644 --- a/src/commands/reactionrole/removereactionrole.js +++ b/src/commands/reactionrole/removereactionrole.js @@ -23,7 +23,7 @@ module.exports = class extends Command { description: "Create a reaction role", category: "Reaction Role", cooldown: 3, - usage: " ", + usage: "[channel] ", userPermission: ["MANAGE_GUILD"], }); } @@ -34,9 +34,7 @@ module.exports = class extends Command { let success = message.client.emoji.success; let channel = - message.mentions.channels.first() || - message.guild.channels.cache.get(args[0]) || - message.guild.channels.cache.find((ch) => ch.name === args[0]); + message.mentions.channels.first() || message.channel; if (!channel) return message.channel.sendCustom({ embeds: [ diff --git a/src/dashboard/dashboard.js b/src/dashboard/dashboard.js index 1843fda..9ea8e73 100644 --- a/src/dashboard/dashboard.js +++ b/src/dashboard/dashboard.js @@ -14,6 +14,7 @@ const Strategy = require("./passport").Strategy; const premiumWeb = new Discord.WebhookClient({ url: jsonconfig.webhooks.premium, }); +const send = require(`../packages/logs/index.js`); const ejs = require("ejs"); const ShortUrl = require("../database/models/ShortUrl.js"); const randoStrings = require("../packages/randostrings.js"); @@ -3211,15 +3212,6 @@ send }); return; } - } else { - renderTemplate(res, req, "./new/mainreactionroles.ejs", { - guild: guild, - alert: `Please Provide me with a valid message ID`, - emojiArray: EmojiArray, - settings: storedSettings, - }); - - return; } const checkEmoji = data.emoji; diff --git a/src/dashboard/templates/appealMain.ejs b/src/dashboard/templates/appealMain.ejs index ff5321e..5af8de2 100644 --- a/src/dashboard/templates/appealMain.ejs +++ b/src/dashboard/templates/appealMain.ejs @@ -99,7 +99,7 @@ body.done .contact-form-title::after { }; - @@ -129,4 +129,4 @@ document.getElementById("form").submit(); - \ No newline at end of file + diff --git a/src/dashboard/templates/maintenance.ejs b/src/dashboard/templates/maintenance.ejs index ec48ebd..21c7116 100644 --- a/src/dashboard/templates/maintenance.ejs +++ b/src/dashboard/templates/maintenance.ejs @@ -2,7 +2,7 @@ -Maintenance +Pogy - Maintenance diff --git a/src/dashboard/templates/partials/mainfooter.ejs b/src/dashboard/templates/partials/mainfooter.ejs index 945bb3c..d9df228 100644 --- a/src/dashboard/templates/partials/mainfooter.ejs +++ b/src/dashboard/templates/partials/mainfooter.ejs @@ -19,7 +19,7 @@