aboutsummaryrefslogtreecommitdiffstats
path: root/src/commands/ai.rs
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-08-18 23:18:37 +0200
committersalmonik <salmonik@tuta.io>2026-08-18 23:18:37 +0200
commitb252c39517b9fce181d1a0fe4761404c7d981397 (patch)
tree564cf01aed601f1974e0de8801d4452215ec05f5 /src/commands/ai.rs
parentfir auto completion and send file in the response body upon grajcuj file (diff)
downloadsenator-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 '')
-rw-r--r--src/commands/ai.rs14
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()