diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-18 23:18:37 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-18 23:18:37 +0200 |
| commit | b252c39517b9fce181d1a0fe4761404c7d981397 (patch) | |
| tree | 564cf01aed601f1974e0de8801d4452215ec05f5 /src/commands/ai.rs | |
| parent | fir auto completion and send file in the response body upon grajcuj file (diff) | |
| download | senator-sperma-b252c39517b9fce181d1a0fe4761404c7d981397.tar.gz senator-sperma-b252c39517b9fce181d1a0fe4761404c7d981397.zip | |
feat: local TTS via piper subprocess with Google fallback
- New src/tts.rs: centralize TTS in synthesize(config, http_client, text)
Piper subprocess primary, Google Translate fallback on error/missing
- TTS_MODEL_PATH/TTS_VOICE env config (defaults to pl_PL-bass-high)
- Fix Unknown interaction errors: spawn play_tts_in_channel in background
so voice-state TTS no longer blocks the shard event loop (3s Discord limit)
- Best-effort confirmation replies in /tts to prevent error cascade
- Custom on_error handler: graceful interaction-expired error handling
- Comprehensive tracing logging (engine, model, duration, stderr)
Diffstat (limited to 'src/commands/ai.rs')
| -rw-r--r-- | src/commands/ai.rs | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/src/commands/ai.rs b/src/commands/ai.rs index a7a9a7e..61fb471 100644 --- a/src/commands/ai.rs +++ b/src/commands/ai.rs | |||
| @@ -30,18 +30,8 @@ pub async fn senator( | |||
| 30 | }) | 30 | }) |
| 31 | .ok_or_else(lang::err_not_in_voice)?; | 31 | .ok_or_else(lang::err_not_in_voice)?; |
| 32 | 32 | ||
| 33 | let tts_url = format!( | 33 | let (audio_data, _) = |
| 34 | "https://translate.google.com/translate_tts?ie=UTF-8&q={}&tl=pl&client=tw-ob", | 34 | crate::tts::synthesize(&ctx.data().config, &ctx.data().http_client, &response).await?; |
| 35 | crate::commands::tts::urlencoding(&response) | ||
| 36 | ); | ||
| 37 | let audio_data = ctx | ||
| 38 | .data() | ||
| 39 | .http_client | ||
| 40 | .get(&tts_url) | ||
| 41 | .send() | ||
| 42 | .await? | ||
| 43 | .bytes() | ||
| 44 | .await?; | ||
| 45 | 35 | ||
| 46 | let call = ctx | 36 | let call = ctx |
| 47 | .data() | 37 | .data() |
