# Discord gateway intents and the privileged three

> What gateway intents control, which three are privileged, and the 10,000-user threshold at which Discord reviews access to them.

- Canonical: https://discordtools.blog/blog/discord-gateway-intents-reference
- Published: 2026-08-30
- Author: The Index desk
- Facts checked: 2026-09-01
- Sources:
  - Discord developer docs — Gateway (https://docs.discord.com/developers/events/gateway) — checked 2026-09-01
- Publication: The Index, an independent site not affiliated with Discord Inc.

---
Every gateway connection declares what it wants to hear about. That declaration is a bitfield of
intents, and getting it wrong produces the most confusing class of bot bug there is: everything
connects, nothing errors, and the data is empty.

## The three privileged intents

| Intent | Bit | What it unlocks |
| ------ | --- | --------------- |
| `GUILD_MEMBERS` | `1 << 1` | Member join, update and remove events; the full member list |
| `GUILD_PRESENCES` | `1 << 8` | Presence and status updates |
| `MESSAGE_CONTENT` | `1 << 15` | The text of messages the bot can otherwise only see the metadata of |

Everything else is enabled by asking for it. These three are gated because each exposes something
Discord treats as sensitive: who is in a server, what they are doing, and what they said.

## The threshold that matters

An app with fewer than 10,000 users can turn all three on from the Developer Portal with no
review. Past that, continued access goes through a request describing what the app does with the
data. The number counts **unique users across every server the app is in** — which means a bot
installed in a handful of very large communities crosses it long before a bot in hundreds of small
ones. Operators who plan for "we'll deal with it at a hundred servers" are measuring the wrong
quantity.

## MESSAGE_CONTENT is the odd one

The other two switch event families on and off. `MESSAGE_CONTENT` does something different: the
bot still receives message events without it, but `content`, `embeds`, `attachments`,
`components` and `poll` arrive empty. There are exemptions — messages that mention the bot,
messages in DMs with it, and its own messages — which is precisely what makes the failure so hard
to diagnose. A prefix-command bot appears to work when you test it by mentioning the bot, and does
nothing when a real user types the prefix.

## Diagnosing an intent problem

Three symptoms, one cause each:

- **Empty message text from everyone except you** — `MESSAGE_CONTENT` is off.
- **The member cache never fills, and join events never fire** — `GUILD_MEMBERS` is off.
- **Everyone appears offline** — `GUILD_PRESENCES` is off.

None of these raise an exception, because from the gateway's point of view nothing went wrong: the
bot asked for a narrower stream and got it. Intents are also fixed for the life of a session, sent
in the identify payload, so enabling one in the portal changes nothing until the bot reconnects.