TeamAcediaBackend-scripts/cloakcatcher/main.py
2026-06-03 01:25:28 -03:00

133 lines
3.6 KiB
Python
Executable file

# CloakCatcher v1.4.1
# Made by user333_
print(r"""
___ _ _ ___ _ _
/ __\ | ___ __ _| | __ / __\__ _| |_ ___| |__ ___ _ __
/ / | |/ _ \ / _` | |/ // / / _` | __/ __| '_ \ / _ \ '__|
/ /___| | (_) | (_| | </ /__| (_| | || (__| | | | __/ |
\____/|_|\___/ \__,_|_|\_\____/\__,_|\__\___|_| |_|\___|_|
""")
from fetch_data import fetch_data
from hash_data import hash_data
from handle_input import handle_input
from sys import exit, stdout
config = handle_input()
USERNAME = config["username"]
PASSWD = config["passwd"]
ADDRESS = config["address"]
PORT = config["port"]
SERVLIST = config["serverlist_url"]
url = "http://teamacedia.baselinux.net:22222/" # DO NOT EDIT (unless TeamAcedia changes their server)
login_url = "api/login/" #
players_url = "api/server/players/" #
def main() -> None:
CloakCatcher.main()
class CloakCatcher:
def main() -> None:
try:
if ADDRESS == "all" and PORT == "all": # Full serverlist scan mode.
CloakCatcher.full_serverlist()
else: # Single-server scan mode.
CloakCatcher.single_server()
except KeyboardInterrupt:
print("Exiting...")
exit(0)
def single_server() -> None:
while True:
hashed_passwd = hash_data(PASSWD)
session_token = fetch_data(url + login_url, {
"username": USERNAME,
"password": hashed_passwd
},
"post")["session_token"]
players_on_cv4 = fetch_data(url + players_url, {
"token": session_token,
"server_address": ADDRESS,
"server_port": PORT
},
"post")["players"]
if len(players_on_cv4) > 0:
print("\nPlayers detected on CloakV4:\n")
for n in range(0, len(players_on_cv4)):
print(f"Playername: \"{players_on_cv4[n]['joined_name']}\", CloakV4 username: \"{players_on_cv4[n]['username']}\"")
else:
print("No players detected on CloakV4.")
input("\nPress Enter to refresh.\nPress [Ctrl + C] to exit.\n")
print(f"{'*'*80}\n") # Nicer-looking in code than typing 80 asteriks, but slightly less readable
def full_serverlist() -> None:
while True:
servers = fetch_data(SERVLIST, {}, "get")["list"]
count = 0
skipped = 0
for server in servers:
if server["clients"] > 0:
count += 1
hashed_passwd = hash_data(PASSWD)
session_token = fetch_data(url + login_url, {
"username": USERNAME,
"password": hashed_passwd
},
"post")["session_token"]
players_on_cv4 = fetch_data(url + players_url, {
"token": session_token,
"server_address": server["address"],
"server_port": str(server["port"])
},
"post")["players"]
stdout.write("\r[" + "|/-\\"[count % 4] + f"] Scanned {count}/{len(servers)} servers. Skipped {skipped} servers.") # Why does python care if i have a backslash in an f-string...
if len(players_on_cv4) > 0:
for n in range(0, len(players_on_cv4)):
print("\n\nPlayers detected on CloakV4:")
print(f"Server: \"{server['name']}\" ({server['address']}:{server['port']})")
print(f"Playername: \"{players_on_cv4[n]['joined_name']}\", CloakV4 username: \"{players_on_cv4[n]['username']}\"\n")
else:
skipped += 1
stdout.write("\r[" + "|/-\\"[count % 4] + f"] Scanned {count}/{len(servers)} servers. Skipped {skipped} servers.") # See line #63, comment.
input("\n\nPress Enter to refresh.\nPress [Ctrl + C] to exit.\n")
print(f"{'*'*80}\n")
if __name__ == "__main__":
main()