diff options
| author | salmonik <salmonik@tuta.io> | 2026-11-04 01:33:33 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-11-04 01:33:33 +0100 |
| commit | 97a26ec4e64a98a24dad7969337d2569339db9a7 (patch) | |
| tree | ada17e2b1f50d053a6bfe4067296e06de848ac87 /README.md | |
| parent | config: harden the shared temp directory (diff) | |
| download | senator-sperma-97a26ec4e64a98a24dad7969337d2569339db9a7.tar.gz senator-sperma-97a26ec4e64a98a24dad7969337d2569339db9a7.zip | |
docs: sync with current behavior
Diffstat (limited to '')
| -rw-r--r-- | README.md | 21 |
1 files changed, 13 insertions, 8 deletions
| @@ -24,7 +24,7 @@ The following binaries must be available on `PATH`: | |||
| 24 | - `imagemagick` (`magick`) — image compression and conversion for `/compress` and `/convert` | 24 | - `imagemagick` (`magick`) — image compression and conversion for `/compress` and `/convert` |
| 25 | - `qalc` (Qalculate) — used by `/math` to evaluate expressions | 25 | - `qalc` (Qalculate) — used by `/math` to evaluate expressions |
| 26 | - `yt-dlp` (optional) — used by `/download` | 26 | - `yt-dlp` (optional) — used by `/download` |
| 27 | - `piper` (optional) — local TTS for `/tts` and `/senator ... tts_vc`; falls back to Google Translate TTS if unavailable | 27 | - `piper` model files (optional) — local TTS for `/tts` and `/senator ... tts_vc`; TTS commands fail when unset |
| 28 | 28 | ||
| 29 | Unlike the Python version, QR encode/decode is handled by the pure-Rust | 29 | Unlike the Python version, QR encode/decode is handled by the pure-Rust |
| 30 | `qrcode`/`rxing` crates — no `zbar` system library required. | 30 | `qrcode`/`rxing` crates — no `zbar` system library required. |
| @@ -48,8 +48,8 @@ created automatically on first run. | |||
| 48 | 48 | ||
| 49 | For local TTS, set `TTS_MODEL_PATH` to a Piper `.onnx` model file (or a | 49 | For local TTS, set `TTS_MODEL_PATH` to a Piper `.onnx` model file (or a |
| 50 | directory of models, in which case `TTS_VOICE` selects the model, defaulting to | 50 | directory of models, in which case `TTS_VOICE` selects the model, defaulting to |
| 51 | `pl_PL-bass-high`). When `TTS_MODEL_PATH` is unset or Piper is unavailable, the | 51 | `pl_PL-bass-high`). There is no external TTS fallback: TTS commands fail when |
| 52 | bot falls back to Google Translate TTS. | 52 | the model is missing. |
| 53 | 53 | ||
| 54 | ### 5. Run | 54 | ### 5. Run |
| 55 | 55 | ||
| @@ -132,7 +132,7 @@ servers. | |||
| 132 | - `/music join` — join the caller's voice channel | 132 | - `/music join` — join the caller's voice channel |
| 133 | 133 | ||
| 134 | ### TTS | 134 | ### TTS |
| 135 | - `/tts` — local Piper TTS (Polish, Google Translate fallback), sent as a file or played in voice | 135 | - `/tts` — local Piper TTS (Polish), sent as a file or played in voice |
| 136 | 136 | ||
| 137 | ### Search & Web | 137 | ### Search & Web |
| 138 | - `/web` — DuckDuckGo HTML scrape (soon to use 4get) | 138 | - `/web` — DuckDuckGo HTML scrape (soon to use 4get) |
| @@ -148,6 +148,8 @@ servers. | |||
| 148 | - `/say` — repeat the given text as the bot | 148 | - `/say` — repeat the given text as the bot |
| 149 | - `/math` — evaluate an ASCII math expression through `qalc` | 149 | - `/math` — evaluate an ASCII math expression through `qalc` |
| 150 | - `/qr generowanie` / `/qr dekodowanie` — QR encode / decode | 150 | - `/qr generowanie` / `/qr dekodowanie` — QR encode / decode |
| 151 | - `/record` — upload the last recording window (requires `MANAGE_GUILD`) | ||
| 152 | - `/leaderboard` — `me`, `messages`, `active`, `afk`, `total` | ||
| 151 | 153 | ||
| 152 | ### Triggers | 154 | ### Triggers |
| 153 | - `/trigger create` — new trigger group | 155 | - `/trigger create` — new trigger group |
| @@ -168,6 +170,7 @@ servers. | |||
| 168 | ### Message Context Menu | 170 | ### Message Context Menu |
| 169 | - "Wyślij załączniki" (right-click message) — upload attachments to Copyparty | 171 | - "Wyślij załączniki" (right-click message) — upload attachments to Copyparty |
| 170 | - "kompresja" (right-click message) — compress all attachments | 172 | - "kompresja" (right-click message) — compress all attachments |
| 173 | - "Pobierz z linku" (right-click message) — download every URL in the message | ||
| 171 | 174 | ||
| 172 | ## Architecture | 175 | ## Architecture |
| 173 | 176 | ||
| @@ -181,10 +184,12 @@ in-memory trigger cache, autocomplete cache, and per-guild music queue. | |||
| 181 | - `src/copyparty/` — Copyparty search/upload client | 184 | - `src/copyparty/` — Copyparty search/upload client |
| 182 | - `src/openrouter/` — OpenRouter chat client | 185 | - `src/openrouter/` — OpenRouter chat client |
| 183 | - `src/database/` — sqlx pool, migrations, query helpers (6 tables) | 186 | - `src/database/` — sqlx pool, migrations, query helpers (6 tables) |
| 184 | - `src/voice/` — `VoiceManager`, mp3 → songbird input | 187 | - `src/voice/` — `VoiceManager`, ffmpeg/symphonia → songbird input |
| 188 | - `src/net.rs` — blocks private/link-local hosts for user-supplied URLs | ||
| 189 | - `src/recording/` — per-guild rolling PCM buffer for `/record` | ||
| 185 | - `src/events/` — `handle_ready`, voice-state, message (trigger matching) | 190 | - `src/events/` — `handle_ready`, voice-state, message (trigger matching) |
| 186 | - `src/tasks/` — 30s cron scheduler poll loop | 191 | - `src/tasks/` — 60s cron scheduler poll loop |
| 187 | - `src/lang.rs` — user-facing Polish strings | 192 | - `src/lang.rs` — user-facing Polish strings |
| 188 | 193 | ||
| 189 | All temporary files go through `crate::config::TEMP_PATH` | 194 | All temporary files go through `crate::config::temp_path()` |
| 190 | (`/tmp/senator_sperma`). | 195 | (`$TMPDIR/senator_sperma`, created with mode `0700` at startup). |
