* feat(tally): /tally-claim, /tally-transfer, /tally-wipe commands Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(tally): idle sweep, startup load, and empty-VC expiry Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * style(tally): parenthesize voice-state guard for clarity Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(tally): update live tallies when sessions finish Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(tally): robust winner matching + cleanup of deleted-VC tallies Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(tally): /dev-tally to manually attribute a win/loss in your VC Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Installation
-
Clone the repository
git clone git@github.com:FURRO404/BOTS.git cd BOTS/SREBOT -
Set up the shared Python virtual environment (used by both SREBOT and TSSBOT)
python3 -m venv ../SHARED/.venv source ../SHARED/.venv/bin/activate -
Install dependencies
pip install -r ../SHARED/requirements.txt -
Configure environment variables
nano .env.envis the single source of truth for runtime config —ecosystem.config.jshas noenv:blocks; it loads.envviarequire('dotenv').config()and PM2 inherits the variables when spawning each app. Keys SREBOT reads:DISCORD_KEY=your_discord_bot_token_here DEEPL_KEY=your_deepl_api_key_here # Optional GITHUB_WEBHOOK_SECRET=your_webhook_secret # For auto-deployment STORAGE_VOL_PATH=/absolute/path/to/storage # Shared with TSSBOT SREBOT_API_BEARER_TOKEN=your_internal_api_token # Optional, protects /api/* SREBOT_API_PORT=6000 SREBOT_WEB_PORT=3001 SREBOT_WEBHOOK_PORT=9000 SREBOT_TTL_ALERT_WEBHOOK_URL=https://discord.com/api/webhooks/... SREBOT_EXTERNAL_HOST=0.0.0.0 SREBOT_EXTERNAL_PORT=18081 SREBOT_EXTERNAL_BEARER_TOKEN=your_external_bridge_token # Optional, protects the bridge API and websocket SREBOT_EXTERNAL_UPSTREAM_URL=http://127.0.0.1:6000 SREBOT_TTL_ALERT_WEBHOOK_URL=https://discord.com/api/webhooks/... # Optional, maintains one Discord status message for TTL degradation/recovery NODE_ENV=production PYTHONUNBUFFERED=1 -
Run the bot
python BotScript.py
AXBot bridge process
ecosystem.config.js now includes a dedicated PM2 app named srebot-axbot.
It proxies read-only SREBOT queries and broadcasts replay/GOB envelopes over
websocket on the same external port.
Its outbox/state files live under the shared storage volume configured in
.env via STORAGE_VOL_PATH.
Useful commands:
pm2 start ecosystem.config.js --only srebot-api
pm2 start ecosystem.config.js --only srebot-axbot
pm2 logs srebot-axbot
Clients should point their query client at:
SREBOT_API_BASE_URL=http://<srebot-host>:18081
The bridge app logs both sides of the transfer:
- incoming client HTTP requests
- outgoing proxy responses
- websocket envelopes broadcast to connected clients