# seedbox.py import argparse import re import urllib.parse import urllib.request from pathlib import Path from trackers import trackers parser = argparse.ArgumentParser( prog="Unit3D seedbox manager", description="Automagically add or remove seedbox entries on any Unit3D", usage=f"{Path(__file__).name} tracker username [ip] [options] ", epilog="For bugs/errors, please DM me on FnP or make an issue on GitHub", ) parser.add_argument("tracker", type=str, help="Tracker") parser.add_argument("username", type=str, help="Username") parser.add_argument("ip", nargs="?", type=str, help="IP of the seedbox") parser.add_argument( "--print", default=False, action=argparse.BooleanOptionalAction, help="Prints list of seedboxes", ) parser.add_argument( "--seedbox-name", type=str, default="PikminBox", help="Name of the seedbox (default: %(default)s)", ) parser.add_argument( "--delete", default=False, action=argparse.BooleanOptionalAction, help="Deletes all old seedbox entries", ) parser.add_argument( "--cookie-file", type=Path, default=Path(__file__).parent.joinpath("unit3d.cookies"), help="Cookies to be used", ) parsed_args = parser.parse_args() COOKIE_HEADER = "" def generateHeaders(host: str) -> dict: headers = { "Host": host, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Origin": f"https://{host}", "DNT": "1", "Sec-GPC": "1", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", } if COOKIE_HEADER: headers["Cookie"] = COOKIE_HEADER return headers def parseTracker(tracker: str) -> dict: for t in trackers: if tracker.lower() in [x.lower() for x in t.values()]: return t print(f'No tracker in database matched "{tracker}"') exit(1) def parseCookieFile(file: Path, domain: str) -> None: global COOKIE_HEADER with open(file, "r") as f: for line in f: if not re.match(r"^\#", line) and not re.match(r"^\s*$", line): lineFields = line.strip().split("\t") if domain in lineFields[0]: COOKIE_HEADER = f"{lineFields[5]}={lineFields[6]}" return print(f"No remember_web_* cookie was found in {file}") exit(1) def getSeedboxes(domain: str) -> tuple[list[dict], str]: try: req = urllib.request.Request( f"https://{domain}/users/{parsed_args.username}/seedboxes", headers=generateHeaders(domain), ) with urllib.request.urlopen(req) as resp: html = resp.read().decode("utf-8") token_match = re.search( r'\s*(.*?)\s*\s*