bot.run() was crashing with PrivilegedIntentsRequired because
intents.message_content=True needs the toggle enabled in the Discord
developer portal. Mirror SREBOT's intent config: message_content=False,
reactions+messages on. TSSBOT can opt into the privileged intent later
if/when it needs message content.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TSSBOT has no node_modules/ on the server (no package.json was ever
installed for it), so `require('dotenv').config()` crashes pm2 with
MODULE_NOT_FOUND when it loads the ecosystem file. The dotenv call was
already dead code: every spawned app loads its own .env in its own
process (botscript.py, server.js, web/server.js, webhook updater,
TSSBOT/start_bot.py all do load_dotenv / require('dotenv').config()
themselves). Remove the require from both ecosystem files.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Make .env the single source of truth for runtime config. Remove all
`env:` blocks from SREBOT/ecosystem.config.js and TSSBOT/ecosystem.config.js
so values can't silently shadow .env. Both ecosystem files load .env via
`require('dotenv').config()` and PM2 inherits the resolved environment.
- Rename SREBOT_STORAGE_VOL_PATH → STORAGE_VOL_PATH across all readers
(BOT/utils.py, BOT/receiver_bridge.py, BOT/render_recap.py, server.js,
web/server.js, dateindex.js, scripts/*, srebot.service, tests/, README,
and both .env files). STORAGE is shared between SREBOT and TSSBOT, so the
variable shouldn't carry one bot's prefix.
- Rename per-process PORT env vars to disambiguated names so .env can be
the source of truth without collisions:
PORT (api) → SREBOT_API_PORT (server.js)
PORT (web) → SREBOT_WEB_PORT (web/server.js)
WEBHOOK_PORT → SREBOT_WEBHOOK_PORT (github_webhook_updater.py)
SREBOT_EXTERNAL_HOST/PORT/UPSTREAM_URL were already uniquely named;
they just move from ecosystem env to .env.
- TSSBOT/.env: drop GITHUB_WEBHOOK_SECRET (only srebot-webhook consumes it)
and the stale SREBOT_DEPLOY_PATH. SREBOT/.env: also drop the obsolete
SREBOT_DEPLOY_PATH (ecosystem now hardcodes __dirname).
- ecosystem.config.js no longer references SREBOT_DEPLOY_PATH; deploy path
is always __dirname of the ecosystem file.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- TSSBOT/start_bot.py: replace the print-and-idle stub with a minimal
discord.py Client (commands.Bot with default+message_content intents).
Loads TSSBOT/.env via python-dotenv, reads DISCORD_KEY, logs on_ready,
handles SIGTERM/SIGINT cleanly. Aborts with a clear error if the token
is missing instead of silently exit-looping.
- TSSBOT/ecosystem.config.js: switch the default interpreter from system
python3 to SREBOT's venv (../SREBOT/.venv/bin/python). Both bots share
BOTS/SHARED and the same baseline deps (discord.py, dotenv, …); split
into a dedicated TSSBOT/.venv only when the dependency sets diverge.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add tssbot PM2 entry + extend webhook updater to handle TSSBOT
- TSSBOT/ecosystem.config.js: defines just the tssbot app for now.
Uses system python3 (skeleton has no deps); switch to .venv/bin/python
once TSSBOT/BOT/botscript.py and a real dependency set exist.
- TSSBOT/start_bot.py: change the stub from exit-immediately to an
idle loop with SIGTERM/SIGINT handling so PM2 doesn't restart-loop
the placeholder.
- SREBOT/github_webhook_updater.py: same listener handles the whole
monorepo. Add a tssbot restart rule that triggers on TSSBOT/BOT/,
TSSBOT root .py, TSSBOT/start_bot.py, TSSBOT/ecosystem.config.js,
or SHARED/ changes. A push to SHARED restarts both bots; pushes
scoped to one bot only restart that bot.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* update game files and start tssbot
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR #1223 only staged the deletions of the old paths because the new
top-level directories were still untracked when the commit was authored.
This commit adds the actual restructured tree: SREBOT/ (existing bot),
SHARED/ (vromfs, data_parser, ICONS/MAPS/FONTS, DAGOR_FILES,
update_game_files), and TSSBOT/ (skeleton).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>