Should Your LLM Bot Read Every Message? Probably Not

·5 min read·Updated
llmbotsdiscordtelegramprivacyarchitecture

Discord and Telegram both restrict what a bot can see by default — Message Content is a privileged intent, and Telegram bots run in privacy mode unless you change it. When you're building an ordinary bot, that shows up as a problem to solve. When you're building a model-backed bot, it's a design decision, and the restrictive default is usually the right answer. A bot that reads everything turns every message in every channel into potential model input, potential context, potential storage, and potential instructions from a stranger. A bot that only responds when addressed needs none of that visibility — and almost every LLM bot people actually want is the second kind.

The two settings, briefly

Both platforms gate this, and both fixes are documented elsewhere on this blog:

This post isn't about turning them on. It's about whether you should.

What "read everything" costs an LLM bot specifically

For a rules-based bot, broad visibility is cheap — you match a pattern and usually do nothing. For a model-backed bot, four costs land at once.

Money, if you respond. Every message you feed to a model is billed. A bot that considers every message in a busy server is buying opinions nobody asked for. Even a cheap "should I reply to this?" classifier call is a call, multiplied by your traffic.

Money, if you remember. Broad visibility plus per-channel memory means the whole channel's chatter enters the context you resend every turn. Cost then scales with how busy the room is, not with how much anyone is talking to you.

Exposure. Everything the bot sees is text a stranger wrote, arriving somewhere a model reads it. That's the prompt injection surface, and it grows exactly as fast as your visibility.

Storage and CPU. Messages you keep count against your disk, where an overrun stops every app in the account. And a handler that runs on every message spends your CPU time budget doing filtering work in a busy server.

None of these are reasons to never do it. They're reasons to know why you're doing it.

The design that doesn't need it

Most LLM bots people want are addressed bots: you mention them, reply to them, use a command, or talk in a thread they're already in. That interaction model needs no broad visibility at all.

  • Mentions and slash commands are delivered regardless of the restrictive defaults.
  • Replies to the bot give you the conversational feel people actually want.
  • Threads give a natural memory scope with a visible boundary.

Building this way means you never request the privileged intent, never disable privacy mode, and your bot is cheaper, less exposed, and less surprising — while behaving the way users expect. It's also less to explain to a server owner deciding whether to add it.

When you genuinely need broad visibility

Some products can't work without it, and that's fine:

  • Moderation — you have to see content to act on it.
  • Summarisation — "what did I miss?" requires having been there.
  • Keyword or sentiment triggers — reacting without being addressed is the point.

If that's you, narrow it deliberately:

  • Limit which channels you process, not just which you can see. Visibility is platform-level; scope is yours.
  • Filter before you spend. Cheap local checks — length, keywords, author — before any model call. The first filter should never be the model.
  • Retain the minimum. Process and discard beats store-everything, and it keeps the disk curve flat.
  • Say so in the bot's description. "Reads messages in channels it's added to and sends them to an AI model" is a sentence that belongs where people decide to install you.

The threshold worth knowing about

If your Discord bot grows, privileged intents stop being self-service. Per Discord's documentation: "Apps with fewer than 10,000 users can access privileged intents by enabling them in the Developer Portal. When an app has more than 10,000 unique users who can see your app across all the servers it's in, it requires review for continued access to Privileged Intents" (Discord docs).

Note it's unique users, not servers — a common mix-up. The practical consequence: a design that depends on Message Content has a review in its future, and one that doesn't, doesn't. If you can build the addressed version, you've also removed a growth obstacle you'd otherwise meet at the worst time.

Disclose it, because people care about this one

A bot that forwards conversation to a third-party model is doing something users have opinions about, and the cost of being upfront is one line of text.

Put it in the bot's description and in whatever help command you have. Say what's sent, when it's sent, and whether anything is stored. If you retain conversation history, say for how long and how to clear it — a reset command makes that answer concrete rather than a promise.

This isn't only ethics. A server owner who discovers the behaviour later removes the bot; one who knew up front doesn't.

FAQ

Does my LLM bot need the Message Content intent?

Only if it must react to messages that don't address it. Mentions, commands, and replies work without it.

Is Telegram privacy mode a problem for an AI bot?

Usually not. If your bot responds when addressed, the default is exactly what you want — and it keeps event volume down.

What does broad visibility actually cost?

Model calls on messages nobody asked about, a larger context if you store history, a wider injection surface, and disk plus CPU spent filtering.

When is reading everything justified?

Moderation, summarisation, and keyword triggers. Then scope by channel, filter cheaply before calling a model, and retain as little as possible.

Is there a limit on privileged intents?

Yes. Above 10,000 unique users who can see your app, continued access requires review. It's counted in users, not servers.

Should I tell users the bot uses AI?

Yes, in the description and in help output. Say what's sent and what's kept — it's one line, and it prevents the version of this conversation that ends with your bot being removed.

Wrapping up

The restrictive defaults on both platforms exist because most bots don't need to read everything, and model-backed bots are the case where that's most true — every extra message you see is money, context, exposure, and storage. Build the addressed version first. If your product genuinely requires more, take it deliberately: narrow the scope yourself, filter before you spend, keep less than you could, and tell people what you're doing.