├── README.md └── main.py /README.md: -------------------------------------------------------------------------------- 1 | # Discord-Account-Backup-Bot 2 | Automatically saves your Discord friends, servers and loads them.
3 | This could be useful as Discord can ban you at any time, for any unreliable reason. 4 | 5 | **4 features:** 6 | 1. Save friends 7 | 2. Save servers (creates a permanent invite link for all servers) 8 | 3. Add saved friends 9 | 4. Join saved servers 10 | 11 | ![](https://i.imgur.com/kLMzy7Y.png) 12 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import requests, random, time, sys, os 2 | 3 | token = '' # Your Discord token. 4 | 5 | def save_friends(): 6 | saved_friends = 0 7 | 8 | friends = requests.get('https://discord.com/api/v6/users/@me/relationships', headers = headers) 9 | for friend in friends.json(): 10 | if friend['type'] == 1: 11 | username = 'Username: %s#%s | User ID: %s\n' % (friend['user']['username'], friend['user']['discriminator'], friend['id']) 12 | sys.stdout.write(username) 13 | with open('Discord Friends.txt', 'a', encoding = 'UTF-8') as f: 14 | f.write(username) 15 | saved_friends += 1 16 | 17 | with open('Discord Friends.txt', 'r', encoding = 'UTF-8') as f: 18 | fixed = f.read()[:-1] 19 | with open('Discord Friends.txt', 'w', encoding = 'UTF-8') as f: 20 | f.write(fixed) 21 | 22 | sys.stdout.write('\n> Successfully saved all %s Discord friends.\n\n' % (saved_friends)) 23 | 24 | def save_servers(): 25 | saved_servers = 0 26 | attempts = 0 27 | server_info_all = '' 28 | 29 | servers = requests.get('https://discordapp.com/api/v6/users/@me/guilds', headers = headers) 30 | for server in servers.json(): 31 | server_info_all += '%s|||%s\n' % (server['id'], server['name']) 32 | 33 | payload = { 34 | 'max_age': '0', 35 | 'max_uses': '0', 36 | 'temporary': False 37 | } 38 | 39 | for server_info in server_info_all.splitlines(): 40 | server_id = server_info.split('|||')[0] 41 | server_name = server_info.split('|||')[1] 42 | 43 | channels = requests.get('https://discord.com/api/v6/guilds/%s/channels' % (server_id), headers = headers) 44 | for channel in channels.json(): 45 | if channel['type'] == 0: 46 | channel_id = channel['id'] 47 | invite = requests.post('https://discord.com/api/v6/channels/%s/invites' % (channel_id), json = payload, headers = headers) 48 | 49 | if invite.status_code == 403: 50 | attempts += 1 51 | sys.stdout.write('Discord Server: %s | Channel ID: %s | Retrying . . .\n' % (server_name, channel_id)) 52 | if attempts == 5: 53 | sys.stdout.write('%s has a Vanity URL.\n' % (server_name)) 54 | with open('Discord Servers.txt', 'a', encoding = 'UTF-8') as f: 55 | f.write('Discord Server: %s | Vanity URL\n' % (server_name)) 56 | saved_servers += 1 57 | attempts = 0 58 | break 59 | else: 60 | pass 61 | time.sleep(4) 62 | 63 | elif invite.status_code == 429: 64 | sys.stdout.write('Rate limited.\n') 65 | time.sleep(9) 66 | 67 | else: 68 | invite_url = 'https://discord.gg/%s' % (str(invite.json()['code'])) 69 | sys.stdout.write('Discord Server: %s | Invite Link: %s\n' % (server_name, invite_url)) 70 | with open('Discord Servers.txt', 'a', encoding = 'UTF-8') as f: 71 | f.write('Discord Server: %s | Channel ID: %s | Invite Link: %s\n' % (server_name, channel_id, invite_url)) 72 | saved_servers += 1 73 | time.sleep(4) 74 | break 75 | 76 | sys.stdout.write('\n> Successfully saved all %s Discord servers.\n\n' % (saved_servers)) 77 | 78 | def add_friends(): 79 | added_friends = 0 80 | 81 | if os.path.exists('Discord Friends.txt'): 82 | with open('Discord Friends.txt', 'r', encoding = 'UTF-8') as f: 83 | for line in f.readlines(): 84 | while True: 85 | try: 86 | line = line.replace('\n', '') 87 | user_id = line.split('User ID: ')[1] 88 | user_name = line.split(' |')[0] 89 | except IndexError: 90 | sys.stdout.write('Invalid syntax at line: %s\n' % (line)) 91 | break 92 | 93 | add = requests.put('https://discord.com/api/v6/users/@me/relationships/%s' % (user_id), json = {}, headers = headers) 94 | if add.status_code == 429: 95 | sys.stdout.write('Rate limited.\n') 96 | time.sleep(10) 97 | elif add.status_code == 204: 98 | sys.stdout.write('Sent Friend Request to: %s\n' % (user_name)) 99 | added_friends += 1 100 | break 101 | elif add.status_code == 400: 102 | sys.stdout.write('User has disabled Friend Requests: %s\n' % (user_name)) 103 | break 104 | elif add.status_code == 403: 105 | sys.stdout.write('Verify your Discord account.\n') 106 | break 107 | else: 108 | sys.stdout.write('Error: %s\n' % (add.text)) 109 | break 110 | 111 | delay = random.randint(30, 35) 112 | time.sleep(delay) 113 | 114 | sys.stdout.write('\n> Successfully added %s Discord friends.\n\n' % (added_friends)) 115 | 116 | else: 117 | sys.stdout.write('> You have not saved any friends.\n\n') 118 | 119 | def join_servers(): 120 | joined_servers = 0 121 | 122 | if os.path.exists('Discord Servers.txt'): 123 | with open('Discord Servers.txt', 'r', encoding = 'UTF-8') as f: 124 | for line in f.readlines(): 125 | while True: 126 | try: 127 | line = line.replace('\n', '') 128 | if 'Vanity URL' in line: 129 | sys.stdout.write('Server has a Vanity URL.\n') 130 | break 131 | else: 132 | invite_code = line.split('https://discord.gg/')[1] 133 | server_name = line.split('Discord Server: ')[1].split(' | Channel ID')[0] 134 | except IndexError: 135 | sys.stdout.write('Invalid syntax at line: %s\n' % (line)) 136 | break 137 | 138 | join = requests.post('https://discord.com/api/v6/invites/%s' % (invite_code), headers = headers) 139 | if join.status_code == 429: 140 | sys.stdout.write('Rate limited.\n') 141 | time.sleep(10) 142 | elif join.status_code == 200: 143 | sys.stdout.write('Successfully Joined: %s\n' % (server_name)) 144 | joined_servers += 1 145 | break 146 | elif join.status_code == 403: 147 | sys.stdout.write('Verify your Discord account.\n') 148 | break 149 | else: 150 | sys.stdout.write('Error: %s\n' % (join.text)) 151 | break 152 | 153 | delay = random.randint(40, 45) 154 | time.sleep(delay) 155 | 156 | sys.stdout.write('\n> Successfully joined %s Discord servers.\n\n' % (joined_servers)) 157 | 158 | else: 159 | sys.stdout.write('> You have not saved any servers.\n\n') 160 | 161 | while True: 162 | os.system('title [Discord Account Backup Bot] - Main Menu') 163 | headers = { 'authorization': token } 164 | connect = requests.get('https://canary.discordapp.com/api/v6/users/@me', headers = headers) 165 | 166 | if connect.status_code == 200: 167 | option = str(input('[1] Save Friends\n[2] Save Servers\n\n[3] Add Friends\n[4] Join Servers\n\n> Select an option: ')) 168 | sys.stdout.write('\n') 169 | if option == '1' or option == 'Save Friends': 170 | os.system('title [Discord Account Backup Bot] - Save Friends') 171 | save_friends() 172 | elif option == '2' or option == 'Save Servers': 173 | os.system('title [Discord Account Backup Bot] - Save Servers') 174 | save_servers() 175 | elif option == '3' or option == 'Add Friends': 176 | os.system('title [Discord Account Backup Bot] - Add Friends') 177 | add_friends() 178 | elif option == '4' or option == 'Join Servers': 179 | os.system('title [Discord Account Backup Bot] - Join Servers') 180 | join_servers() 181 | else: 182 | sys.stdout.write('> Invalid option.\n\n') 183 | 184 | else: 185 | sys.stdout.write('> Invalid Discord token.\n') 186 | token = str(input('Discord token: ')) 187 | sys.stdout.write('\n') 188 | --------------------------------------------------------------------------------