aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* 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
|
* unify settings api into one filesalmonik2026-03-234-68/+75
|
* normalised times on vclogs, and improved jarvis via reply chainingsalmonik2026-03-193-111/+74
|
* vclogs afk/active timesalmonik2026-03-191-10/+116
|
* I am perhaps too fast to pushsalmonik2026-03-181-41/+1
|
* requirementssalmonik2026-03-182-0/+38
|