· 6 years ago · Nov 10, 2019, 02:08 PM
1import sys
2import time
3
4
5authToken = ""
6userId = ""
7serverId = ""
8
9
10batchCount = 0
11msgCount = 0
12global rDelay
13rDelay = 0
14
15
16def load_user():
17 r = requests.get("https://discordapp.com/api/v6/users/@me",
18 headers={"Authorization": authToken}, timeout=15)
19 response = r.json()
20 try:
21 username = response["username"]
22 discriminator = response["discriminator"]
23 return [username, discriminator]
24 except KeyError:
25 print(Fore.RED +
26 "\r[x] Authorization failed",
27 end="")
28 print(Fore.RED +
29 "\n[x] Possibly invalid 'authToken' provided",
30 end="")
31 exit()
32
33
34def load_messages():
35 r = requests.get("https://discordapp.com/api/v6/guilds/" + str(serverId) +
36 "/messages/search?author_id=" + str(userId),
37 headers={"Authorization": authToken})
38
39 if r.status_code == 200:
40 pass
41 elif r.status_code == 429:
42 global rDelay
43 rDelay += 5
44 return False
45 else:
46 return False
47 response = r.json()
48 if response["total_results"] == 0:
49 return None
50 else:
51 return response
52
53
54def delete_message(message):
55 r = requests.delete("https://discordapp.com/api/v6/channels/" +
56 message["channel_id"] + "/messages/" + message["id"],
57 headers={"Authorization": authToken})
58 if r.status_code == 204:
59 global msgCount
60 msgCount += 1
61
62
63def loading_output(bc=0, mc=0):
64 msg = "[-] Deleting messages{:5s} [batch #{}]".format(
65 "." * (mc % 5), bc)
66 return msg
67
68
69def main():
70 loadedMessages = load_messages()
71 global batchCount
72 batchCount += 1
73 if loadedMessages is None:
74 print(Fore.GREEN +
75 "\r[!] Finished deleting {} messages! ".format(
76 msgCount), end="", flush=True)
77 exit()
78 if loadedMessages is False:
79 timeout = rDelay % 120
80 for t in range(timeout, -1, -1):
81 if t > 0:
82 print(
83 (Fore.RED + "\r[x] Discord API timeout (retry in {}s) ")
84 .format(t), end="", flush=True)
85 time.sleep(1)
86 else:
87 print(Fore.RED +
88 "\r[x] Discord API timeout (retrying...) ",
89 end="", flush=True)
90 time.sleep(1)
91 main()
92 for batch in loadedMessages["messages"]:
93 for msg in batch:
94 if msg["author"]["id"] == userId:
95 delete_message(msg)
96 print("\r" + loading_output(bc=batchCount, mc=msgCount),
97 end="")
98 main()
99
100
101def exit():
102 print(Fore.LIGHTBLACK_EX + "\n[!] Press any key to exit...", end="")
103 input()
104 sys.exit()
105
106
107def shutdown(t):
108 print(Fore.LIGHTBLACK_EX + "\n[!] Shutting down...", end="")
109 time.sleep(t)
110 sys.exit()
111
112
113if __name__ == "__main__":
114 try:
115 import requests
116 from colorama import init, Fore, Back, Style
117 init()
118 print("""
119dd
120
121""")
122 info = load_user()
123 print(("[+] User >> {}#{}").format(info[0], info[1]))
124 main()
125 except KeyboardInterrupt:
126 shutdown(3)
127 except (ImportError, ModuleNotFoundError, NameError):
128 print("\r[x] Missing packages 'colorama' or 'requests'", end="")
129 print("\n[x] Type 'pip install colorama requests' to install", end="")
130 print("\n[!] Press any key to exit...", end="")
131 input()
132 sys.exit()
133 except requests.exceptions.Timeout:
134 print(Fore.RED + "\r[x] Network connection timeout", end="")
135 exit()
136 except requests.exceptions.ConnectionError:
137 print(
138 Fore.RED + "\r[x] Network connectivity limited or unavailable",
139 end="")
140 exit()
141 except requests.exceptions.RequestException:
142 print(Fore.RED + "\r[x] Unexpected error occured", end="")
143 exit()