Skip to content

@discordjs/voice 0.19.x DAVE encryption causes reconnect loops and zero audio capture #11419

@meepbot-oss

Description

@meepbot-oss

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

  1. Install @discordjs/voice 0.19.0 + discord.js 14.x (with or without @snazzah/davey)
  2. Bot joins a voice channel (most now have DAVE E2E encryption enabled by default)
  3. Subscribe to audio via VoiceReceiver
  4. Connection cycles: Signalling → Connecting → Ready → Disconnected → repeat
  5. Zero audio is ever received — no speaking events fire

Expected behavior

Bot successfully negotiates DAVE, connects to voice, and receives/sends audio.

Actual behavior

  • Endless reconnect loops
  • VoiceReceiver never fires speaking events
  • 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.0
  • discord.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.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions