aboutsummaryrefslogtreecommitdiff
path: root/setup_wizard.py
diff options
context:
space:
mode:
authordavid <[email protected]>2026-09-08 00:36:22 -0300
committerdavid <[email protected]>2026-09-08 00:36:22 -0300
commit33b2688a2d2888bf5e560c70a5bd92a319f5288d (patch)
treeb5822c6dc5a0d7b3223e7efce3d5d8d36368a859 /setup_wizard.py
parent71616cfc9b28df1a153f3746fdae1bf8aee23ef3 (diff)
downloadfaggot-chan-33b2688a2d2888bf5e560c70a5bd92a319f5288d.tar.gz
faggot-chan-33b2688a2d2888bf5e560c70a5bd92a319f5288d.zip
all of this was vibecoded. i just asked claude to fix all my bugs and he actually overhauled shit woaw. he only changed the name and position of a couple functions so if i want to write more things it should be fine. i love claude i love antrhopic i love vibecoding @claude make me a million dollars in a day make no mistake
Diffstat (limited to 'setup_wizard.py')
-rw-r--r--setup_wizard.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/setup_wizard.py b/setup_wizard.py
new file mode 100644
index 0000000..8575b27
--- /dev/null
+++ b/setup_wizard.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python3
+"""
+setup wizard for faggot-chan. figures out which files need writing based on
+how you're deploying, and writes them. run this before bot.py / main.py.
+"""
+import secrets
+from pathlib import Path
+
+SCRIPT_DIR = Path(__file__).resolve().parent
+
+
+def ask(prompt: str, default: str = None) -> str:
+ suffix = f" [{default}]" if default else ""
+ val = input(f"{prompt}{suffix}: ").strip()
+ return val or default or ""
+
+
+def ask_yn(prompt: str) -> bool:
+ while True:
+ val = input(f"{prompt} (y/n): ").strip().lower()
+ if val in ("y", "yes"):
+ return True
+ if val in ("n", "no"):
+ return False
+ print("just y or n please")
+
+
+def write_tokens_file(config_dir: Path):
+ config_dir.mkdir(parents=True, exist_ok=True)
+ print("\n-- discord bot setup --")
+ token = ask("discord bot token")
+ server_id = ask("discord server (guild) id")
+ while not server_id.isdigit():
+ print("that's not a number")
+ server_id = ask("discord server (guild) id")
+ (config_dir / "tokens.txt").write_text(f"{token}\n{server_id}\n", encoding="utf-8")
+ print(f"wrote {config_dir / 'tokens.txt'}")
+
+
+def write_connection_file(config_dir: Path, default_uri: str = "ws://0.0.0.0:8765"):
+ config_dir.mkdir(parents=True, exist_ok=True)
+ print("\n-- connection to main.py --")
+ uri = ask("main.py address (ws:// or wss://)", default_uri)
+ print("paste the auth token main.py is using (from colab_setup.py output),")
+ token = ask("or leave blank to generate a new one")
+ if not token:
+ token = secrets.token_urlsafe(32)
+ print(f"generated token: {token}")
+ (config_dir / "connection.txt").write_text(f"{uri}\n{token}\n", encoding="utf-8")
+ print(f"wrote {config_dir / 'connection.txt'}")
+ return token
+
+
+def write_auth_token_file(config_dir: Path, token: str = None):
+ config_dir.mkdir(parents=True, exist_ok=True)
+ if not token:
+ print("\n-- websocket auth for main.py --")
+ print("this is the secret bot.py has to send. leave blank to generate one.")
+ token = ask("auth token")
+ if not token:
+ token = secrets.token_urlsafe(32)
+ print(f"generated token: {token}")
+ (config_dir / "auth_token.txt").write_text(f"{token}\n", encoding="utf-8")
+ print(f"wrote {config_dir / 'auth_token.txt'}")
+ print(f"\ngive this token (and this machine's public wss:// url) to whoever's setting up bot.py:\n {token}")
+
+
+def main():
+ print("faggot-chan setup wizard\n")
+
+ colab = ask_yn("is this for a colab-hosted main.py")
+
+ if not colab:
+ # everything lives together, plain local setup
+ bot_config = SCRIPT_DIR / "files" / "config"
+ main_config = SCRIPT_DIR / "config"
+ write_tokens_file(bot_config)
+ token = write_connection_file(bot_config, default_uri="ws://0.0.0.0:8765")
+ write_auth_token_file(main_config, token=token)
+ print("\nall set. run main.py, then bot.py.")
+ return
+
+ where = ask("running this on the 'vps' (bot.py host) or 'colab' box (main.py host)", "vps")
+
+ if where.lower().startswith("colab"):
+ # this box just needs the auth token main.py will check — connection details
+ # (discord token, server id) live on whichever box runs bot.py
+ main_config = SCRIPT_DIR / "config"
+ write_auth_token_file(main_config)
+ print("\nnow run colab_setup.py to bring main.py + the tunnel up.")
+ return
+
+ # vps / bot.py host: skip discord-client setup entirely (handled separately),
+ # this preset only wires up the connection to the colab-hosted main.py
+ bot_config = SCRIPT_DIR / "files" / "config"
+ if not (bot_config / "tokens.txt").exists():
+ print("\nheads up: no files/config/tokens.txt found here — the vps preset skips")
+ print("discord token setup, so make sure that file gets added separately.")
+ write_connection_file(bot_config, default_uri="wss://your-colab-tunnel-url-here")
+ print("\nall set. run bot.py once main.py is up on the colab side.")
+
+
+if __name__ == "__main__":
+ main()