Discord bot intents and permissions
What Gateway Intents are
Gateway Intents control which Discord events your bot receives. Discord introduced them to reduce bot data exposure: a bot only sees what its declared intents allow.
Three intent categories:
- Standard intents. Always available. Examples: GUILDS, GUILD_MEMBERS metadata, GUILD_MESSAGES.
- Privileged intents. Require Discord approval at scale. MESSAGE_CONTENT, GUILD_MEMBERS (full details), GUILD_PRESENCES.
- Specific intents. Voice state, typing, reactions.
AskVault declares the minimum needed for its operation: 4 standard intents plus 1 privileged.
Intents AskVault uses
Required:
GUILDS. Receive guild (server) join/leave events. Used to track which servers the bot is in.GUILD_MESSAGES. Receive message events. Bot won't see message content without the next intent.MESSAGE_CONTENT(privileged). See the actual text of messages. Required for question-answering.DIRECT_MESSAGES. Receive DMs to the bot.GUILD_MEMBERS(privileged, optional). Read member list. Required only if you want member-specific personalization.
Optional, off by default:
GUILD_PRESENCES. Online/offline status. Not used by AskVault.GUILD_VOICE_STATES. Voice channel state. Not used.
Privileged-intent approval
For bots in over 100 servers, Discord requires manual approval of privileged intents.
Process:
- Open Discord Developer Portal > Applications > [your bot].
- Bot tab > Privileged Gateway Intents.
- Toggle MESSAGE_CONTENT INTENT and GUILD_MEMBERS INTENT (if needed).
- For under 100 servers: instantly enabled. For over 100 servers: submit verification request, approval takes 1 to 5 business days.
Verification questionnaire asks why you need each intent. Standard answers:
- MESSAGE_CONTENT. "Our bot answers user questions from a knowledge base. Without message content, we can't read the question."
- GUILD_MEMBERS. "We support member-specific personalization based on roles. Server admins opt in per member."
Most well-explained applications are approved.
Setup walkthrough
About 15 minutes.
Step 1: create a Discord application
- Visit
discord.com/developers/applications. - Click "New Application". Name it (e.g., "Acme Support").
- Save.
Step 2: add a bot user
- Click "Bot" in the left sidebar.
- Click "Add Bot".
- Pick a username and avatar. Both visible to users.
- Copy the bot token. Keep it secret.
Step 3: enable intents
- Bot tab > Privileged Gateway Intents.
- Enable MESSAGE_CONTENT INTENT.
- Optionally enable GUILD_MEMBERS INTENT.
- Save.
Step 4: generate OAuth URL
- OAuth2 tab > URL Generator.
- Scopes: pick
botandapplications.commands. - Bot permissions: pick:
- View Channels
- Send Messages
- Read Message History
- Use Slash Commands
- Embed Links
- Attach Files
- Copy the generated URL.
Step 5: invite the bot to your server
- Paste the OAuth URL in a browser.
- Pick the server to add the bot to.
- Authorize. Bot appears in the server within 60 seconds.
Step 6: connect to AskVault
- Open Deploy Hub > Discord > Connect.
- Paste the bot token.
- Click Verify. Should connect within 30 seconds.
Test by mentioning the bot or using a slash command in any channel.
OAuth scopes
Two scopes requested:
bot. Standard bot scope. Lets the bot join servers.applications.commands. Lets the bot register slash commands.
We don't request:
guilds.join(auto-join servers).gdm.join(group DM access).webhook.incoming(create webhooks).
Minimum-permission principle.
Bot permissions explained
What each permission does:
- View Channels. Required to see channels the bot is in.
- Send Messages. Required to respond.
- Read Message History. Required for context (the bot reads recent messages, not entire channel history).
- Use Slash Commands. Required for
/askand similar commands. - Embed Links. Required for rich-card responses with cited sources.
- Attach Files. Required to send PDF or image attachments back to users.
Optional permissions:
- Mention Everyone. Not requested. Bot never mentions @everyone or @here.
- Manage Messages. Not requested. Bot can't delete user messages.
- Manage Roles. Not requested. Bot can't assign or remove roles.
If a server admin removes some optional permissions, the bot continues operating with reduced features.
Slash commands
AskVault registers two default commands:
/ask [question]. Asks the bot anything./handoff. Escalates to a human agent (ifescalate_to_humanskill is enabled).
Customize the command list under Deploy Hub > Discord > Commands. Each command's description must be 1-100 characters.
Channel-scoped operation
By default, the bot operates in any channel it's added to. Restrict to specific channels:
- Deploy Hub > Discord > Channel Allowlist.
- Enter channel IDs (right-click channel > Copy ID; requires Developer Mode in Discord).
- Save.
Bot only responds in allowlisted channels. Useful for limiting bot scope to #support and #help, not every channel.
DM handling
Direct messages to the bot trigger 1:1 conversations:
- Privacy. DMs are private; no other server members see them.
- Identity. AskVault associates DM conversations with the Discord user ID.
- Persistence. Conversation history persists across DM sessions.
Disable DM support under Deploy Hub > Discord > DM Mode.
Audit logging
Every bot action logs:
- Server (guild) ID.
- Channel ID.
- User ID.
- Action (message sent, slash command invoked, etc.).
- Timestamp.
Visible under Dashboard > Audit Log. Discord-side audit log (Server Settings > Audit Log) also tracks bot actions.
Rate limits
Discord rate-limits bots:
- 5 requests per second per guild (general).
- 5 messages per 5 seconds per channel (message sends).
- 50 commands per minute per user (slash commands).
AskVault auto-throttles; you shouldn't see rate-limit errors in normal usage. High-volume bots may need to request elevated limits from Discord.
Planned features (on the roadmap)
Documented for accuracy:
- Thread support. Today, the bot responds in the channel where mentioned. Native thread-creation for long replies planned.
- Voice channel support. Today, text-only. Voice channel transcription planned.
- Auto-mod integration. Today, no integration with Discord AutoMod. Planned: sentiment-based routing alongside AutoMod actions.
Limits
- Servers per bot. Up to 100 without verification, more after Discord approval.
- Channels per server (bot accessible). No hard limit.
- Message rate. 5 per second per guild (Discord-enforced).
- Bot token rotation. Instant via Developer Portal.
Common pitfalls
Bot doesn't see message content. MESSAGE_CONTENT intent not enabled. Toggle in Developer Portal.
Slash commands not appearing. applications.commands scope missing from OAuth URL. Re-invite the bot.
Bot mentioned but doesn't reply. Bot doesn't have Send Messages permission in that channel. Check channel permissions.
Privileged intent rejected. Discord verification team needs more context. Resubmit with a clearer explanation.
Bot offline. Token rotated or revoked. Update AskVault with the new token.
FAQ
Can I use the same bot in multiple Discord servers?
Yes. One bot, multiple servers. AskVault tracks per-server conversations separately.
Do I need Discord Nitro to add a bot?
No. Bots are free. Nitro is for users, not bots.
Can users in a server see other users' DM conversations with the bot?
No. DMs are 1:1 between user and bot. Other members never see them.
What happens when my bot exceeds 100 servers?
Discord requires verification (privileged intent re-approval, business info). Submit via the Developer Portal. Approval takes 1 to 5 business days.
Can I migrate from another Discord bot platform?
Yes. Update the bot token in AskVault and re-invite with the new OAuth URL. Existing servers stay; user conversations continue.
Related guides
- Discord setup
- Telegram BotFather setup
- Escalate to human skill
- Webhooks reference
- Internal knowledge base use case