|
|
|
#!/usr/bin/python
|
|
|
|
|
|
|
|
import re
|
|
|
|
import discord as ds
|
|
|
|
from lib.input import *
|
|
|
|
|
|
|
|
# very important art :)
|
|
|
|
art = """
|
|
|
|
\033[1m_________________________________\033[0m
|
|
|
|
\033[1m<\033[0m \033[96m\033[1mrmds\033[0m \033[1mv\033[0m\033[92m1.0\033[0m: \033[4mDiscord Cleanup Tool\033[0m \033[1m>\033[0m
|
|
|
|
\033[1m---------------------------------\033[0m
|
|
|
|
\ ^__^
|
|
|
|
\ (oo)\_______
|
|
|
|
(__)\ )\/
|
|
|
|
||----w |
|
|
|
|
|| ||
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
print(art)
|
|
|
|
|
|
|
|
# reading the auth token
|
|
|
|
authfile = open("auth.txt", "r")
|
|
|
|
authToken = authfile.readlines()[0]
|
|
|
|
|
|
|
|
c = ds.Client()
|
|
|
|
|
|
|
|
async def get_target_server(c):
|
|
|
|
inp = get_value_of_key("-i") or input("Input target server: ")
|
|
|
|
target = c.get_guild(int(inp))
|
|
|
|
|
|
|
|
if( target != None ):
|
|
|
|
await attack_server(target, c)
|
|
|
|
await c.close()
|
|
|
|
else:
|
|
|
|
print(f"\nUnknown server {inp}")
|
|
|
|
print(f"Target Object: {target}")
|
|
|
|
|
|
|
|
return await get_target_server(c)
|
|
|
|
|
|
|
|
@c.event
|
|
|
|
async def on_ready():
|
|
|
|
print(f"\033[92mLogged in as: {c.user}\033[0m")
|
|
|
|
await get_target_server(c)
|
|
|
|
|
|
|
|
async def attack_server(server, c):
|
|
|
|
print(f"Wiping server: \033[1m {server} \033[0m")
|
|
|
|
|
|
|
|
if( not key_valid("--noask") ):
|
|
|
|
print(f"\nAll of your messages in \033[1m{server}\033[0m will be \033[1m\033[91mDELETED FOREVER\033[0m!\033[0m")
|
|
|
|
ask = input("Are you sure?! (y/n): ")
|
|
|
|
if( not ask == "y" ):
|
|
|
|
print("Aborting...")
|
|
|
|
return
|
|
|
|
|
|
|
|
for channel in server.channels:
|
|
|
|
if( str(channel.type) == "text" ):
|
|
|
|
try:
|
|
|
|
await send_payload(channel, c)
|
|
|
|
except Exception as err:
|
|
|
|
print(f"Unable to wipe channel: {channel} err: {err}")
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
async def get_user_messages(channel, c):
|
|
|
|
messages = await channel.history(limit=9999).flatten()
|
|
|
|
|
|
|
|
for m in messages:
|
|
|
|
if( m.author != c.user ):
|
|
|
|
messages.remove(m)
|
|
|
|
|
|
|
|
return messages, len(messages)
|
|
|
|
|
|
|
|
async def send_payload(channel, c):
|
|
|
|
user_messages, user_messages_len = await get_user_messages(channel, c)
|
|
|
|
|
|
|
|
print(f"\n\t\t#{channel}")
|
|
|
|
|
|
|
|
for i, m in enumerate(user_messages):
|
|
|
|
try:
|
|
|
|
print(f"[{i+1}/{user_messages_len}]\t \033[1m\033[91mrm\033[0m \t({m.id}) : \"{m.content}\"")
|
|
|
|
except Exception as err:
|
|
|
|
print(f"err: {err}")
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c.run(authToken, bot=False)
|