You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.