Skip to content

v3.16.15

Choose a tag to compare

@ancsemi ancsemi released this 20 May 15:38

v3.16.15

Fixed

  • Version display regression from v3.16.14 (#5369). The v3.16.14 release tag was created without bumping package.json, so servers running v3.16.14 reported version v3.16.13 via GET /api/version and the session-info socket event. Corrected in this release.
  • Voice chat: ACTUAL ROOT CAUSE of the recurring self-vanish bug (#5347) — channel code rotation desync. Every time the bug hit, the server's auto-rotation timer had just rotated the channel code, but voice clients kept emitting voice-rejoin / request-voice-users / voice-mute-state with the old code. The server couldn't match the old code (it was just updated), and the existing channel-code-rotated handler only migrated this.currentChannel — never this.voice.currentChannel. Every voice client was stuck with a dead reference, the watchdog loop ran forever, peers couldn't connect, and manual leave+rejoin was the only way out.
    • Client now migrates voice-side state on rotation (this.voice.currentChannel and this.voice._softLeftChannel), not just the text-channel state.
    • Server now migrates the voice socket-room AND broadcasts the rotation event to the voice room too, so users in voice but not viewing the text channel still receive the update.
    • pendingVoiceLeave grace-period keys are rekeyed to the new code so an in-flight disconnect mid-rotation can still be cancelled correctly.
  • Voice chat: null audioCtx.currentTime crash on leave (voice.js:1829). The noise-gate setInterval and its hold-timeout could fire once after leave() nulled this.audioCtx, throwing Cannot read properties of null. Added guards so both paths bail safely if the audio context is gone.