Skip to content

v3.15.7

Choose a tag to compare

@ancsemi ancsemi released this 10 May 04:02

[3.15.7] - 2026-05-10

Critical hotfix for voice (#5347). The voice presence work in 3.15.4 added a getUserAllRoles call inside broadcastVoiceUsers but the helper was never destructured from createPermissions(db), so every voice user broadcast (join, leave, mute, deafen, ghost-prune) was throwing ReferenceError: getUserAllRoles is not defined. The error was swallowed by the async handler, so the server stayed up but broadcasts never completed. Clients kept showing whoever was last successfully broadcast, leavers stuck around as ghosts, rejoiners didn't appear. This is the actual root cause of the "voice list disagrees with reality" symptom.

Fixed

  • ReferenceError: getUserAllRoles is not defined on every voice broadcast (#5347). Added the missing destructure in setupSocketHandlers and forwarded it on the shared ctx.
  • PUT /api/auth/user-servers returned 500 PayloadTooLargeError once the saved server list exceeded ~50 entries. The global 16kb body parser in server.js was preempting the per-route 96kb limit in auth.js. Bumped the global limit to 128kb.

[3.15.6] - 2026-05-09

Follow-up fixes for personas (#5353).

Fixed

  • Persona :: autocomplete appeared in fullscreen DM view. The PiP input already suppressed it but the main #message-input (used when a DM is opened as a full channel view) still ran _checkPersonaTrigger. Added a guard that bails out when the active channel is a DM.
  • Nickname set for a user overrode the persona name on their messages. Message rendering called _getNickname(msg.user_id, ...) unconditionally, so any local nickname for the real account replaced the persona display name. Persona messages now use msg.username (the persona name) directly.