# --------------------------------------------------------------------------- # Shared configuration for the dashboard (Flask, config.py) and the browser # voice gateway (Node, gateway/src/config.js). Both read this one file. # # Secrets do NOT belong here: put them in `.env` (see .env.template). # Any environment variable listed next to a setting overrides the value here. # --------------------------------------------------------------------------- # Where the app listens. When voice is enabled, the voice gateway owns the # public port and forwards every non-voice request to the dashboard, which # then listens on 127.0.0.1:dashboard_port only. One port to expose/proxy. [web] host = "0.0.0.0" # WEB_HOST port = 5000 # WEB_PORT - public port dashboard_port = 5001 # DASHBOARD_PORT - internal Flask port (voice enabled only) # TeamSpeak server connection settings [server] host = "" # TS_HOST - server IP or hostname, e.g. 192.168.1.50 webquery_port = 8443 # TS_WEBQUERY_PORT - HTTP WebQuery port (TS6) server_id = 1 # TS_SERVER_ID - virtual server id voice_port = 9987 # TS_VOICE_PORT - UDP voice port the web voice gateway connects to ts_domain = "" # TS_DOMAIN - address used by the "Connect" button; empty = host cache_time = 30 # Refresh interval in seconds (anti-spam) cache_file = "cache.json" # Relative to the repository root afk_status_max_clients = 3 # Skip per-client clientinfo (AFK/streaming) calls when client count exceeds this (due to potential rate limits) # TS_API_KEY (.env) - WebQuery API key # TS_SERVER_PASSWORD (.env) - server password; required for web voice # Browser voice (join the server from the dashboard). # Voice is only offered when `enabled = true` AND TS_SERVER_PASSWORD is set: # visitors must type the server password, which the gateway checks before # it opens any TeamSpeak connection (the TeamSpeak server checks it again). [voice] enabled = true # VOICE_ENABLED max_sessions = 8 # Concurrent browser voice sessions (keep low on small SBCs) max_sessions_per_ip = 2 # Concurrent sessions from one IP address max_failed_logins = 5 # Wrong passwords per IP before a temporary lockout lockout_minutes = 10 # Lockout duration after too many wrong passwords nickname_prefix = "" # Prepended to web users' nicknames, e.g. "[web] " default_channel = "" # Channel name (or path "Parent/Child") to join; empty = server default identity_security_level = 8 # TeamSpeak identity security level for new web users trust_proxy = false # Use X-Forwarded-For for per-IP limits (only behind your own reverse proxy) allowed_origins = [] # Extra allowed Origins for /ws/voice, e.g. ["https://ts.example.com"]; same-host is always allowed # Main design and copy [ui] title = "" subtitle = "" background_color = "#07111f" # Main background color panel_color = "#101b2d" # Main panel and channel block color accent_color = "#2589ff" # Buttons, highlights, and refresh timer text_color = "#e8f2ff" banner_url = "https://files.catbox.moe/8852dq.jpg" # Absolute URL (e.g. "https://...") or path; leave empty ("") to hide the header banner enable_stars = true # Set to true to enable a subtle animated space background # Interface buttons and links [buttons] join = "Connect in TeamSpeak" web_join = "Join from browser" download_text = "Teamspeak is not installed yet?" download_link = "Download Teamspeak" download_url = "https://www.teamspeak.com/en/downloads/" # Official download link # Useful links. Add or remove as many rows as you want: "Name" = "https://..." [external_links] # Footer [footer] text = "another moekyun service" author = "" author_url = "" # Channel customization. Exact channel name => absolute image URL (e.g. "https://...") [channel_banners] "INFORMATION" = "https://files.catbox.moe/ap6r2c.webp" "GAME SERVERS" = "game.jpeg" "General" = "general.jpg" "CRASHING OUT" = "crash.png" "Wonhee HQ" = "illit.jpg" [channel_icons] # "Lobby" = "https://example.com/lobby_icon.png" # "General" = "https://example.com/general_icon.png" [generic_images] background = "" # Default image URL applied to unknown channels icon = "" # Default icon URL applied to unknown channels # Server groups / roles: "GROUP_ID" = "https://example.com/role_icon.png" [role_icons] # "6" = "https://example.com/admin.png" # "9" = "https://example.com/vip.png"