feat: playlist shuffle, lazy resolution, TTS ducking, kept repair
Some checks failed
Some checks failed
Music: - #random URL fragment shuffles playlist tracks before enqueuing - Lazy playlist resolution: first 10 tracks resolve immediately, remaining are fetched in a background task - !kept repair re-downloads kept tracks with missing local files - !kept shows [MISSING] marker for tracks without local files - TTS ducking: music ducks when merlin speaks via voice peer, smooth restore after TTS finishes Performance (from profiling): - Connection pool: preload_content=True for SOCKS connection reuse - Pool tuning: 30 pools / 8 connections (up from 20/4) - _PooledResponse wrapper for stdlib-compatible read interface - Iterative _extract_videos (replace 51K-deep recursion with stack) - proxy=False for local SearXNG Voice + multi-bot: - Per-bot voice config lookup ([<username>.voice] in TOML) - Mute detection: skip duck silence when all users muted - Autoplay shuffle deck (no repeats until full cycle) - Seek clamp to track duration (prevent seek-past-end stall) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
25
TODO.md
25
TODO.md
@@ -130,6 +130,17 @@ is preserved in git history for reference.
|
||||
- [ ] SASL authentication
|
||||
- [ ] TLS/STARTTLS connection
|
||||
|
||||
## Performance
|
||||
|
||||
- [ ] Iterative `_extract_videos` in alert.py (51K recursive calls, 6.7s CPU)
|
||||
- [ ] Bypass SOCKS5 for local services (FlaskPaste, SearXNG)
|
||||
- [ ] Connection pool tuning (529 SOCKS connections per 25min session)
|
||||
- [ ] Async HTTP client (aiohttp + aiohttp-socks) to avoid blocking executors
|
||||
- [x] Connection pooling via urllib3 SOCKSProxyManager
|
||||
- [x] Batch OG fetch via ThreadPoolExecutor
|
||||
- [x] HTTP opener caching at module level
|
||||
- [x] Per-backend error tracking with exponential backoff
|
||||
|
||||
## Mumble
|
||||
|
||||
- [x] Mumble adapter via TCP/TLS + protobuf control channel (no SDK)
|
||||
@@ -144,9 +155,23 @@ is preserved in git history for reference.
|
||||
- [x] Configurable voice profiles (voice, FX chain)
|
||||
- [x] Self-mute support (auto mute/unmute around audio)
|
||||
- [x] Bot audio isolation (ignore own bots in sound callback)
|
||||
- [x] Pause/unpause with position tracking, stale stream re-download, rewind + fade-in
|
||||
- [x] Autoplay continuous radio (random kept track, silence-aware, configurable cooldown)
|
||||
- [x] Periodic resume state persistence (survives hard kills)
|
||||
- [x] Track duration in `!np` (ffprobe), optional `!announce` toggle
|
||||
- [x] Direct bot addressing (`merlin: say <text>`)
|
||||
- [x] Self-deafen on connect
|
||||
- [ ] Per-channel voice settings (different voice per channel)
|
||||
- [ ] Voice activity log (who spoke, duration, transcript)
|
||||
|
||||
## Music Discovery
|
||||
|
||||
- [ ] Last.fm integration (API key, free tier)
|
||||
- [ ] `!similar` command -- find similar artists/tracks via Last.fm
|
||||
- [ ] `!tags` command -- show genre/style tags for current track
|
||||
- [ ] Auto-queue similar tracks when autoplay has no kept tracks
|
||||
- [ ] MusicBrainz fallback (no API key, 1 req/sec rate limit)
|
||||
|
||||
## Slack
|
||||
|
||||
- [ ] Slack adapter via Socket Mode WebSocket (no SDK)
|
||||
|
||||
Reference in New Issue
Block a user