Files
NotSoToothless ffb31f3bb1 holy meow (#1357)
2026-06-28 06:20:20 -07:00

3.2 KiB

Installation

  1. Clone the repository

    git clone git@github.com:FURRO404/BOTS.git
    cd BOTS/SREBOT
    
  2. Set up the shared Python virtual environment (used by both SREBOT and TSSBOT)

    python3 -m venv ../SHARED/.venv
    source ../SHARED/.venv/bin/activate
    
  3. Install dependencies

    pip install -r ../SHARED/requirements.txt
    
  4. Configure environment variables

    nano .env
    

    .env is the single source of truth for runtime config — ecosystem.config.js has no env: blocks; it loads .env via require('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
    TSS_EXTERNAL_UPSTREAM_URL=http://127.0.0.1:6100  # Enables /api/tss/* proxy (omit -> 501)
    TSS_API_HOST=127.0.0.1  # tssbot-api bind host
    TSS_API_PORT=6100       # tssbot-api bind port
    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
    
  5. Run the bot

    python BotScript.py
    

Relay gateway

ecosystem.config.js includes a unified PM2 app named relay-gateway (code in BOTS/SHARED/relay_gateway/). It fronts both bots:

  • proxies read-only queries: /api/sre/* → SREBOT's internal API (:6000); /api/tss/* → the TSS HTTP API (:6100) or 501 until it is deployed
  • streams replay envelopes over /ws/sre and /ws/tss
  • authenticates every request/socket against per-person keys at three levels (all/sre/tss) stored in $STORAGE_VOL_PATH/relay_keys.json (SHA-256-hashed tokens, hot-reloaded on change)

Outbox/state files live under the shared storage volume (STORAGE_VOL_PATH): external_bridge_outbox.jsonl (sre) and tss_bridge_outbox.jsonl (tss).

Useful commands:

pm2 start ecosystem.config.js --only srebot-api
pm2 start ecosystem.config.js --only relay-gateway
pm2 logs relay-gateway

# manage downstream keys (run from BOTS/SHARED with the shared venv):
python -m relay_gateway.manage_keys --file "$STORAGE_VOL_PATH/relay_keys.json" add --name cn-axbot --level sre
python -m relay_gateway.manage_keys --file "$STORAGE_VOL_PATH/relay_keys.json" list
python -m relay_gateway.manage_keys --file "$STORAGE_VOL_PATH/relay_keys.json" revoke --name cn-axbot

Downstream consumers (e.g. BOT-RELAY) discover their channels from GET /api/whoami and connect to /ws/<channel> + /api/<channel>/* using their bearer token. Point them at http://<srebot-host>:18081.