Commit graph

77 commits

Author SHA1 Message Date
Claude Code
2e7f3bca7c Upgrade @discordjs/voice to 0.19 for DAVE E2EE negotiation 2026-03-05 01:12:35 +01:00
Claude Code
a34cc7e08d Add @snazzah/davey for Discord DAVE E2EE voice support 2026-03-05 00:54:44 +01:00
Claude Code
8cef19f724 Fix: ensureConnectionReady raeumt kaputte Connection auf statt sie zurueckzugeben 2026-03-05 00:31:55 +01:00
Claude Code
0b849b7775 Fix: Voice reconnect Endlosschleife verhindern
- Re-Entranz-Guard (isReconnecting) verhindert parallele Handler
- Max 3 Reconnect-Versuche bevor fresh join
- Exponentieller Backoff (2s, 4s, 6s) zwischen Retries
- Ready-State setzt Counter zurueck

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 22:34:10 +01:00
Bot
db9a18b367 Fix: TypeScript-Fehler im multer Upload-Endpoint
- @types/multer zu devDependencies hinzugefügt (fehlte → TS7016)
- Explizite Callback-Typen in diskStorage/fileFilter (TS7006)
- Express.Multer.File durch lokalen MulterFile-Type ersetzt (TS2694)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:25:10 +01:00
Bot
52c86240af Feat: Drag & Drop MP3/WAV Upload mit Progress-Tracking
Backend:
- multer reaktiviert (war auskommentiert) mit diskStorage + Collision-Handling
- /api/upload (POST, admin-protected): bis zu 20 Dateien gleichzeitig
- MP3/WAV-Filter (50MB Limit), sofortige Hintergrund-Normalisierung nach Upload

Frontend:
- Globale window dragenter/dragleave/drop Listener mit Counter gegen false-positives
- Drag-Overlay: Vollbild-Blur + animierter Drop-Zone (pulsierender Accent-Border, bouncing Icon)
- Upload-Queue: floating Card bottom-right mit Per-Datei Progressbar + Status-Icons
  (sync-Animation beim Hochladen, check_circle grün, error rot)
- Auto-Refresh der Soundliste + Analytics nach Upload
- Auto-Dismiss der Queue nach 3.5s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:15:07 +01:00
Bot
a61663166f Config: NORM_CONCURRENCY Default auf 2 (i5/i7 Zielplattform)
Standard von 4 auf 2 gesenkt – passend für i5-13400 (10-Kern Target).
Lässt mehr Headroom für Discord-Wiedergabe und Node.js-Event-Loop.
Per NORM_CONCURRENCY env var weiterhin anpassbar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:30:37 +01:00
Bot
7a7056d72b Perf: Paralleler Norm-Cache-Sync mit Worker-Pool
Sequentieller Sync ersetzt durch parallele Worker:
- Standard: 4 gleichzeitige ffmpeg-Prozesse (NORM_CONCURRENCY=4)
- Konfigurierbar per NORM_CONCURRENCY env var
- Sync-Zeit bei vielen Sounds 4x schneller (linear mit Parallelität)
- Logging gibt Parallelität und Dauer aus

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:29:53 +01:00
Bot
68414ac257 Perf: Vollständiger Norm-Cache-Sync beim Start + Auto-Cache bei Upload/Import
- syncNormCache() beim Serverstart: normalisiert ALLE Sounds (nicht nur Top 50)
  und räumt verwaiste Cache-Dateien automatisch auf
- DM-Upload: neue Datei wird sofort im Hintergrund normalisiert
- URL-Import: Datei wird vor dem Abspielen normalisiert → direkt aus Cache
- Detailliertes Logging: neu/vorhanden/fehlgeschlagen/verwaist + Dauer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:27:33 +01:00
Bot
83b8f1acac Fix: Loudnorm-Cache korrekt als Stream lesen + Tee-Caching
Zwei Fehler behoben:
1. Gecachte PCM-Datei wurde als Pfad-String an createAudioResource übergeben
   → discord.js versuchte die headerlose PCM als Container zu proben → Rauschen/Stille
   Fix: fs.createReadStream() + StreamType.Raw

2. Erster Play wartete auf komplette ffmpeg-Verarbeitung bevor Wiedergabe startete
   Fix: Tee-Stream — ffmpeg-Output wird gleichzeitig an Player UND Cache-Datei geschrieben
   → Sofortige Wiedergabe auch beim ersten Mal, Cache wird nebenbei gefüllt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:24:47 +01:00
Bot
4b4a61b2bd Perf: Loudnorm-Cache für minimale Play-Latenz
ffmpeg loudnorm läuft jetzt nur noch beim allerersten Play eines Sounds.
Das Ergebnis wird als PCM in .norm-cache/ gespeichert und danach direkt
abgespielt (kein ffmpeg-Spawn mehr → praktisch null Overhead).

- .norm-cache/ Verzeichnis mit automatischer Invalidierung (Quell-mtime)
- Cache-Cleanup bei Admin delete/rename
- Hintergrund-Warmup beim Serverstart: Top-50 Sounds vorab normalisieren
- Fallback auf direktes Abspielen wenn ffmpeg fehlschlägt
- .norm-cache wird aus Soundliste gefiltert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:16:56 +01:00
Bot
9130a205f0 Refactor: Backend-Optimierungen + Volume-Debounce
- /api/play delegiert an playFilePath() statt ~120 Zeilen Duplikat-Code (inkl. fehlende Loudnorm)
- safeSoundsPath() Helfer gegen Path-Traversal bei Admin delete/rename
- writePersistedStateDebounced() reduziert Disk-I/O bei Play-Countern (2s Debounce)
- /api/sounds nutzt listAllSounds() statt duplizierte Dateisystem-Scans
- /api/play-url vor catch-all Route verschoben (war unreachable in Produktion)
- Frontend Volume-Slider mit 120ms Debounce (weniger API-Calls beim Ziehen)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:08:38 +01:00
Bot
5a41b6a622 Add MP3 URL import and analytics widgets 2026-03-01 18:56:37 +01:00
Bot
f90401a009 Feat: Now-Playing serverseitig syncen + in Topbar verschieben
Backend:
- nowPlaying Map trackt aktuell gespielten Sound pro Guild
- SSE broadcast { type: 'nowplaying' } bei play und stop
- nowplaying im SSE-Snapshot für neue Clients
- playFilePath Helper broadcastet ebenfalls (Party Mode)

Frontend:
- SSE-Handler für nowplaying Events (sync über alle Clients)
- Now-Playing als Pill-Badge in der Topbar (rechts, neben Channel)
- Bottombar komplett entfernt
- Fade-in Animation und accent-farbige Pill
- --accent-rgb CSS Variable für alle Themes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 16:00:22 +01:00
Bot
a5f74d3508 fix(deps): update libsodium for node 20 esm resolution 2026-02-26 14:32:41 +01:00
vibe-bot
c727b445a4 fix(exit-logic): Exit nur bei Disconnect (after is null), bei Kanalwechsel unterdrücken; Lifecycle-Listener nur einmal registrieren und MaxListeners erhöhen 2025-08-11 00:14:07 +02:00
vibe-bot
0ae0817598 feat(entrance-exit): Support ?entrance remove / ?exit remove (clear mapping); Help-Text aktualisiert 2025-08-11 00:00:08 +02:00
vibe-bot
9f7aa5fc94 fix(entrance-exit): Trigger auch bei Channel-Wechsel; zusätzliche Logs; robustes Join falls keine aktive Verbindung 2025-08-10 23:50:51 +02:00
vibe-bot
64d2e91efa chore(logging): Logge gesetzte ?entrance/?exit Zuordnungen (user tag + file) 2025-08-10 23:43:40 +02:00
vibe-bot
6206087362 fix(entrance-exit): Log-Ausgaben + robustes Rejoin auf Ziel-Channel vor Playback; ignore self-events 2025-08-10 23:35:58 +02:00
vibe-bot
0fc533bbd5 fix(entrance-exit): Stelle sicher, dass VoiceStateUpdate/DM-Commands via expliziten Intents (Guilds, GuildVoiceStates, DirectMessages, MessageContent) aktiv sind 2025-08-10 23:26:00 +02:00
vibe-bot
8604e5591d feat(entrance-exit): Bot joint dem Nutzer nach (Entrance) und spielt Sound; Exit-Sound beim Verlassen; ?entrance/?exit nutzen Discord-User statt Namen 2025-08-10 23:18:43 +02:00
vibe-bot
62a4a6a55c feat(entrance-exit): Entrance/Exit-Sounds pro Nutzer via DM (?entrance/?exit); Playback bei Join/Leave wenn Bot im Channel; ?help aktualisiert; ?restart entfernt 2025-08-10 23:10:51 +02:00
vibe-bot
914693df1b docs(changelog): add CHANGELOG 1.1.1; chore(version): bump to 1.1.1 and update badges/env; docs(feature): FEATURE_BRANCH.md Hinweise ergänzt 2025-08-10 21:23:13 +02:00
vibe-bot
032c269798 feat(volume): Live-Sync der Lautstärke über SSE (Broadcast bei Änderung + Snapshot); Frontend reagiert auf Updates 2025-08-10 21:15:39 +02:00
vibe-bot
dda30d48fa chore(version): Entfernt serverseitige Versions-/Build-Logik; Nightly-Badge bleibt im Header 2025-08-10 19:49:35 +02:00
vibe-bot
7a067aa95f feat(version): API /api/health liefert build/version; UI zeigt Server-Version im Nightly-Badge 2025-08-10 19:43:09 +02:00
vibe-bot
e83954624c feat(channel): Serverweite Channel-Auswahl mit Persistenz und SSE-Broadcast; Frontend passt Auswahl global an 2025-08-10 18:47:33 +02:00
vibe-bot
62890e0e85 Feat: Toggle für Fuzzy-Suche (default OFF), Server respektiert ?fuzzy=1/0 2025-08-10 17:51:07 +02:00
vibe-bot
d975114768 Feat: Serverseitige Fuzzy-Suche für /api/sounds und Client-Filter vereinfacht 2025-08-10 02:59:25 +02:00
vibe-bot
6f51c493ed Nightly: Revert Drag & Drop Upload (server endpoint + header handlers removed) 2025-08-10 02:16:09 +02:00
vibe-bot
9e7b572feb Nightly: Drag & Drop Upload im Header (Admin) + Server-Upload-Endpoint (/api/upload, MP3/WAV) 2025-08-10 01:47:17 +02:00
vibe-bot
c1f4d0f3a0 Nightly: SSE-Client-Handling verbessert (separater Hook, Snapshot/Party-Set + Ping); UI synchronisiert State pro Guild 2025-08-10 00:11:38 +02:00
vibe-bot
21b4e9bd0c Nightly: Partymode-Status global per SSE /api/events Broadcast; Panic/Stop/Start senden Status an alle Clients 2025-08-09 23:20:13 +02:00
vibe-bot
9bb402edd3 Nightly: Partymode serverseitig Start/Stop Endpunkte + Panic stoppt global; Frontend triggert Party-Start/Stop 2025-08-09 22:43:13 +02:00
vibe-bot
85a148d45f Nightly: Badge-Entfernen ohne Modal neuer Endpoint /badges/clear und UI-Button 'Badges entfernen' 2025-08-09 21:12:02 +02:00
vibe-bot
8795657f69 Nightly: Badges für Sounds (auto /, plus Custom via Admin), Kategorien-UI erweitertet (anlegen/zuweisen) 2025-08-09 17:27:17 +02:00
vibe-bot
3d1a6ca60b Nightly: Kategorien eingeführt Persistenz (state.json), API (CRUD + Bulk-Assign), Sounds-Filter unterstützt categoryId 2025-08-09 17:16:37 +02:00
vibe-bot
774bfb5adf chore: sync working tree before switching branches 2025-08-09 16:15:42 +02:00
vibe-bot
8662a5fbc0 Fix: Build-Info über API statt Build-Zeit - korrekte Version/Channel-Anzeige zur Runtime 2025-08-09 16:07:52 +02:00
vibe-bot
c44d9b7f87 Fix: UTF-8 Support für Datei-Umbenennung - Leerzeichen und Umlaute (äöü) jetzt erlaubt 2025-08-09 15:57:18 +02:00
vibe-bot
bf9d6d60e3 Persistenz: state.json ins Sounds-Volume verschoben (Migration vom alten Pfad). totalPlays bleibt über Deployments erhalten 2025-08-09 00:31:46 +02:00
vibe-bot
a0a45c97f9 Backend: WAV-Unterstützung hinzugefügt (Listing, DM-Upload, Play-Resolver, play-url Download) und Helptext aktualisiert 2025-08-09 00:00:55 +02:00
vibe-bot
0a95746d04 feat(stats): totalPlays Zähler persistent; Health-Endpoint liefert totalPlays; UI zeigt Gesamtzahl 2025-08-08 20:50:11 +02:00
vibe-bot
7f4b60c0bd feat(audio): ffmpeg loudnorm Laufzeit-Normalisierung; Nerdinfos: Top 3 Most Played als Tab; Playszählung 2025-08-08 20:05:03 +02:00
vibe-bot
73ec23b585 chore(deps): entferne ytdl-core/youtube-dl-exec (nicht mehr genutzt); reduziert transitive Altlasten inkl. inflight 2025-08-08 19:42:32 +02:00
vibe-bot
adef12a1cb chore(deps): bump @discordjs/voice to ^0.18 and multer to ^2 to address deprecations 2025-08-08 19:39:31 +02:00
vibe-bot
916f0ea846 fix(commands): '?restart' ohne createMessageCollector Bestätigung per '?restart y' 2025-08-08 19:35:04 +02:00
vibe-bot
250154bfab feat(commands): Bot-Commands ?help/?list/?restart; DM-Uploads weiter möglich; Frontend: RANDOM-Button neben PANIK 2025-08-08 19:31:02 +02:00
vibe-bot
b70703d51b feat(mp3): Erfolg-/Fehlerstatus beim Download; Panik-Button (Stop-Endpoint) und UI-Badge; interne playFilePath-Hilfe 2025-08-08 18:40:40 +02:00