-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Description
Which package is this bug report for?
voice (@discordjs/voice 0.19.0)
Issue description
DAVE E2E encryption handling in @discordjs/voice 0.19.x is broken in practice — bots enter reconnect loops and capture zero audio on voice channels with DAVE enabled (now the default on most channels).
This may be related to previously closed issues #11384 and #11387, but the core problem persists: voice connections are unusable.
Steps to reproduce
- Install
@discordjs/voice0.19.0 +discord.js14.x (with or without@snazzah/davey) - Bot joins a voice channel (most now have DAVE E2E encryption enabled by default)
- Subscribe to audio via
VoiceReceiver - Connection cycles: Signalling → Connecting → Ready → Disconnected → repeat
- Zero audio is ever received — no
speakingevents fire
Expected behavior
Bot successfully negotiates DAVE, connects to voice, and receives/sends audio.
Actual behavior
- Endless reconnect loops
VoiceReceivernever firesspeakingevents- Decryption errors:
Error: Failed to decrypt: DecryptionFailed(UnencryptedWhenPassthroughDisabled)
Error: Cannot read properties of undefined (reading 'decrypt')
at VoiceReceiver.onUdpMessage (receiver.js)
Error: WebSocket was closed before the connection was established
at Networking.onClose (Networking.js)
No explicit error about DAVE — fails silently.
Comparison with py-cord
py-cord 2.6.1 (Python) handles DAVE correctly on the exact same voice channel, same Discord server. Audio capture works immediately. This confirms the issue is in @discordjs/voice DAVE implementation, not Discord API or network.
Environment
@discordjs/voice: 0.19.0discord.js: 14.x- Node.js: v25.5.0
- OS: macOS Darwin 24.6.0
@snazzah/davey: tested both with and without
Priority
DAVE is now the default on Discord voice channels. This effectively makes @discordjs/voice audio receive broken for most use cases.