Discord.js V14 enables three intents by default: Guilds, GuildMembers, and MessageContent
When you create a new Discord bot using Discord.js V14 without explicitly setting intents, the library automatically activates Guilds, GuildMembers, and MessageContent. These three intents let your bot receive events about servers it joins, members in those servers, and the actual text of messages people send. Any other intent — like presence updates, voice state changes, or direct messages — requires you to request it in your code.
The reason Discord limits default intents is to reduce the amount of data flowing to bots that don't need it. A bot that only responds to slash commands doesn't need to know when someone's status changes to "away", so Discord doesn't send that data unless the bot asks for it. This protects user privacy and reduces server load across the platform.
Key Takeaways
- Guilds, GuildMembers, and MessageContent intents are on by default in Discord.js V14, so your bot receives server events, member information, and message text without extra setup.
- All other intents — including DirectMessages, Presences, and VoiceStates — must be explicitly enabled in your code or your bot will not receive those events.
- You must also request privileged intents (GuildMembers, MessageContent, and Presences) in the Discord Developer Portal before your bot can use them.
- If your bot is in more than 100 servers, Discord requires you to have a valid reason for each privileged intent you request, or the bot will not receive those events.
The three default intents and what they do
Guilds is the foundation intent. It sends your bot events whenever a server (guild) is created, updated, or deleted, and whenever your bot joins or leaves a server. Without this intent, your bot would not know which servers it belongs to or when channels are added or removed. This intent is always on and cannot be disabled.
GuildMembers sends events about people joining, leaving, or updating their profile in a server. This includes nickname changes, role additions, and when someone leaves the server. It is a privileged intent, which means you must enable it both in your code and in the Discord Developer Portal before your bot can receive these events.
MessageContent gives your bot access to the actual text of messages sent in servers where it has permission to read messages. Without this intent, your bot receives a message event but cannot see what the message says — only metadata like who sent it and when. This is also a privileged intent that requires setup in both your code and the Developer Portal.
How to enable additional intents in your code
To request intents beyond the three defaults, you pass them when creating your Discord client. In Discord.js V14, you use the GatewayIntentBits object to specify which intents you want. Here is the basic pattern:
You import GatewayIntentBits from discord.js, then pass an array of intents to the client constructor. For example, if you want to receive direct messages, you would add DirectMessages to your intents array. If you want presence updates (when someone goes online or offline), you add Presences. You can request multiple intents at once by listing them all in the array.
A common setup for a bot that responds to messages and slash commands looks like this: Guilds (default), GuildMembers (default), MessageContent (default), and DirectMessages if you want the bot to respond in DMs. If your bot tracks user activity or status, you would also add Presences.
Privileged intents and the Developer Portal
Three intents are marked as privileged because they expose sensitive user information: GuildMembers, MessageContent, and Presences. Before your bot can use any of these, you must enable them in the Discord Developer Portal under your application settings, in the "Bot" section.
When you first enable a privileged intent in the Portal, Discord asks you to verify that your bot has a legitimate reason to access that data. For example, if you enable MessageContent, you might explain that your bot needs to read messages to filter spam or respond to commands. Discord reviews this information, especially if your bot is in more than 100 servers. If you cannot provide a clear reason, or if your reason does not match what your bot actually does, Discord may revoke the intent.
If your bot is in 100 servers or fewer, you can usually enable privileged intents without review. Once your bot grows beyond 100 servers, Discord requires verification before granting access. This is why many bots ask you to invite them to a small test server first — to stay under the review threshold while they are in development.
What happens if you request an intent you did not enable in the Portal
If you add an intent to your code but do not enable it in the Discord Developer Portal, your bot will not crash or throw an error. Instead, it simply will not receive events for that intent. For example, if you request Presences in your code but forget to enable it in the Portal, your bot will not receive any presence update events, and any code that depends on those events will never run.
This can be confusing to debug because there is no warning — the bot starts normally, but certain features silently do not work. The solution is to check the Developer Portal and confirm that every privileged intent your code requests is also enabled there.
A table of all intents and their defaults
| Intent Name | Default in V14 | Privileged | What It Does |
|---|---|---|---|
| Guilds | Yes | No | Server create, update, delete, and bot join/leave events |
| GuildMembers | Yes | Yes | Member join, leave, update, and role change events |
| MessageContent | Yes | Yes | Access to the text content of messages |
| DirectMessages | No | No | Messages sent to the bot in DMs |
| Presences | No | Yes | User online/offline status and activity updates |
| GuildBans | No | No | Member ban and unban events |
| GuildEmojisAndStickers | No | No | Emoji and sticker create, update, delete events |
| GuildIntegrations | No | No | Integration create, update, delete events |
| GuildWebhooks | No | No | Webhook create, update, delete events |
| GuildInvites | No | No | Invite create and delete events |
| VoiceStates | No | No | Voice channel join, leave, and mute/deafen events |
| GuildScheduledEvents | No | No | Server event create, update, delete, and user subscribe events |
| AutoModerationConfiguration | No | No | AutoMod rule create, update, delete events |
| AutoModerationExecution | No | No | AutoMod rule trigger events |
Common mistakes when setting up intents
The most common mistake is forgetting to enable privileged intents in the Developer Portal. You write the code correctly, request the intent in your GatewayIntentBits array, but the bot does not receive the events because the Portal is not configured. Always check both places: your code and the Portal settings.
Another mistake is requesting intents your bot does not actually need. If your bot only responds to slash commands and does not read message content, you do not need MessageContent. Requesting unnecessary intents wastes resources and can make your bot slower. Request only what you actually use.
A third mistake is assuming that enabling an intent in the Portal automatically enables it in your code. It does not. You must explicitly add it to your GatewayIntentBits array. The Portal just gives permission; your code has to ask for it.
Frequently Asked Questions
Do I have to enable MessageContent if my bot only uses slash commands?
No. Slash commands do not require MessageContent because the command text is sent separately from regular messages. If your bot only responds to slash commands and never reads the text of messages people send, you can leave MessageContent disabled. However, if you want to read or filter message content for any reason, you must enable it.
What happens if my bot grows past 100 servers and I have not verified my intents?
Discord will stop sending events for any privileged intents you have not verified. Your bot will continue to run, but features that depend on those intents will stop working. You will need to go to the Developer Portal, verify your reason for each privileged intent, and wait for Discord to review your request before those events resume.
Can I use a bot token from an older Discord.js version with V14?
Yes, the token itself does not change between versions. However, the intents you request in V14 must match what you have enabled in the Developer Portal. If you are upgrading from an older version, check that your intent setup in the code matches your Portal settings, because the default intents may have changed.
Is there a way to request all intents at once?
Yes. Discord.js provides a shorthand called GatewayIntentBits.All that requests every intent. However, this is not recommended for production bots because it requests intents you may not need, wastes resources, and can trigger additional review requirements from Discord. Request only the intents your bot actually uses.
Why does my bot receive message events but cannot read the message text?
This happens when you have not enabled the MessageContent intent. Your bot receives the message event because of the Guilds intent, but without MessageContent, the message object does not include the text. Check that MessageContent is enabled both in your code and in the Developer Portal.