Developer Portal
Experimental The bot & app platform is in active development. Self-hosted server support shipped on 2026-08-13 with a smaller feature surface than cloud. See what's supported.
← Docs

Gateway Intents

Intents are a bitfield you send on op:2 Identify that tells the gateway which event categories to dispatch to your bot. Identical bits and semantics to Discord. Your existing intent configuration works without changes.

Intent bits

All non-deprecated Discord intent bits are supported on GameVox. Where a feature doesn't exist on GameVox yet (e.g. Stage Channels, Scheduled Events), the bit is accepted but no events fire. Your library won't error.

IntentBitPrivilegedEvents
GUILDS1 << 0GUILD_CREATE, GUILD_UPDATE, GUILD_DELETE, CHANNEL_CREATE/UPDATE/DELETE, CHANNEL_PINS_UPDATE, GUILD_ROLE_CREATE/UPDATE/DELETE
GUILD_MEMBERS1 << 1GUILD_MEMBER_ADD, GUILD_MEMBER_UPDATE, GUILD_MEMBER_REMOVE, member chunking
GUILD_MODERATION1 << 2GUILD_BAN_ADD, GUILD_BAN_REMOVE. GUILD_AUDIT_LOG_ENTRY_CREATE accepted, no events yet
GUILD_EMOJIS_AND_STICKERS1 << 3Accepted, no events yet (fetch via REST if you need current state)
GUILD_INTEGRATIONS1 << 4Accepted, no events yet
GUILD_WEBHOOKS1 << 5Accepted, no events yet
GUILD_INVITES1 << 6Accepted, no events yet
GUILD_VOICE_STATES1 << 7VOICE_STATE_UPDATE, VOICE_SERVER_UPDATE
GUILD_PRESENCES1 << 8PRESENCE_UPDATE
GUILD_MESSAGES1 << 9MESSAGE_CREATE/UPDATE/DELETE/DELETE_BULK in guilds
GUILD_MESSAGE_REACTIONS1 << 10MESSAGE_REACTION_ADD, MESSAGE_REACTION_REMOVE. REMOVE_ALL / REMOVE_EMOJI accepted, no events yet (REST works)
GUILD_MESSAGE_TYPING1 << 11TYPING_START in guilds
DIRECT_MESSAGES1 << 12MESSAGE_* in DMs
DIRECT_MESSAGE_REACTIONS1 << 13MESSAGE_REACTION_* in DMs
DIRECT_MESSAGE_TYPING1 << 14TYPING_START in DMs
MESSAGE_CONTENT1 << 15Adds content, embeds, attachments, components to MESSAGE_*
GUILD_SCHEDULED_EVENTS1 << 16Accepted, no events yet
AUTO_MODERATION_CONFIGURATION1 << 20Accepted, no events yet
AUTO_MODERATION_EXECUTION1 << 21Accepted, no events yet

Privileged intents

Three intents are privileged on Discord and require manual approval once your bot is in 100+ servers: GUILD_MEMBERS, GUILD_PRESENCES, and MESSAGE_CONTENT.

On GameVox, all three are auto-approved when toggled on the application's Bot tab. The toggle exists so libraries that gate on portal-side approval don't close with 4014 Disallowed intents. There's no 100-server verification process to grant access. Flip the toggle, set the bit, done.

MESSAGE_CONTENT carve-outs

Matches Discord exactly. Even without MESSAGE_CONTENT, message content / embeds / attachments / components are included when:

  • The message is from your own bot (own messages always include content).
  • The message mentions your bot (by ID).
  • The message is in a DM with your bot.
  • The message is an interaction response your bot is the recipient of.

Events not yet emitted (but accepted intents)

Enabling the following intents is safe (the wire accepts them and your library won't error), but no events are published today. If your bot's logic depends on any of these, poll REST for now:

  • USER_UPDATE
  • GUILD_EMOJIS_UPDATE, GUILD_STICKERS_UPDATE
  • WEBHOOKS_UPDATE, INTEGRATION_CREATE/UPDATE/DELETE, INVITE_CREATE/DELETE
  • GUILD_AUDIT_LOG_ENTRY_CREATE
  • MESSAGE_REACTION_REMOVE_ALL, MESSAGE_REACTION_REMOVE_EMOJI (REST endpoints work)
  • THREAD_*, STAGE_INSTANCE_*, GUILD_SCHEDULED_EVENT_*, AUTO_MODERATION_*, MESSAGE_POLL_*

Self-hosted servers emit a further-reduced subset. See that page for the exact list.

Close codes you may see

  • 4013 Invalid intent(s): bit set above the valid mask (recheck your library's bit math).
  • 4014 Disallowed intents: privileged intent bit set without the corresponding toggle in the developer portal.

Example: setting intents

discord.js

const { GatewayIntentBits } = require('discord.js');

const intents =
    GatewayIntentBits.Guilds
  | GatewayIntentBits.GuildMessages
  | GatewayIntentBits.MessageContent;   // privileged, toggle in portal first

const client = new Client({ intents });

discord.py

intents = discord.Intents.default()
intents.members = True            # privileged
intents.message_content = True    # privileged
client = discord.Client(intents=intents)

← Back to docs