├── .gitignore ├── .replit ├── README.md ├── assets └── skysilk-logo-icon.png ├── index.js ├── package-lock.json ├── package.json ├── remove-commands.js └── replit.nix /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | onBoot="npm install" 2 | run = "npm install && node --no-warnings ." 3 | entrypoint = "index.js" 4 | hidden = [".config", "package-lock.json"] 5 | 6 | [nix] 7 | channel = "stable-21_11" 8 | 9 | [languages] 10 | 11 | [languages.javascript] 12 | pattern = "**/{*.js,*.jsx,*.ts,*.tsx}" 13 | 14 | [languages.javascript.languageServer] 15 | start = "typescript-language-server --stdio" 16 | 17 | [debugger] 18 | support = true 19 | 20 | [debugger.interactive] 21 | transport = "localhost:0" 22 | startCommand = ["dap-node"] 23 | 24 | [debugger.interactive.initializeMessage] 25 | command = "initialize" 26 | type = "request" 27 | 28 | [debugger.interactive.initializeMessage.arguments] 29 | clientID = "replit" 30 | clientName = "replit.com" 31 | columnsStartAt1 = true 32 | linesStartAt1 = true 33 | locale = "en-us" 34 | pathFormat = "path" 35 | supportsInvalidatedEvent = true 36 | supportsProgressReporting = true 37 | supportsRunInTerminalRequest = true 38 | supportsVariablePaging = true 39 | supportsVariableType = true 40 | 41 | [debugger.interactive.launchMessage] 42 | command = "launch" 43 | type = "request" 44 | 45 | [debugger.interactive.launchMessage.arguments] 46 | console = "externalTerminal" 47 | cwd = "." 48 | pauseForSourceMap = false 49 | program = "./index.js" 50 | request = "launch" 51 | sourceMaps = true 52 | stopOnEntry = false 53 | type = "pwa-node" 54 | 55 | # [packager] 56 | # language = "nodejs" 57 | 58 | # [packager.features] 59 | # packageSearch = true 60 | # guessImports = true 61 | # enabledForHosting = false 62 | 63 | # [interpreter] 64 | # command = ["prybar-nodejs", "-q", "--ps1", "\u0001\u001B[33m\u0002\u0001\u001B[00m\u0002 ", "-i"] 65 | 66 | [unitTest] 67 | language = "nodejs" 68 | 69 | [env] 70 | XDG_CONFIG_HOME = "/home/runner/$REPL_SLUG/.config" 71 | PATH = "/home/runner/$REPL_SLUG/.config/npm/node_global/bin:/home/runner/$REPL_SLUG/node_modules/.bin" 72 | npm_config_prefix = "/home/runner/$REPL_SLUG/.config/npm/node_global" 73 | 74 | [gitHubImport] 75 | requiredFiles = [".replit", "replit.nix", ".config", "package.json", "package-lock.json"] 76 | 77 | [[hints]] 78 | regex = 'Error \[ERR_REQUIRE_ESM\]' 79 | message = "We see that you are using require(...) inside your code. We currently do not support this syntax. Please use 'import' instead when using external modules. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)" 80 | 81 | [deployment] 82 | run = ["sh", "-c", "node index.js"] 83 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Active Developer Badge 3 | Discord just launched the new "Active Developer" badge and they're encouraging new developers to join the community and get it. 4 | If you're still learning and want the badge, follow the instructions below! 5 | 6 | 7 | 8 | 9 | -------------------------------------- 10 | 11 | ![image](https://i.imgur.com/z6jzw4C.png) 12 | 13 | -------------------------------------- 14 | 15 | 16 | 17 | # Instructions 18 | 19 | - Go to https://discord.com/developers/applications, and create a new application on the account you want the badge on. 20 | - Go to the bot tab and generate a bot account for the application. 21 | - Click the "Reset Token" button to generate a token (if you have 2fa enabled, you'll need your code). 22 | - Copy the token to your clipboard. 23 | - Click this badge to clone this repo to a new repl in Replit -> [![Run on Repl.it](https://replit.com/badge/github/hackermondev/discord-active-developer-badge)](https://replit.com/new/github/hackermondev/discord-active-developer-badge) 24 | - You will be redirected to Replit, you might have to create an account (you can Register with Google). 25 | - Replit is a website, and does not run off your computer! 26 | - Wait for the repo has finished cloning and the repl to fully connect. 27 | - Click the green "Run" button at the top. 28 | - Go to the console (big black square on the right) and paste in the token you copied earlier (**Note**: ``CTRL + V`` won't work, you'll need to do ``CTRL + Shift + V`` or right-click and click paste). 29 | - Press the 'Enter' key. 30 | - Wait for it to print 'DONE | Application/Bot is up and running. DO NOT CLOSE THIS TAB UNLESS YOU ARE FINISHED USING THE BOT, IT WILL PUT THE BOT OFFLINE.' in the console, **DON'T STOP THE PROGRAM OR CLOSE THE TAB YET OR THE BOT WILL CONSIDERED BY DISCORD AS 'UNRESPONSIVE'** 31 | - Go back to the application page, go to the "General Information" tab, scroll down and copy application id. 32 | - Create a new discord server (you can delete it at the end). 33 | - Enable community on the server (you only need to do this if you don't own any other discord server with community enabled) 34 | - Return back to https://discord.com/developers/applications. 35 | - Copy the application id. 36 | - Use this invite link to add the application to the server: (replace ``{applicationid}`` with what you copied) ``https://discord.com/oauth2/authorize?client_id={applicationid}&scope=bot%20applications.commands&permissions=105227086912`` 37 | - In the server, go to a channel and use the ``/ping`` command on the bot. 38 | - Go to the page and register everything (**if it says you're not eligible, it's because you're not registered in their system yet. you might have to wait up to 24 hours**). 39 | - Congrats on that shiny new badge. 40 | 41 | 42 | **NOTE:** Make sure you have the “Use data to improve Discord” setting enabled under User Settings > Privacy & Safety otherwise you won't be able to be marked as eligible. 43 | 44 | **NOTE 2:** You do not need to keep the Replit tab open 24/7. Only go to the Replit url whenever you want to run your bot. 45 | 46 | If you're encountering any issues, [create a new GitHub issue](https://github.com/hackermondev/discord-active-developer/issues) or join [this](https://discord.gg/M5MSE9CvNM) server and ping me in the `#general` channel. 47 | 48 | 49 | # Star the repo!!! 50 | If you were able to successfully get the badge from this, star this repository so more people can see it and feel free to join our Discord server: https://discord.gg/M5MSE9CvNM 51 | 52 | ### No, it's not "patched" 53 | I've seen a lot of people say that this method has been patched or something. It's not. It still works (people are still getting the badge from it), if you're unable to get the badge after 24 hours of waiting, you probably didn't follow the instructions correctly. 54 | 55 | I think people think this is patched because of NoTextToSpeech's video but that video linked to another repository that works a different way, not this one. 56 | -------------------------------------------------------------------------------- /assets/skysilk-logo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackermondev/discord-active-developer-badge/6c41fbefd48a27c2b838ff196bf7e02a79eba82f/assets/skysilk-logo-icon.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { createInterface } = require('node:readline'); 2 | const { execSync } = require('child_process'); 3 | const fetch = require('node-fetch'); 4 | const { Client, Routes } = require('discord.js'); 5 | 6 | const ping = { 7 | name: 'ping', 8 | description: 'Pings the bot and shows the latency' 9 | }; 10 | 11 | 12 | // Command Example 13 | const command2 = { 14 | name:'command2', 15 | description:'yes' 16 | } 17 | 18 | const commands = [ping, command2]; // Add your commands with commas to add them to the bot! 19 | // Join the Discord for support: https://discord.gg/M5MSE9CvNM 20 | 21 | const client = new Client({ intents: [] }); 22 | const rl = createInterface({ input: process.stdin, output: process.stdout }); 23 | 24 | 25 | client.on('interactionCreate', (interaction) => { 26 | if (interaction.commandName === 'ping') { 27 | interaction.reply(`Latency is ${Date.now() - interaction.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`); 28 | } else if(interaction.commandName === 'command2') { // This is the example command's name! 29 | interaction.reply('example command'); 30 | } else { // a response if you forget to add the command here 31 | interaction.reply('this command\'s response has not been added yet!'); 32 | } 33 | }); 34 | 35 | const question = (q) => new Promise((resolve) => rl.question(q, resolve)); 36 | (async ()=>{ 37 | const token = await question('Application token? '); 38 | if(!token) throw new Error('Invalid token'); 39 | 40 | const ratelimitTest = await fetch(`https://discord.com/api/v9/invites/discord-developers`); 41 | 42 | if(!ratelimitTest.ok) { 43 | await question(`Uh oh, looks like the node you're on is currently being blocked by Discord. Press the "Enter" button on your keyboard to be reassigned to a new node. (you'll need to rerun the program once you reconnect)`) 44 | 45 | // This kills the container manager on the repl forcing Replit to assign the repl to another node with another IP address (if the ip is globally rate limited) 46 | //^ in short: Restarts the bot to be used again/attempted to start up again! 47 | execSync('kill 1'); 48 | return; 49 | }; 50 | 51 | await client.login(token).catch((err) => { 52 | throw err 53 | }); 54 | 55 | await client.rest.put(Routes.applicationCommands(client.user.id), { body: commands }); 56 | 57 | console.log('DONE | Application/Bot is up and running. DO NOT CLOSE THIS TAB UNLESS YOU ARE FINISHED USING THE BOT, IT WILL PUT THE BOT OFFLINE.'); 58 | })(); 59 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-active-developer", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "discord-active-developer", 9 | "version": "0.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "chalk": "^3.0.0", 13 | "console-png": "^1.2.1", 14 | "discord.js": "^14.6.0", 15 | "node-fetch": "^2.6.7", 16 | "readline": "^1.3.0" 17 | } 18 | }, 19 | "node_modules/@discordjs/builders": { 20 | "version": "1.3.0", 21 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.3.0.tgz", 22 | "integrity": "sha512-Pvca6Nw8Hp+n3N+Wp17xjygXmMvggbh5ywUsOYE2Et4xkwwVRwgzxDJiMUuYapPtnYt4w/8aKlf5khc8ipLvhg==", 23 | "dependencies": { 24 | "@discordjs/util": "^0.1.0", 25 | "@sapphire/shapeshift": "^3.7.0", 26 | "discord-api-types": "^0.37.12", 27 | "fast-deep-equal": "^3.1.3", 28 | "ts-mixer": "^6.0.1", 29 | "tslib": "^2.4.0" 30 | }, 31 | "engines": { 32 | "node": ">=16.9.0" 33 | } 34 | }, 35 | "node_modules/@discordjs/collection": { 36 | "version": "1.2.0", 37 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.2.0.tgz", 38 | "integrity": "sha512-VvrrtGb7vbfPHzbhGq9qZB5o8FOB+kfazrxdt0OtxzSkoBuw9dURMkCwWizZ00+rDpiK2HmLHBZX+y6JsG9khw==", 39 | "engines": { 40 | "node": ">=16.9.0" 41 | } 42 | }, 43 | "node_modules/@discordjs/rest": { 44 | "version": "1.3.0", 45 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.3.0.tgz", 46 | "integrity": "sha512-U6X5J+r/MxYpPTlHFuPxXEf92aKsBaD2teBC7sWkKILIr30O8c9+XshfL7KFBCavnAqS/qE+PF9fgRilO3N44g==", 47 | "dependencies": { 48 | "@discordjs/collection": "^1.2.0", 49 | "@discordjs/util": "^0.1.0", 50 | "@sapphire/async-queue": "^1.5.0", 51 | "@sapphire/snowflake": "^3.2.2", 52 | "discord-api-types": "^0.37.12", 53 | "file-type": "^18.0.0", 54 | "tslib": "^2.4.0", 55 | "undici": "^5.11.0" 56 | }, 57 | "engines": { 58 | "node": ">=16.9.0" 59 | } 60 | }, 61 | "node_modules/@discordjs/util": { 62 | "version": "0.1.0", 63 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", 64 | "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", 65 | "engines": { 66 | "node": ">=16.9.0" 67 | } 68 | }, 69 | "node_modules/@sapphire/async-queue": { 70 | "version": "1.5.0", 71 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 72 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", 73 | "engines": { 74 | "node": ">=v14.0.0", 75 | "npm": ">=7.0.0" 76 | } 77 | }, 78 | "node_modules/@sapphire/shapeshift": { 79 | "version": "3.7.0", 80 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.7.0.tgz", 81 | "integrity": "sha512-A6vI1zJoxhjWo4grsxpBRBgk96SqSdjLX5WlzKp9H+bJbkM07mvwcbtbVAmUZHbi/OG3HLfiZ1rlw4BhH6tsBQ==", 82 | "dependencies": { 83 | "fast-deep-equal": "^3.1.3", 84 | "lodash.uniqwith": "^4.5.0" 85 | }, 86 | "engines": { 87 | "node": ">=v14.0.0", 88 | "npm": ">=7.0.0" 89 | } 90 | }, 91 | "node_modules/@sapphire/snowflake": { 92 | "version": "3.2.2", 93 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.2.2.tgz", 94 | "integrity": "sha512-ula2O0kpSZtX9rKXNeQMrHwNd7E4jPDJYUXmEGTFdMRfyfMw+FPyh04oKMjAiDuOi64bYgVkOV3MjK+loImFhQ==", 95 | "engines": { 96 | "node": ">=v14.0.0", 97 | "npm": ">=7.0.0" 98 | } 99 | }, 100 | "node_modules/@tokenizer/token": { 101 | "version": "0.3.0", 102 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 103 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 104 | }, 105 | "node_modules/@types/node": { 106 | "version": "18.11.9", 107 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", 108 | "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" 109 | }, 110 | "node_modules/@types/ws": { 111 | "version": "8.5.3", 112 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", 113 | "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", 114 | "dependencies": { 115 | "@types/node": "*" 116 | } 117 | }, 118 | "node_modules/ansi-256-colors": { 119 | "version": "1.1.0", 120 | "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", 121 | "integrity": "sha512-roJI/AVBdJIhcohHDNXUoFYsCZG4MZIs5HtKNgVKY5QzqQoQJe+o0ouiqZDaSC+ggKdBVcuSwlSdJckrrlm3/A==", 122 | "engines": { 123 | "node": ">=0.10.0" 124 | } 125 | }, 126 | "node_modules/ansi-styles": { 127 | "version": "4.3.0", 128 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 129 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 130 | "dependencies": { 131 | "color-convert": "^2.0.1" 132 | }, 133 | "engines": { 134 | "node": ">=8" 135 | }, 136 | "funding": { 137 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 138 | } 139 | }, 140 | "node_modules/busboy": { 141 | "version": "1.6.0", 142 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 143 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 144 | "dependencies": { 145 | "streamsearch": "^1.1.0" 146 | }, 147 | "engines": { 148 | "node": ">=10.16.0" 149 | } 150 | }, 151 | "node_modules/chalk": { 152 | "version": "3.0.0", 153 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 154 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 155 | "dependencies": { 156 | "ansi-styles": "^4.1.0", 157 | "supports-color": "^7.1.0" 158 | }, 159 | "engines": { 160 | "node": ">=8" 161 | } 162 | }, 163 | "node_modules/color-convert": { 164 | "version": "2.0.1", 165 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 166 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 167 | "dependencies": { 168 | "color-name": "~1.1.4" 169 | }, 170 | "engines": { 171 | "node": ">=7.0.0" 172 | } 173 | }, 174 | "node_modules/color-name": { 175 | "version": "1.1.4", 176 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 177 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 178 | }, 179 | "node_modules/console-png": { 180 | "version": "1.2.1", 181 | "resolved": "https://registry.npmjs.org/console-png/-/console-png-1.2.1.tgz", 182 | "integrity": "sha512-R/y5j2owwSJW4Vi8+qXCkCxVCGwNA82Eo46ukZyM3ArkEU2NYeEwCh38zQE0kjuf+wWL1E3b4+JFcHaLHe1KxA==", 183 | "dependencies": { 184 | "ansi-256-colors": "^1.1.0", 185 | "png.js": "^0.1.1" 186 | }, 187 | "bin": { 188 | "console-png": "bin/index.js" 189 | }, 190 | "engines": { 191 | "node": ">=0.10.0" 192 | } 193 | }, 194 | "node_modules/discord-api-types": { 195 | "version": "0.37.17", 196 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.17.tgz", 197 | "integrity": "sha512-5ZIw1VtkmToBy8ziketjHkZnW1FoLevyXdK/TslNFLozijug2RnB3MyBNtSGzML1c72koU3neeGkvFZ8OiU0tQ==" 198 | }, 199 | "node_modules/discord.js": { 200 | "version": "14.6.0", 201 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.6.0.tgz", 202 | "integrity": "sha512-On1K7xpJZRe0KsziIaDih2ksYPhgxym/ZqV45i1f3yig4vUotikqs7qp5oXiTzQ/UTiNRCixUWFTh7vA1YBCqw==", 203 | "dependencies": { 204 | "@discordjs/builders": "^1.3.0", 205 | "@discordjs/collection": "^1.2.0", 206 | "@discordjs/rest": "^1.3.0", 207 | "@discordjs/util": "^0.1.0", 208 | "@sapphire/snowflake": "^3.2.2", 209 | "@types/ws": "^8.5.3", 210 | "discord-api-types": "^0.37.12", 211 | "fast-deep-equal": "^3.1.3", 212 | "lodash.snakecase": "^4.1.1", 213 | "tslib": "^2.4.0", 214 | "undici": "^5.11.0", 215 | "ws": "^8.9.0" 216 | }, 217 | "engines": { 218 | "node": ">=16.9.0" 219 | } 220 | }, 221 | "node_modules/fast-deep-equal": { 222 | "version": "3.1.3", 223 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 224 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 225 | }, 226 | "node_modules/file-type": { 227 | "version": "18.0.0", 228 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", 229 | "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", 230 | "dependencies": { 231 | "readable-web-to-node-stream": "^3.0.2", 232 | "strtok3": "^7.0.0", 233 | "token-types": "^5.0.1" 234 | }, 235 | "engines": { 236 | "node": ">=14.16" 237 | }, 238 | "funding": { 239 | "url": "https://github.com/sindresorhus/file-type?sponsor=1" 240 | } 241 | }, 242 | "node_modules/has-flag": { 243 | "version": "4.0.0", 244 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 245 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 246 | "engines": { 247 | "node": ">=8" 248 | } 249 | }, 250 | "node_modules/ieee754": { 251 | "version": "1.2.1", 252 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 253 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 254 | "funding": [ 255 | { 256 | "type": "github", 257 | "url": "https://github.com/sponsors/feross" 258 | }, 259 | { 260 | "type": "patreon", 261 | "url": "https://www.patreon.com/feross" 262 | }, 263 | { 264 | "type": "consulting", 265 | "url": "https://feross.org/support" 266 | } 267 | ] 268 | }, 269 | "node_modules/inherits": { 270 | "version": "2.0.4", 271 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 272 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 273 | }, 274 | "node_modules/lodash.snakecase": { 275 | "version": "4.1.1", 276 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 277 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 278 | }, 279 | "node_modules/lodash.uniqwith": { 280 | "version": "4.5.0", 281 | "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", 282 | "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" 283 | }, 284 | "node_modules/node-fetch": { 285 | "version": "2.6.7", 286 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 287 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 288 | "dependencies": { 289 | "whatwg-url": "^5.0.0" 290 | }, 291 | "engines": { 292 | "node": "4.x || >=6.0.0" 293 | }, 294 | "peerDependencies": { 295 | "encoding": "^0.1.0" 296 | }, 297 | "peerDependenciesMeta": { 298 | "encoding": { 299 | "optional": true 300 | } 301 | } 302 | }, 303 | "node_modules/peek-readable": { 304 | "version": "5.0.0", 305 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 306 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", 307 | "engines": { 308 | "node": ">=14.16" 309 | }, 310 | "funding": { 311 | "type": "github", 312 | "url": "https://github.com/sponsors/Borewit" 313 | } 314 | }, 315 | "node_modules/png.js": { 316 | "version": "0.1.1", 317 | "resolved": "https://registry.npmjs.org/png.js/-/png.js-0.1.1.tgz", 318 | "integrity": "sha512-CyKLm+gbh+gF0nXe2yDU1D6JoLsxR0VrychoLknJgo1OF/OZJoJZcJl6PLqh8tzq1CwZ87016Vqb8KeVFQ2kAw==", 319 | "engines": { 320 | "node": "*" 321 | } 322 | }, 323 | "node_modules/readable-stream": { 324 | "version": "3.6.0", 325 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 326 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 327 | "dependencies": { 328 | "inherits": "^2.0.3", 329 | "string_decoder": "^1.1.1", 330 | "util-deprecate": "^1.0.1" 331 | }, 332 | "engines": { 333 | "node": ">= 6" 334 | } 335 | }, 336 | "node_modules/readable-web-to-node-stream": { 337 | "version": "3.0.2", 338 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 339 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 340 | "dependencies": { 341 | "readable-stream": "^3.6.0" 342 | }, 343 | "engines": { 344 | "node": ">=8" 345 | }, 346 | "funding": { 347 | "type": "github", 348 | "url": "https://github.com/sponsors/Borewit" 349 | } 350 | }, 351 | "node_modules/readline": { 352 | "version": "1.3.0", 353 | "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", 354 | "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" 355 | }, 356 | "node_modules/safe-buffer": { 357 | "version": "5.2.1", 358 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 359 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 360 | "funding": [ 361 | { 362 | "type": "github", 363 | "url": "https://github.com/sponsors/feross" 364 | }, 365 | { 366 | "type": "patreon", 367 | "url": "https://www.patreon.com/feross" 368 | }, 369 | { 370 | "type": "consulting", 371 | "url": "https://feross.org/support" 372 | } 373 | ] 374 | }, 375 | "node_modules/streamsearch": { 376 | "version": "1.1.0", 377 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 378 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 379 | "engines": { 380 | "node": ">=10.0.0" 381 | } 382 | }, 383 | "node_modules/string_decoder": { 384 | "version": "1.3.0", 385 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 386 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 387 | "dependencies": { 388 | "safe-buffer": "~5.2.0" 389 | } 390 | }, 391 | "node_modules/strtok3": { 392 | "version": "7.0.0", 393 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 394 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 395 | "dependencies": { 396 | "@tokenizer/token": "^0.3.0", 397 | "peek-readable": "^5.0.0" 398 | }, 399 | "engines": { 400 | "node": ">=14.16" 401 | }, 402 | "funding": { 403 | "type": "github", 404 | "url": "https://github.com/sponsors/Borewit" 405 | } 406 | }, 407 | "node_modules/supports-color": { 408 | "version": "7.2.0", 409 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 410 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 411 | "dependencies": { 412 | "has-flag": "^4.0.0" 413 | }, 414 | "engines": { 415 | "node": ">=8" 416 | } 417 | }, 418 | "node_modules/token-types": { 419 | "version": "5.0.1", 420 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 421 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 422 | "dependencies": { 423 | "@tokenizer/token": "^0.3.0", 424 | "ieee754": "^1.2.1" 425 | }, 426 | "engines": { 427 | "node": ">=14.16" 428 | }, 429 | "funding": { 430 | "type": "github", 431 | "url": "https://github.com/sponsors/Borewit" 432 | } 433 | }, 434 | "node_modules/tr46": { 435 | "version": "0.0.3", 436 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 437 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 438 | }, 439 | "node_modules/ts-mixer": { 440 | "version": "6.0.2", 441 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", 442 | "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" 443 | }, 444 | "node_modules/tslib": { 445 | "version": "2.4.1", 446 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 447 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 448 | }, 449 | "node_modules/undici": { 450 | "version": "5.20.0", 451 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", 452 | "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", 453 | "dependencies": { 454 | "busboy": "^1.6.0" 455 | }, 456 | "engines": { 457 | "node": ">=12.18" 458 | } 459 | }, 460 | "node_modules/util-deprecate": { 461 | "version": "1.0.2", 462 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 463 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 464 | }, 465 | "node_modules/webidl-conversions": { 466 | "version": "3.0.1", 467 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 468 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 469 | }, 470 | "node_modules/whatwg-url": { 471 | "version": "5.0.0", 472 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 473 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 474 | "dependencies": { 475 | "tr46": "~0.0.3", 476 | "webidl-conversions": "^3.0.0" 477 | } 478 | }, 479 | "node_modules/ws": { 480 | "version": "8.11.0", 481 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 482 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 483 | "engines": { 484 | "node": ">=10.0.0" 485 | }, 486 | "peerDependencies": { 487 | "bufferutil": "^4.0.1", 488 | "utf-8-validate": "^5.0.2" 489 | }, 490 | "peerDependenciesMeta": { 491 | "bufferutil": { 492 | "optional": true 493 | }, 494 | "utf-8-validate": { 495 | "optional": true 496 | } 497 | } 498 | } 499 | }, 500 | "dependencies": { 501 | "@discordjs/builders": { 502 | "version": "1.3.0", 503 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.3.0.tgz", 504 | "integrity": "sha512-Pvca6Nw8Hp+n3N+Wp17xjygXmMvggbh5ywUsOYE2Et4xkwwVRwgzxDJiMUuYapPtnYt4w/8aKlf5khc8ipLvhg==", 505 | "requires": { 506 | "@discordjs/util": "^0.1.0", 507 | "@sapphire/shapeshift": "^3.7.0", 508 | "discord-api-types": "^0.37.12", 509 | "fast-deep-equal": "^3.1.3", 510 | "ts-mixer": "^6.0.1", 511 | "tslib": "^2.4.0" 512 | } 513 | }, 514 | "@discordjs/collection": { 515 | "version": "1.2.0", 516 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.2.0.tgz", 517 | "integrity": "sha512-VvrrtGb7vbfPHzbhGq9qZB5o8FOB+kfazrxdt0OtxzSkoBuw9dURMkCwWizZ00+rDpiK2HmLHBZX+y6JsG9khw==" 518 | }, 519 | "@discordjs/rest": { 520 | "version": "1.3.0", 521 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.3.0.tgz", 522 | "integrity": "sha512-U6X5J+r/MxYpPTlHFuPxXEf92aKsBaD2teBC7sWkKILIr30O8c9+XshfL7KFBCavnAqS/qE+PF9fgRilO3N44g==", 523 | "requires": { 524 | "@discordjs/collection": "^1.2.0", 525 | "@discordjs/util": "^0.1.0", 526 | "@sapphire/async-queue": "^1.5.0", 527 | "@sapphire/snowflake": "^3.2.2", 528 | "discord-api-types": "^0.37.12", 529 | "file-type": "^18.0.0", 530 | "tslib": "^2.4.0", 531 | "undici": "^5.11.0" 532 | } 533 | }, 534 | "@discordjs/util": { 535 | "version": "0.1.0", 536 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", 537 | "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" 538 | }, 539 | "@sapphire/async-queue": { 540 | "version": "1.5.0", 541 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 542 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" 543 | }, 544 | "@sapphire/shapeshift": { 545 | "version": "3.7.0", 546 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.7.0.tgz", 547 | "integrity": "sha512-A6vI1zJoxhjWo4grsxpBRBgk96SqSdjLX5WlzKp9H+bJbkM07mvwcbtbVAmUZHbi/OG3HLfiZ1rlw4BhH6tsBQ==", 548 | "requires": { 549 | "fast-deep-equal": "^3.1.3", 550 | "lodash.uniqwith": "^4.5.0" 551 | } 552 | }, 553 | "@sapphire/snowflake": { 554 | "version": "3.2.2", 555 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.2.2.tgz", 556 | "integrity": "sha512-ula2O0kpSZtX9rKXNeQMrHwNd7E4jPDJYUXmEGTFdMRfyfMw+FPyh04oKMjAiDuOi64bYgVkOV3MjK+loImFhQ==" 557 | }, 558 | "@tokenizer/token": { 559 | "version": "0.3.0", 560 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 561 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 562 | }, 563 | "@types/node": { 564 | "version": "18.11.9", 565 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", 566 | "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" 567 | }, 568 | "@types/ws": { 569 | "version": "8.5.3", 570 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", 571 | "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", 572 | "requires": { 573 | "@types/node": "*" 574 | } 575 | }, 576 | "ansi-256-colors": { 577 | "version": "1.1.0", 578 | "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", 579 | "integrity": "sha512-roJI/AVBdJIhcohHDNXUoFYsCZG4MZIs5HtKNgVKY5QzqQoQJe+o0ouiqZDaSC+ggKdBVcuSwlSdJckrrlm3/A==" 580 | }, 581 | "ansi-styles": { 582 | "version": "4.3.0", 583 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 584 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 585 | "requires": { 586 | "color-convert": "^2.0.1" 587 | } 588 | }, 589 | "busboy": { 590 | "version": "1.6.0", 591 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 592 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 593 | "requires": { 594 | "streamsearch": "^1.1.0" 595 | } 596 | }, 597 | "chalk": { 598 | "version": "3.0.0", 599 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 600 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 601 | "requires": { 602 | "ansi-styles": "^4.1.0", 603 | "supports-color": "^7.1.0" 604 | } 605 | }, 606 | "color-convert": { 607 | "version": "2.0.1", 608 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 609 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 610 | "requires": { 611 | "color-name": "~1.1.4" 612 | } 613 | }, 614 | "color-name": { 615 | "version": "1.1.4", 616 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 617 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 618 | }, 619 | "console-png": { 620 | "version": "1.2.1", 621 | "resolved": "https://registry.npmjs.org/console-png/-/console-png-1.2.1.tgz", 622 | "integrity": "sha512-R/y5j2owwSJW4Vi8+qXCkCxVCGwNA82Eo46ukZyM3ArkEU2NYeEwCh38zQE0kjuf+wWL1E3b4+JFcHaLHe1KxA==", 623 | "requires": { 624 | "ansi-256-colors": "^1.1.0", 625 | "png.js": "^0.1.1" 626 | } 627 | }, 628 | "discord-api-types": { 629 | "version": "0.37.17", 630 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.17.tgz", 631 | "integrity": "sha512-5ZIw1VtkmToBy8ziketjHkZnW1FoLevyXdK/TslNFLozijug2RnB3MyBNtSGzML1c72koU3neeGkvFZ8OiU0tQ==" 632 | }, 633 | "discord.js": { 634 | "version": "14.6.0", 635 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.6.0.tgz", 636 | "integrity": "sha512-On1K7xpJZRe0KsziIaDih2ksYPhgxym/ZqV45i1f3yig4vUotikqs7qp5oXiTzQ/UTiNRCixUWFTh7vA1YBCqw==", 637 | "requires": { 638 | "@discordjs/builders": "^1.3.0", 639 | "@discordjs/collection": "^1.2.0", 640 | "@discordjs/rest": "^1.3.0", 641 | "@discordjs/util": "^0.1.0", 642 | "@sapphire/snowflake": "^3.2.2", 643 | "@types/ws": "^8.5.3", 644 | "discord-api-types": "^0.37.12", 645 | "fast-deep-equal": "^3.1.3", 646 | "lodash.snakecase": "^4.1.1", 647 | "tslib": "^2.4.0", 648 | "undici": "^5.11.0", 649 | "ws": "^8.9.0" 650 | } 651 | }, 652 | "fast-deep-equal": { 653 | "version": "3.1.3", 654 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 655 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 656 | }, 657 | "file-type": { 658 | "version": "18.0.0", 659 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", 660 | "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", 661 | "requires": { 662 | "readable-web-to-node-stream": "^3.0.2", 663 | "strtok3": "^7.0.0", 664 | "token-types": "^5.0.1" 665 | } 666 | }, 667 | "has-flag": { 668 | "version": "4.0.0", 669 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 670 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 671 | }, 672 | "ieee754": { 673 | "version": "1.2.1", 674 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 675 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 676 | }, 677 | "inherits": { 678 | "version": "2.0.4", 679 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 680 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 681 | }, 682 | "lodash.snakecase": { 683 | "version": "4.1.1", 684 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 685 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 686 | }, 687 | "lodash.uniqwith": { 688 | "version": "4.5.0", 689 | "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", 690 | "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" 691 | }, 692 | "node-fetch": { 693 | "version": "2.6.7", 694 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 695 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 696 | "requires": { 697 | "whatwg-url": "^5.0.0" 698 | } 699 | }, 700 | "peek-readable": { 701 | "version": "5.0.0", 702 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 703 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" 704 | }, 705 | "png.js": { 706 | "version": "0.1.1", 707 | "resolved": "https://registry.npmjs.org/png.js/-/png.js-0.1.1.tgz", 708 | "integrity": "sha512-CyKLm+gbh+gF0nXe2yDU1D6JoLsxR0VrychoLknJgo1OF/OZJoJZcJl6PLqh8tzq1CwZ87016Vqb8KeVFQ2kAw==" 709 | }, 710 | "readable-stream": { 711 | "version": "3.6.0", 712 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 713 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 714 | "requires": { 715 | "inherits": "^2.0.3", 716 | "string_decoder": "^1.1.1", 717 | "util-deprecate": "^1.0.1" 718 | } 719 | }, 720 | "readable-web-to-node-stream": { 721 | "version": "3.0.2", 722 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 723 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 724 | "requires": { 725 | "readable-stream": "^3.6.0" 726 | } 727 | }, 728 | "readline": { 729 | "version": "1.3.0", 730 | "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", 731 | "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" 732 | }, 733 | "safe-buffer": { 734 | "version": "5.2.1", 735 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 736 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 737 | }, 738 | "streamsearch": { 739 | "version": "1.1.0", 740 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 741 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" 742 | }, 743 | "string_decoder": { 744 | "version": "1.3.0", 745 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 746 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 747 | "requires": { 748 | "safe-buffer": "~5.2.0" 749 | } 750 | }, 751 | "strtok3": { 752 | "version": "7.0.0", 753 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 754 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 755 | "requires": { 756 | "@tokenizer/token": "^0.3.0", 757 | "peek-readable": "^5.0.0" 758 | } 759 | }, 760 | "supports-color": { 761 | "version": "7.2.0", 762 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 763 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 764 | "requires": { 765 | "has-flag": "^4.0.0" 766 | } 767 | }, 768 | "token-types": { 769 | "version": "5.0.1", 770 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 771 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 772 | "requires": { 773 | "@tokenizer/token": "^0.3.0", 774 | "ieee754": "^1.2.1" 775 | } 776 | }, 777 | "tr46": { 778 | "version": "0.0.3", 779 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 780 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 781 | }, 782 | "ts-mixer": { 783 | "version": "6.0.2", 784 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", 785 | "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" 786 | }, 787 | "tslib": { 788 | "version": "2.4.1", 789 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 790 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 791 | }, 792 | "undici": { 793 | "version": "5.20.0", 794 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", 795 | "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", 796 | "requires": { 797 | "busboy": "^1.6.0" 798 | } 799 | }, 800 | "util-deprecate": { 801 | "version": "1.0.2", 802 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 803 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 804 | }, 805 | "webidl-conversions": { 806 | "version": "3.0.1", 807 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 808 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 809 | }, 810 | "whatwg-url": { 811 | "version": "5.0.0", 812 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 813 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 814 | "requires": { 815 | "tr46": "~0.0.3", 816 | "webidl-conversions": "^3.0.0" 817 | } 818 | }, 819 | "ws": { 820 | "version": "8.11.0", 821 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 822 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 823 | "requires": {} 824 | } 825 | } 826 | } 827 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-active-developer", 3 | "main": "index.js", 4 | "private": true, 5 | "version": "0.0.0", 6 | "description": "Discord just launched the new \"Active Developer\" badge and they're encouraging new developers to join the community and get it. If you're still learning and want the badge, follow the instructions below!", 7 | "main": "app.js", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/hackermondev/discord-active-developer.git" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/hackermondev/discord-active-developer/issues" 17 | }, 18 | "homepage": "https://github.com/hackermondev/discord-active-developer#readme", 19 | "dependencies": { 20 | "chalk": "^3.0.0", 21 | "console-png": "^1.2.1", 22 | "discord.js": "^14.6.0", 23 | "node-fetch": "^2.6.7", 24 | "readline": "^1.3.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /remove-commands.js: -------------------------------------------------------------------------------- 1 | const { createInterface } = require('node:readline'); 2 | const { Client, Routes } = require('discord.js'); 3 | const commandNames = ['ping', 'command2', 'command3', 'command4']; 4 | 5 | const client = new Client({ intents: [] }); 6 | const rl = createInterface({ input: process.stdin, output: process.stdout }); 7 | 8 | const question = (q) => new Promise((resolve) => rl.question(q, resolve)); 9 | (async ()=>{ 10 | const token = await question('Application token? '); 11 | 12 | await client.login(token); 13 | const commands = await client.rest.get(Routes.applicationCommands(client.user.id)); 14 | 15 | const toBeRemoved = commands.filter((c) => commandNames.includes(c.name)); 16 | 17 | console.log('removing', toBeRemoved); 18 | for (let i = 0; i < toBeRemoved.length; i++) { 19 | const command = toBeRemoved[i]; 20 | await client.rest.delete(`/applications/${client.user.id}/commands/${command.id}`); 21 | 22 | console.log('removed', command.id, command.name); 23 | }; 24 | 25 | console.log('done'); 26 | process.exit(); 27 | })(); 28 | -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [pkgs.nodejs-16_x 3 | 4 | 5 | ]; 6 | } --------------------------------------------------------------------------------