aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* feat: add local API support for OpenAI compatible APIssalmonik2026-06-035-136/+122
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* Fix voice reconnect race: reuse VoiceClient instead of destroying itsalmonik2026-05-211-11/+43
| | | | | | | | | | | | | | | The stale-connection path was calling _remove_voice_client() then creating a brand-new VoiceClient via channel.connect(). This created a race: VOICE_SERVER_UPDATE (triggered by Discord when the user joins voice) arrives between the destroy and the fresh-connect, gets consumed by the old client, and the new client never receives it — causing a 10s timeout waiting for got_both_voice_updates. Fix: after disconnect(), call vc.connect() on the same VoiceClient instance. The disconnect resets the state machine to 'disconnected' but the same VoiceConnectionState processes any events that arrive between disconnect and reconnect, so the state machine correctly reaches got_both_voice_updates.
* make the assistant simplersalmonik2026-05-211-90/+21
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* requirements shenaniganssalmonik2026-05-215-93/+61
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* reqs and test fixsalmonik2026-05-213-14/+16
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* Fix zombie voice client after gateway restartsalmonik2026-05-201-1/+1
| | | | | | | - play_tts: run is_voice_client_alive() check regardless of is_playing() state. After a gateway restart, is_playing() can return True on a dead client, which previously bypassed the stale-detection guard (was: 'if is_connected and not is_playing')
* Fix stale-connection reconnect hang and TTS temp-file collisionsalmonik2026-05-202-5/+27
| | | | | | | | | | - _ensure_voice_client: call _remove_voice_client() when cleaning up stale or disconnected clients so the fresh connect doesn't hang for 30s waiting for Discord's stale state to clear - Reduce connect timeout from 30s to 10s for faster failure recovery - vclogs.py: use a unique temp filename per TTS call (include timestamp) instead of relying on PID alone, preventing concurrent TTS calls from clobbering each other's files
* Redirect play_commands imports to cogs.voice, remove audio_playback shimsalmonik2026-05-203-23/+14
| | | | | | | | - Update play_commands.py to import get_voice_manager from cogs.voice instead of going through the audio_playback.py re-export shim - Delete the audio_playback.py shim file entirely - Update test_music_audio.py imports to use cogs.voice.VoiceManager - Delete PLAN_VOICE_REFACTOR.md (plan is complete)
* Clean up consumers: replace polling with VoiceManager.play_source()salmonik2026-05-208-39/+47
| | | | | | | | | - cron.py: replace while-is_playing polling with VoiceManager.play_source() - vclogs.py: replace while-is_playing polling with VoiceManager.play_source() - stop.py: use VoiceManager.disconnect() instead of raw voice_client - join.py: use VoiceManager.connect() instead of raw channel.connect() - voice.py: add back join_by_channel_id() convenience method - Tests: update for new VoiceManager method names and signatures
* Fix TTS and AI voice playback bugssalmonik2026-05-202-12/+11
| | | | | | | | - tts.py _handle_voice_output: add missing voice_client.play() call via VoiceManager.play_source() — was creating the audio source and then doing nothing - ai.py: use VoiceManager.play_source() instead of passing an FFmpegPCMAudio object to play() which expects a string path
* Fold AudioPlaybackManager into VoiceManager + Future-based playsalmonik2026-05-203-442/+258
| | | | | | | | | | | | - Move all static helpers (validate_voice_channel, prepare_source, prepare_audio_source, etc.) from AudioPlaybackManager into VoiceManager - Add _play_await() using asyncio.Future + after callback, replacing all polling patterns and the 5-second sleep hack - Add play() high-level method and play_source() for pre-made sources - Unify connection logic under single _ensure_voice_client() - Remove dead Voice cog class and its setup() - Gut audio_playback.py to a re-export shim - Remove cogs.voice from main.py extensions
* health checks for vcsalmonik2026-05-203-33/+111
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* proper context for settingssalmonik2026-04-291-15/+13
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* damn short filessalmonik2026-04-291-6/+12
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* Refactor database connections and add integration testssalmonik2026-04-2935-104/+421
| | | | | | | | | | - Use context managers for sqlite3 connections in cron, vclogs, and database utils - Add URL helper utility for yt-dlp with clean_url_for_ytdlp function - Add slow integration test markers and new integration test files - Fix test imports to use conftest directly instead of tests.conftest - Improve downloader error handling and use COPYPARTY_URL_UPLOAD env var - Update pytest.ini with slow test markers and warning filters - Document slow test usage in AGENTS.md
* multitude of changes.salmonik2026-04-2820-236/+642
| | | | | | but primarly, use db for all data. Signed-off-by: salmonik <raisersoft@proton.me>
* better UX for web.pysalmonik2026-04-231-17/+5
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* uploader.py and voice fixessalmonik2026-04-205-10/+176
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* lil cron fixsalmonik2026-04-201-1/+1
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* fix filename handling in downloader.pysalmonik2026-04-201-4/+17
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* fix: proper aiohttp async context manager mocking in testsalmonik2026-04-191-5/+10
|
* fix: mock aiohttp instead of requests in external play testsalmonik2026-04-191-5/+8
|
* feat: add external URL playback support, fix vclogs audio handlingsalmonik2026-04-195-6/+253
|
* readd main.pysalmonik2026-04-191-0/+95
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* chore: update .gitignore, minor README fixsalmonik2026-04-192-2/+2
|
* test: improve test assertions and edge casessalmonik2026-04-1919-338/+172
|
* chore: add pycord dependency, update mainsalmonik2026-04-192-8/+7
|
* refactor: simplify cogs, reduce complexitysalmonik2026-04-1915-85/+127
| | | | | | - Remove unused imports and dead code - Cleaner error handling - Reduce cognitive complexity
* test: add cron tests + improve existing testssalmonik2026-04-193-90/+180
| | | | | | | - Add 15 tests for cron.py covering load/save, task management - Improve existing test assertions and coverage - Remove flaky plot tests - 93 tests now pass (up from 78)
* discontinue plots; too complex.salmonik2026-04-191-195/+0
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* error handling in plot.pysalmonik2026-04-191-11/+18
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* less info logging in cron.pysalmonik2026-04-191-3/+3
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* add a test suitesalmonik2026-04-1821-0/+1684
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* add support for x^2+y^2=0,4 and alikesalmonik2026-04-181-0/+61
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* refactor + preparing bot for public usesalmonik2026-04-1827-365/+775
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* add mathematical plottingsalmonik2026-04-173-1/+138
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* fix voice even moresalmonik2026-04-172-7/+10
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* add qr generation and decodingsalmonik2026-04-172-1/+150
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* add cron functionalitysalmonik2026-04-172-26/+405
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* make voice great againsalmonik2026-04-178-209/+278
| | | | Signed-off-by: salmonik <raisersoft@proton.me>
* Merge branch 'main' of https://codeberg.org/salmonik/senator-spermasalmonik2026-04-102-5/+36
|\
| * "fix" voice managementsalmonik2026-04-082-5/+36
| |
* | fix voice for the 9th time today, still on the waysalmonik2026-04-102-2/+3
|/
* make it work + visual changessalmonik2026-03-283-65/+75
|
* trigger changes or smthsalmonik2026-03-271-6/+27
|
* sanitize inputs for mathsalmonik2026-03-231-5/+53
|
* we moved to data foldersalmonik2026-03-231-2/+2
|
* add copyright clausesalmonik2026-03-231-1/+5
|
* play music using the serversalmonik2026-03-232-432/+104
|
* triggerssalmonik2026-03-231-0/+305
|