Discord Privileged Intents and MESSAGE_CONTENT in 2026

Published on | Updated

Discord privileged intents in 2026: since 10 June review starts at 10,000 users instead of 100 servers, with 90 days to apply and a yearly reapplication. What MESSAGE_CONTENT covers, code samples and common errors.

Rows of server racks with glowing purple cables in a data center

Discord has three privileged gateway intents: Guild Members, Guild Presences and Message Content. Since 10 June 2026, the point where you have to apply for them is no longer 100 servers. It is 10,000 unique users who can see your app across all the servers it is in. Below that, you switch the intents on in the Developer Portal and you are done. Above it, you get 90 days from Discord's notification to apply, your bot keeps working while it is under review, and approved apps have to reapply every year. Separately, App Verification is still required before a bot can grow past 100 servers.

This guide covers what intents are, what changed in June, what MESSAGE_CONTENT does and does not unlock, and the code and errors you will run into. Everything is checked against Discord's developer documentation and support articles as of 25 October 2026.

What gateway intents are

Discord delivers real-time events to your bot over a WebSocket connection called the Gateway. Intents are flags you send when your bot connects. They tell Discord which groups of events you want, so a bot that only answers slash commands does not receive every message and presence update in every server.

A few common ones:

  • Guilds: server structure, such as channels, roles and the guild create and update events.
  • Guild messages: message create, update and delete events in servers.
  • Guild members (privileged): member join, leave and update events, plus the ability to list all members of a server.
  • Guild presences (privileged): online status, activities and platform info.
  • Message content (privileged): access to what is inside messages, explained below.

On API v8 and newer, every intent you want has to be listed when you identify. If you leave one out, you simply do not get those events.

The three privileged intents

IntentWhat it gates
GUILD_MEMBERSMember join, leave and update events and listing all members in a server
GUILD_PRESENCESOnline and offline status, activities and platform info
MESSAGE_CONTENTThe content, embeds, attachments, components and poll fields of messages

Discord turns these off by default "due to the nature of their data", and its guide is blunt about using them: you may only enable what your app actually needs.

What changed on 10 June 2026

Discord's announcement lists four changes:

  1. The review threshold is based on users, not servers. "Previously, apps in fewer than 100 servers could access Privileged Intents by toggling them on in the Developer Portal, and apps in 100+ servers needed to apply for access." Now Discord counts the unique users who can see your app across all its servers, and above 10,000 you need to apply. Discord's own example: a bot in 50 large servers can hit the threshold, while a bot in 200 small servers might not.
  2. Approved apps reapply every year. You get a notification first, then 90 days to reapply.
  3. Apps keep working and growing during review. Before June, a bot that hit 100 servers was blocked from joining new servers until its review was done. Now it keeps its intents and can keep joining servers while the submission is open.
  4. App Verification and intent review are separate processes.
Your situationWhat to do
Fewer than 10,000 usersToggle the intents you need on the Bot page of the Developer Portal. No application
You reach 10,000 users with a privileged intent onApply within 90 days of the notification. Discord sends it by email and/or system DM and shows an alert in the Developer Portal
Access granted in an earlier reviewKeep using it, and reapply within 90 days when the yearly notification arrives
You miss the 90 day windowYour privileged intent access is removed. You can still apply again at any time

One catch: Discord does not show your app's user count in the Developer Portal. You find out you crossed 10,000 when the notification arrives.

App Verification still starts at 100 servers

Verification has not gone away. Discord's verification article still says: "Verification is required for your app to scale past 100 servers." You do it from the App Verification tab in the Developer Portal, which shows a checklist, and the owner of the team that owns the app has to verify their identity through Stripe.

So a bot in 150 small servers needs App Verification, but it may not need a privileged intent review if fewer than 10,000 users can see it. A bot in 60 large servers needs no verification yet, but it can already need an intent review.

What MESSAGE_CONTENT does and does not unlock

MESSAGE_CONTENT is the odd one out: it is not tied to a gateway event. It controls whether message objects carry their content, across the Gateway and the HTTP API. Without it, Discord sends empty values in the content, embeds, attachments, components and poll fields, with four exceptions listed in the Gateway documentation:

  • messages your app sends itself
  • messages in DMs with your app
  • messages that mention your app
  • the message a message context menu command is used on

In practice:

  • Prefix commands break without it. A bot that parses !command from normal messages sees empty content, unless users mention the bot.
  • Slash commands do not need it. Options arrive in the interaction, not in a message.
  • Moderation that scans every message needs it, and with it a clear explanation of what you do with the text if you pass 10,000 users.

Discord's advice for most bots is to move away from the intent: "Slash commands are the recommended replacement and don't require any privileged intents."

Turning intents on: portal and code

There are two places to enable a privileged intent, and you need both:

  1. Developer Portal: open your app, go to the Bot page, scroll to Privileged Gateway Intents and toggle what you need.
  2. Your code: request the same intents when the client connects.

If your code asks for a privileged intent that is not enabled in the portal, or that your app is not approved for, Discord closes the connection with close code 4014. Invalid intent values give close code 4013.

discord.js (v14)

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

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent, // privileged: toggle it in the Developer Portal too
  ],
});

client.on('messageCreate', (message) => {
  if (message.author.bot) return;
  if (message.content === '!ping') {
    message.reply('Pong.');
  }
});

client.login(process.env.DISCORD_TOKEN);

To drop the dependency on message content, register slash commands and handle them in client.on('interactionCreate', ...).

discord.py (2.x)

import os

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True  # privileged: toggle it in the Developer Portal too

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_message(message):
    if message.author.bot:
        return
    if message.content == '!ping':
        await message.channel.send('Pong.')
    await bot.process_commands(message)

bot.run(os.environ['DISCORD_TOKEN'])

Load the token from an environment variable and never commit it to git.

Which intents does your bot actually need?

  • Guilds: almost every bot.
  • Guild messages: if you react to messages being created, edited or deleted. Add Message Content only if you need the text.
  • Message content: only for prefix commands you cannot migrate yet, or features that must read arbitrary text, such as moderation or logging.
  • Guild members: welcome messages with the full member object, join logs, role sync. If you only look up a few members, fetch them when you need them instead of caching every member. That is one of the alternatives in Discord's You Might Not Need a Privileged Intent guide.
  • Guild presences: activity or status features. Most bots do not need it, and it is the noisiest intent.

Turning everything on "just in case" means more events, more memory and, past 10,000 users, a harder review. Our guide on Discord bot memory and intents shows what the member and presence caches cost.

Rate limits and event volume

More intents means more Gateway traffic, especially in big servers. Two limits are worth knowing:

  • Sending to the Gateway: Discord allows 120 gateway events per connection every 60 seconds, and an app that goes over is "immediately disconnected from the Gateway".
  • HTTP API: REST calls such as sending messages or fetching history have their own per-route limits, separate from the Gateway.

Reading message content does not change your REST limits, but bots that read every message often also fetch history, write logs or call outside APIs per message, and that can use up HTTP budgets quickly. Debounce where you can, use one response per interaction and shard when Discord tells you to. Our rate limits explainer and sharding guide go deeper.

Hosting notes

Gateway connections are long-lived. If your host puts idle processes to sleep or restarts them at random, you miss events and your bot reconnects more often than it should. On a VPS, run the bot under systemd, PM2 or Docker with a restart policy. If you would rather not manage that, our Discord bot hosting runs your bot with no sleep mode and an automatic restart when the process crashes.

FAQ

When does a Discord bot need to apply for privileged intents? Since 10 June 2026, when more than 10,000 unique users can see the app across all its servers. Discord then notifies the owner, and you have 90 days to apply. The old rule of applying at 100 servers no longer applies to intents.

Is App Verification still required at 100 servers? Yes. Discord's support article says verification is required for an app to scale past 100 servers. It is now a separate process from the privileged intent review.

Do I need MESSAGE_CONTENT for slash commands? No. Slash command options arrive in the interaction. You only need the intent to read the content of normal messages, apart from DMs, mentions, your own messages and context menu targets.

Why is message.content empty? Your bot is not receiving the Message Content intent. Check that the code requests it and that it is toggled on in the Developer Portal. A request for an intent the app may not use closes the connection with code 4014, so if the bot stays connected and content is still empty, the intent is usually missing from the code. Content in DMs, in messages that mention the bot and in the bot's own messages arrives either way.

What happens to my bot during review? It keeps its privileged intents and can keep joining servers while the submission is open. If Discord denies the request, you get a notice, and in some cases extra time to fix the submission.

Do approved bots have to reapply? Yes, once a year. Discord sends a notification first, and you have 90 days to reapply.

Related guides: Discord bot intents and the Gateway API | Discord Developer Portal guide | Slash commands guide | Discord API changes in 2026