fix(soundboard): read MANAGE_SPACE from the space bitfield
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Canceled after 0s
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Canceled after 0s
The add-sound control was gated on channelPermissions, which carries the per-channel bitfield; MANAGE_SPACE lives in the space-level one. The check silently evaluated false for everybody, including owners, so the button never rendered and there was no way to add a sound at all. Also raise the clip cap to 2 MB — a 30-second clip at a high bitrate cleared 1 MB — and stop reporting every upload failure as 'too large', which sent people to shrink a file that was not the problem.
This commit is contained in:
@@ -39,6 +39,10 @@ export function VoiceControls() {
|
||||
|
||||
const activeDmCall = useVoiceStore((s) => s.activeDmCall);
|
||||
const channelPerms = useSpaceStore((s) => currentVoiceChannelId ? s.channelPermissions.get(currentVoiceChannelId) : undefined);
|
||||
// MANAGE_SPACE lives in the space-level bitfield, not the per-channel one —
|
||||
// reading it from channelPermissions silently yielded false for everyone.
|
||||
const spacePerms = useSpaceStore((s) => currentVoiceSpaceId ? s.spacePermissions.get(currentVoiceSpaceId) : undefined);
|
||||
const canManageSpace = hasPermissionBit(spacePerms, PermissionBits.MANAGE_SPACE);
|
||||
|
||||
// In DM calls, all permissions are granted; in space channels, check SPEAK and STREAM
|
||||
const isDmCall = !!activeDmCall;
|
||||
@@ -128,7 +132,7 @@ export function VoiceControls() {
|
||||
{showSoundboard && currentVoiceSpaceId && (
|
||||
<SoundboardPopover
|
||||
spaceId={currentVoiceSpaceId}
|
||||
canManage={hasPermissionBit(channelPerms, PermissionBits.MANAGE_SPACE)}
|
||||
canManage={canManageSpace}
|
||||
onClose={() => setShowSoundboard(false)}
|
||||
/>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user