Permissions
Bots receive permissions as a Discord-shape 53-bit integer
bitfield. The bits and meanings match Discord; the values come
from GameVox's native group + channel permission tables. Bits
without a GameVox equivalent return 0.
Native → Discord mapping
| Discord bit | Hex | GameVox source |
|---|---|---|
| ADMINISTRATOR | 0x8 | groups.group_type IN ('owner', 'admin') |
| VIEW_CHANNEL | 0x400 | channel_permissions.view_channel / group_permissions.view_channels |
| READ_MESSAGE_HISTORY | 0x10000 | Same as VIEW_CHANNEL (no separate history toggle) |
| SEND_MESSAGES | 0x800 | send_messages |
| MANAGE_MESSAGES | 0x2000 | manage_messages |
| EMBED_LINKS | 0x4000 | can_post_links |
| ATTACH_FILES | 0x8000 | send_files |
| ADD_REACTIONS | 0x40 | add_reactions |
| MENTION_EVERYONE | 0x20000 | Admin-only in v1 |
| CONNECT (voice) | 0x100000 | join_voice |
| SPEAK | 0x200000 | speak_in_voice |
| STREAM (screen share) | 0x200 | screen_share |
| USE_VAD | 0x2000000 | use_vad (default true; setting false forces PTT) |
| KICK_MEMBERS | 0x2 | kick_users != 'deny' |
| BAN_MEMBERS | 0x4 | ban_users != 'deny' |
| MUTE_MEMBERS | 0x400000 | mute_users != 'deny' |
| MOVE_MEMBERS | 0x1000000 | move_users != 'deny' |
| MANAGE_CHANNELS | 0x10 | create_channels / edit_channels / delete_channels all not 'deny' |
| MANAGE_GUILD | 0x20 | edit_server != 'deny' |
| MANAGE_ROLES | 0x10000000 | manage_members |
| MANAGE_WEBHOOKS | 0x20000000 | Owner / admin in v1 |
| VIEW_AUDIT_LOG | 0x80 | Owner / admin in v1 |
Bits that always return zero
These have no equivalent in GameVox yet and are reported as unset. Bots that depend on them should degrade gracefully (most libraries treat a denied bit as "feature not supported here" already).
MANAGE_THREADS,USE_PUBLIC_THREADS,USE_PRIVATE_THREADS— threads are stubbed in v1.MODERATE_MEMBERS(timeout) — no native equivalent.USE_EMBEDDED_ACTIVITIES— no Activities feature.USE_SOUNDBOARD,SEND_VOICE_MESSAGES— not implemented.- Monetization bits — no Premium Apps.
Permission computation
Identical to Discord's 7-step algorithm:
- Start with
@everyonepermissions for the guild. - OR in every role the member has.
- If the result includes ADMINISTRATOR, short-circuit — they have everything.
- Apply
@everyonechannel overwrites (allow then deny). - Apply each role's channel overwrites (allow then deny).
- Apply the user's channel overwrites (allow then deny).
- If the channel is in a category, the category's overwrites apply at the role / user step too.
Role hierarchy
Native groups.rank maps to Discord
role.position. A bot can manage roles strictly
below its own highest role's position, matching
Discord's rules. Calls to PATCH .../members/{id}/roles/{rid}
with a role at or above the bot's top role return 403.
Timeouts
Discord's communication_disabled_until field has no
GameVox equivalent in v1. A PATCH to a member with
that field set returns 400 with a clear error. Use kick / mute
/ ban instead.