<feed xmlns='http://www.w3.org/2005/Atom'>
<title>senator-sperma/src/events/mod.rs, branch main</title>
<subtitle>Very big discord bot.
</subtitle>
<id>https://git.2137697.xyz/senator-sperma/atom?h=main</id>
<link rel='self' href='https://git.2137697.xyz/senator-sperma/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/'/>
<updated>2026-11-04T00:35:09Z</updated>
<entry>
<title>events: track voice channel moves</title>
<updated>2026-11-04T00:35:09Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:35:09Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=05f290e8f8954bbd975185af3660493b409aed2b'/>
<id>urn:sha1:05f290e8f8954bbd975185af3660493b409aed2b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>cron/triggers: keep pre-scoping rows manageable</title>
<updated>2026-11-04T00:12:42Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:12:42Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=234937fea6452a037d8cf2d2e20af5ff535ebe26'/>
<id>urn:sha1:234937fea6452a037d8cf2d2e20af5ff535ebe26</id>
<content type='text'>
</content>
</entry>
<entry>
<title>events: never join or move voice just to play TTS</title>
<updated>2026-11-04T00:10:23Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:10:06Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=aaebd13f7072bd25fbe00809d18c2ece671e90f3'/>
<id>urn:sha1:aaebd13f7072bd25fbe00809d18c2ece671e90f3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>triggers: scope groups to the guild that created them</title>
<updated>2026-11-04T00:09:10Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:09:10Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=ceb96326ccf3daff0472cafdaba3e223d3a20724'/>
<id>urn:sha1:ceb96326ccf3daff0472cafdaba3e223d3a20724</id>
<content type='text'>
</content>
</entry>
<entry>
<title>wire recording into voice manager, config, events, /record command</title>
<updated>2026-09-09T12:36:50Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-09-09T12:36:50Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=0d1fdab3a10b30d83da50b7f20acc18b7a350a22'/>
<id>urn:sha1:0d1fdab3a10b30d83da50b7f20acc18b7a350a22</id>
<content type='text'>
</content>
</entry>
<entry>
<title>assistant replies to the message</title>
<updated>2026-09-09T10:58:46Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-09-09T10:58:46Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=5c3840e7463e957b91495612ac967208001dff05'/>
<id>urn:sha1:5c3840e7463e957b91495612ac967208001dff05</id>
<content type='text'>
Signed-off-by: salmonik &lt;salmonik@tuta.io&gt;
</content>
</entry>
<entry>
<title>feat: piper now not a subprocess, cache system for TTS</title>
<updated>2026-09-05T17:35:21Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-09-05T17:35:21Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=8e868894cbcaf421c263f3555af4d29bef653420'/>
<id>urn:sha1:8e868894cbcaf421c263f3555af4d29bef653420</id>
<content type='text'>
</content>
</entry>
<entry>
<title>remove ` from TTS and make events use lang.rs</title>
<updated>2026-09-03T15:50:12Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-09-03T15:50:12Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=74a3027d62b190419a840bfa35fc6c9d720e88fe'/>
<id>urn:sha1:74a3027d62b190419a840bfa35fc6c9d720e88fe</id>
<content type='text'>
Signed-off-by: salmonik &lt;salmonik@tuta.io&gt;
</content>
</entry>
<entry>
<title>feat: leaderboads</title>
<updated>2026-08-19T17:28:39Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-19T17:28:39Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=11507d00fb774e59afe2c304a6922f875865caee'/>
<id>urn:sha1:11507d00fb774e59afe2c304a6922f875865caee</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: local TTS via piper subprocess with Google fallback</title>
<updated>2026-08-18T21:18:37Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-18T21:18:37Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=b252c39517b9fce181d1a0fe4761404c7d981397'/>
<id>urn:sha1:b252c39517b9fce181d1a0fe4761404c7d981397</id>
<content type='text'>
- 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)
</content>
</entry>
</feed>
