feat(voice): add memberCanJoinVoiceListenOnly helper (Phase 72)

Lurkers without custom-role permissions may join voice in receive-only
mode. Full members may also opt into listen-only. Exported alongside
memberCanParticipate for platform and smoke tests.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-22 02:10:38 -04:00
co-authored by Cursor
parent 50fe459251
commit 631c768c2c
+8
View File
@@ -94,6 +94,13 @@ function memberCanParticipate (member, customRoles = []) {
return mask > 0 return mask > 0
} }
/** Lurkers without participate may join voice receive-only; full members may opt in via listenOnly. */
function memberCanJoinVoiceListenOnly (member, customRoles = []) {
if (!member) return false
if (memberCanParticipate(member, customRoles)) return true
return String(member.roles) === MEMBER_ROLES.LURKER
}
function roleHasPermission (roles, perm) { function roleHasPermission (roles, perm) {
const key = String(roles || MEMBER_ROLES.MEMBER) const key = String(roles || MEMBER_ROLES.MEMBER)
return ((ROLE_PERMISSIONS[key] || 0) & perm) === perm return ((ROLE_PERMISSIONS[key] || 0) & perm) === perm
@@ -327,6 +334,7 @@ module.exports = {
ROLE_PERMISSIONS, ROLE_PERMISSIONS,
roleHasPermission, roleHasPermission,
memberCanParticipate, memberCanParticipate,
memberCanJoinVoiceListenOnly,
memberHasPermission, memberHasPermission,
canModifyMessage, canModifyMessage,
RPC, RPC,