├── README.md ├── config.json ├── installrequirements.bat ├── proxies.txt ├── radraveraid.py ├── requirements.txt ├── screenie.png └── tokens.txt /README.md: -------------------------------------------------------------------------------- 1 | # RadRaveRaid 2 | A Discord Raiding Tool written in python. 3 | - Current Version: 1.8 4 | 5 | ![](https://raw.githubusercontent.com/riaaaaaaaa/RadRaveRaid/master/screenie.png) 6 | 7 | ## Requirements 8 | - Python 3.8 9 | - colorama, requests, selenium, websocket 10 | 11 | ## Config Setup 12 | - If 'useproxy' is set to true requests will use proxies gathered from proxies.txt 13 | - threadcap is the max amount of workers assigned to a threadpool 14 | 15 | ## To-Do 16 | - Add verification bypass (Captcha-bot solver and automatic emoji react) for bigger servers. 17 | - Token Customization (Change name and profile pictures on the fly) 18 | - Add token generator (COMING VERY SOON) 19 | - Add proxy checker 20 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "BotConfig":{ 3 | "useproxy":false, 4 | "threadcap":800 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /installrequirements.bat: -------------------------------------------------------------------------------- 1 | py -3.8 -m pip install -r requirements.txt 2 | pause -------------------------------------------------------------------------------- /proxies.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /radraveraid.py: -------------------------------------------------------------------------------- 1 | # coding=utf8 2 | class INIT: 3 | __version__ = 1.8 4 | 5 | import json,requests,os,time,random,ctypes,selenium,websocket,sys 6 | from concurrent.futures import ThreadPoolExecutor 7 | from colorama import Fore 8 | req = requests.Session() 9 | 10 | with open("config.json", encoding='utf-8', errors='ignore') as f: 11 | configdata = json.load(f, strict=False) 12 | config = configdata["BotConfig"] 13 | 14 | tokens = open('tokens.txt','r').read().splitlines() 15 | proxies = open('proxies.txt','r').read().splitlines() 16 | proxies = [{'https':'http://'+proxy} for proxy in proxies] 17 | 18 | executor = ThreadPoolExecutor(max_workers=config["threadcap"]) 19 | 20 | def Setup(): 21 | ctypes.windll.kernel32.SetConsoleTitleW(f'[RadRaveRaid v{INIT.__version__}] | By Fawful') 22 | counttokens = len(open('tokens.txt').readlines()) 23 | countproxies = len(open('proxies.txt').readlines()) 24 | 25 | print(f'''{Fore.RESET} {Fore.MAGENTA} ____ __{Fore.RESET}{Fore.CYAN} ____ {Fore.RESET}{Fore.RED} ____ _ __{Fore.RESET} 26 | {Fore.MAGENTA} / __ \____ _____/ /{Fore.RESET}{Fore.CYAN} / __ \____ __ _____ {Fore.RESET}{Fore.RED} / __ \____ _(_)___/ /{Fore.RESET} 27 | {Fore.MAGENTA} / /_/ / __ `/ __ / {Fore.RESET}{Fore.CYAN} / /_/ / __ `/ | / / _ \{Fore.RESET}{Fore.RED} / /_/ / __ `/ / __ / {Fore.RESET} 28 | {Fore.MAGENTA} / _, _/ /_/ / /_/ / {Fore.RESET}{Fore.CYAN}/ _, _/ /_/ /| |/ / __/{Fore.RESET}{Fore.RED} / _, _/ /_/ / / /_/ / {Fore.RESET} 29 | {Fore.MAGENTA}/_/ |_|\__,_/\__,_/ {Fore.RESET}{Fore.CYAN}/_/ |_|\__,_/ |___/\___/ {Fore.RESET}{Fore.RED} /_/ |_|\__,_/_/\__,_/ {Fore.RESET} 30 | 31 | 32 | {Fore.CYAN}RadRaveRaid {INIT.__version__} {Fore.RESET}| Because fuck you 33 | {Fore.CYAN}Type {Fore.RESET}"help"{Fore.CYAN} for a list of commands 34 | {Fore.GREEN}{counttokens}{Fore.RESET}{Fore.CYAN} tokens loaded! 35 | {Fore.GREEN}{countproxies}{Fore.RESET}{Fore.CYAN} proxies loaded! 36 | {Fore.MAGENTA}Created by {Fore.RESET}Fawful | {Fore.CYAN}Special thx to {Fore.RESET}Humble#8292{Fore.CYAN}, {Fore.RED}RaidToolBox{Fore.CYAN}, and {Fore.YELLOW}h0nda 37 | {Fore.MAGENTA}https://github.com/{Fore.RESET}riaaaaaaaa 38 | ''' + Fore.RESET) 39 | 40 | def Help(): 41 | print(f'''{Fore.RESET}{Fore.RED} -- Commands are seperated by commas --{Fore.RESET} 42 | 43 | {Fore.CYAN}join >> (invite) | {Fore.RESET}Joins all your tokens to the server using the specified invite. 44 | {Fore.CYAN}leave >> (serverid) | {Fore.RESET}Joins all your tokens to the server using the specified invite. 45 | {Fore.CYAN}bringonline | {Fore.RESET}Brings all of your tokens online {Fore.RED}* 46 | {Fore.CYAN}spam >> (channelid) (amount) (message) | {Fore.RESET}Spams the given channel any amount of times. Tokens must already be in server. 47 | {Fore.CYAN}friend >> (username#discrimanator) | {Fore.RESET}Makes all your tokens send a friend request to your target. {Fore.RED}* 48 | {Fore.CYAN}dm >> (userid) (amount) (message) | {Fore.RESET}Makes all your tokens DM the given ID. {Fore.RED}* 49 | {Fore.CYAN}check-tokens | {Fore.RESET}Checks all of your tokens to see if they are valid. 50 | {Fore.CYAN}scrape-proxies | {Fore.RESET}Scrapes HTTP proxies from proxyscrape.com and writes them to proxies.txt. 51 | {Fore.CYAN}reset | {Fore.RESET}Resets the console. 52 | 53 | {Fore.RED}* LIKELY TO LOCK UNVERIFIED TOKENS, USE WITH CAUTION 54 | ''' + Fore.RESET) 55 | Start() 56 | 57 | def Scrape(): 58 | print(f"[{Fore.GREEN}+{Fore.RESET}] Scraping proxies...") 59 | try: 60 | res = requests.get('https://api.proxyscrape.com/?request=displayproxies&proxytype=http&timeout=1500') 61 | file = open("proxies.txt", "a+") 62 | file.seek(0) 63 | file.truncate() 64 | proxies = [] 65 | for proxy in res.text.split('\n'): 66 | proxy = proxy.strip() 67 | if proxy: 68 | proxies.append(proxy) 69 | for p in proxies: 70 | file.write((p)+"\n") 71 | file.close() 72 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 73 | except Exception as e: 74 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 75 | Start() 76 | 77 | def Join(invite): 78 | try: 79 | print(f"[{Fore.GREEN}+{Fore.RESET}] Joining...") 80 | inv = invite.replace("https://discord.gg/","") 81 | if config["useproxy"] == True: 82 | for tok in tokens: 83 | proxy = random.choice(proxies) 84 | r = req.post(f'https://discord.com/api/v8/invites/{inv}', headers = {'Authorization': tok}, proxies = proxy) 85 | else: 86 | for tok in tokens: 87 | r = req.post(f'https://discord.com/api/v8/invites/{inv}', headers = {'Authorization': tok}) 88 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 89 | except Exception as e: 90 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 91 | Start() 92 | 93 | def Leave(serverid): 94 | try: 95 | print(f"[{Fore.GREEN}+{Fore.RESET}] Leaving...") 96 | if config["useproxy"] == True: 97 | for tok in tokens: 98 | proxy = random.choice(proxies) 99 | r = req.delete(f'https://discord.com/api/v8/users/@me/guilds/{serverid}', headers = {'Authorization': tok}, proxies = proxy) 100 | else: 101 | for tok in tokens: 102 | r = req.delete(f'https://discord.com/api/v8/users/@me/guilds/{serverid}', headers = {'Authorization': tok}) 103 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 104 | except Exception as e: 105 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 106 | Start() 107 | 108 | def Friend(target): 109 | try: 110 | print(f"[{Fore.GREEN}+{Fore.RESET}] Friending...") 111 | tartag = target.split('#') 112 | name = tartag[0] 113 | discrim = tartag[1] 114 | if config["useproxy"] == True: 115 | for tok in tokens: 116 | proxy = random.choice(proxies) 117 | r = req.post(f'https://discordapp.com/api/v8/users/@me/relationships', headers = {'Authorization': tok}, json = {'username':name,'discriminator':discrim}, proxies = proxy) 118 | else: 119 | for tok in tokens: 120 | proxy = random.choice(proxies) 121 | r = req.post(f'https://discordapp.com/api/v8/users/@me/relationships', headers = {'Authorization': tok}, json = {'username':name,'discriminator':discrim}) 122 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 123 | except Exception as e: 124 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 125 | Start() 126 | 127 | def DM(tid,amount,message): 128 | try: 129 | print(f"[{Fore.GREEN}+{Fore.RESET}] Spamming...") 130 | if config["useproxy"] == True: 131 | for _ in range(int(amount)): 132 | for tok in tokens: 133 | proxy = random.choice(proxies) 134 | r = req.post(f'https://discordapp.com/api/v8/users/@me/channels', headers = {'Authorization': tok}, json = {'recipient_id':tid}, proxies = proxy).json() 135 | r2 = req.post(f"https://discordapp.com/api/v8/channels/{r['id']}/messages", headers = {'Authorization': tok}, json = {'content': message,'nonce':'','tts':False}, proxies = proxy) 136 | else: 137 | for _ in range(int(amount)): 138 | for tok in tokens: 139 | r = req.post(f'https://discordapp.com/api/v8/users/@me/channels', headers = {'Authorization': tok}, json = {'recipient_id':tid}).json() 140 | r2 = req.post(f"https://discordapp.com/api/v8/channels/{r['id']}/messages", headers = {'Authorization': tok}, json = {'content': message,'nonce':'','tts':False}) 141 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 142 | except Exception as e: 143 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 144 | Start() 145 | 146 | def Spam(channel,amount,message): 147 | try: 148 | print(f"[{Fore.GREEN}+{Fore.RESET}] Spamming...") 149 | if config["useproxy"] == True: 150 | for _ in range(int(amount)): 151 | for tok in tokens: 152 | proxy = random.choice(proxies) 153 | r = req.post(f'https://discordapp.com/api/v8/channels/{channel}/messages', headers = {'Authorization': tok}, json = {'content': message,'nonce':'','tts':False}, proxies = proxy) 154 | else: 155 | for _ in range(int(amount)): 156 | for tok in tokens: 157 | r = req.post(f'https://discordapp.com/api/v8/channels/{channel}/messages', headers = {'Authorization': tok}, json = {'content': message,'nonce':'','tts':False}) 158 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 159 | except Exception as e: 160 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 161 | Start() 162 | 163 | def Check(): 164 | print(f"[{Fore.GREEN}+{Fore.RESET}] Checking...") 165 | try: 166 | file = open("tokens.txt", "w") 167 | file.seek(0) 168 | file.truncate() 169 | working = [] 170 | if config["useproxy"] == True: 171 | for tok in tokens: 172 | proxy = random.choice(proxies) 173 | r = req.get(f'https://discord.com/api/v8/users/@me', headers = {'authorization':tok}, proxies = proxy) 174 | if r.status_code == 200: 175 | working.append(tok) 176 | for t in working: 177 | file.write((t)+"\n") 178 | else: 179 | for tok in tokens: 180 | r = req.get(f'https://discord.com/api/v8/users/@me', headers = {'authorization':tok}) 181 | if r.status_code == 200: 182 | working.append(tok) 183 | for t in working: 184 | file.write((t)+"\n") 185 | file.close() 186 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 187 | except Exception as e: 188 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 189 | Start() 190 | 191 | def StausChange(tok): 192 | ws = websocket.WebSocket() 193 | ws.connect('wss://gateway.discord.gg/?v=6&encoding=json') 194 | hello = json.loads(ws.recv()) 195 | heartbeat_interval = hello['d']['heartbeat_interval'] 196 | auth = { 197 | "op": 2, 198 | "d": { 199 | "token": tok, 200 | "properties": { 201 | "$os": sys.platform, 202 | "$browser": "RTB", 203 | "$device": f"{sys.platform} Device" 204 | }, 205 | "presence": { 206 | "status": "online", 207 | "since": 0, 208 | "afk": False 209 | } 210 | }, 211 | "s": None, 212 | "t": None 213 | } 214 | ws.send(json.dumps(auth)) 215 | ack = { 216 | "op": 1, 217 | "d": None 218 | } 219 | while True: 220 | time.sleep(heartbeat_interval/1000) 221 | try: 222 | ws.send(json.dumps(ack)) 223 | except Exception: 224 | break 225 | 226 | def BringOnline(): 227 | try: 228 | print(f"[{Fore.GREEN}+{Fore.RESET}] Bringing online...") 229 | for tok in tokens: 230 | executor.submit(StausChange,tok) 231 | print(f"[{Fore.GREEN}+{Fore.RESET}] Finished!") 232 | except Exception as e: 233 | print(f"{Fore.YELLOW}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 234 | Start() 235 | 236 | def Clear(): 237 | os.system('cls') 238 | 239 | def Start(): 240 | command = list(input('').split(',')) 241 | if command[0] == 'help': 242 | Help() 243 | elif command[0] == 'scrape-proxies': 244 | Scrape() 245 | elif command[0] == 'check-tokens': 246 | Check() 247 | elif command[0] == 'spam': 248 | channel = command[1] 249 | amount = command[2] 250 | message = command[3] 251 | Spam(channel,amount,message) 252 | elif command[0] == 'dm': 253 | target = command[1] 254 | amount = command[2] 255 | message = command[3] 256 | DM(target,amount,message) 257 | elif command[0] == 'friend': 258 | target = command[1] 259 | Friend(target) 260 | elif command[0] == 'reset': 261 | Clear() 262 | Setup() 263 | Start() 264 | elif command[0] == 'join': 265 | invite = command[1] 266 | Join(invite) 267 | elif command[0] == 'bringonline': 268 | BringOnline() 269 | elif command[0] == 'leave': 270 | serverid = command[1] 271 | Leave(serverid) 272 | else: 273 | print(f'{Fore.YELLOW}Invalid Command, type "help" for a list of valid commands.'+Fore.RESET) 274 | Start() 275 | 276 | if __name__ == '__main__': 277 | try: 278 | Clear() 279 | Setup() 280 | Start() 281 | except Exception as e: 282 | print(f"{Fore.RED}[ERROR]: {Fore.YELLOW}{e}"+Fore.RESET) 283 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | colorama 2 | requests 3 | selenium 4 | websocket 5 | -------------------------------------------------------------------------------- /screenie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/riaaaaaaaa/RadRaveRaid/443e1dc211bbb5c46defcd1be6e184d2ea949cd1/screenie.png -------------------------------------------------------------------------------- /tokens.txt: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------