#OpenClaw agent not able to see discord messages

1 messages · Page 1 of 1 (latest)

fierce quest
#

per my agent's suggested description: Bot sees slash commands (INTERACTION_CREATE events) but plain guild messages are silently dropped — no log entry at all. Message Content Intent is enabled in Developer Portal, requireMention: false, groupPolicy: open. Log always shows 'Discord Message Content Intent is limited' on startup.

terse ospreyBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

zealous ravineBOT
#

That symptom set (INTERACTION_CREATE works, but no MESSAGE_CREATE ever hits your logs) almost always comes down to one of these three things:

  1. OpenClaw is still effectively in groupPolicy: "allowlist" mode (so it drops guild messages before they reach the agent)
  2. Discord is not actually granting Message Content intent (so OpenClaw won’t see normal message text; depending on your mention gating it can look like “nothing arrives”)
  3. The bot can’t “View Channel” in the channel you’re testing (channel overrides)

A tight way to disambiguate is:

1) Run a probe that tells us what Discord + OpenClaw think is true

On the gateway host:

openclaw --version
openclaw channels status --probe

Paste the Discord section output (it should explicitly call out things like “Message Content Intent is disabled” and also list any channels with missing permissions).

#

Docs: https://docs.openclaw.ai/channels/troubleshooting#discord and https://docs.openclaw.ai/channels/discord#troubleshooting


2) Double-check you’re not hitting the “env-only token” gotcha

From the docs (this one bites people a lot):

If you only set DISCORD_BOT_TOKEN and do not create a channels.discord block, runtime fallback is groupPolicy="allowlist" (even if channels.defaults.groupPolicy is open).

So confirm what OpenClaw is actually running with:

openclaw config get channels.discord --json

(redact the token before pasting)

#

Docs section: https://docs.openclaw.ai/channels/discord#guild-policy


3) If the log says “Message Content Intent is limited/disabled” even though it’s enabled in the portal

Two common causes:

  • Gateway wasn’t restarted after changing intents (Discord intent flags are negotiated at connect time).
  • The token you’re running is not the token for the application where you enabled the intent (sounds obvious, but it happens when people have multiple apps/bots).

After confirming the toggle in Developer Portal, do:

openclaw gateway restart

and re-run openclaw channels status --probe.

#

If you paste the channels status --probe Discord output + your channels.discord config (token redacted), I can tell you which branch you’re in within one message.

fierce quest
fierce quest
zealous ravineBOT
#

Your OpenClaw-side config actually looks sane for routing (you do have a channels.discord block, groupPolicy: "open", and that guild has requireMention: false).

The big red flag is still this part:

startup says Discord Message Content Intent is limited

When OpenClaw reports content=limited, Discord is not granting full message text for normal guild messages. In that state, it’s totally normal to see slash commands (interactions don’t need message text) while “plain” messages appear to vanish (OpenClaw gets events with no usable content and won’t run the agent).

Quick proof (takes 30 seconds)

  1. Run on the gateway host:

    openclaw channels status --probe
    

    If you see intents:content=limited (or warnings about Message Content Intent), that’s the cause.

  2. Send a message that explicitly mentions the bot in the guild channel.

    • If mention-messages start working (or at least start showing up in logs), that confirms Discord is only providing content for mentions/DMs.
#

What fixes content=limited

This is Discord-side, not OpenClaw-side:

  • Re-check Developer Portal → Bot → Privileged Gateway Intents → Message Content Intent is enabled for the same application whose token you’re running.
  • Restart the gateway after flipping intents (intent bits are negotiated on connect):
    openclaw gateway restart
    
  • If your bot is in 100+ servers / is verified, Discord may require an approval request for privileged intents. In that case the toggle can be “on” but the API still effectively treats it as limited until approved.

Workaround if you can’t get full intent approved

Set guild/channel back to mention-only operation (since Discord still provides content for mentions), i.e. requireMention: true for that guild/channel.

If you paste the openclaw channels status --probe Discord section (no secrets in there), I can tell you immediately whether you’re blocked by (a) intent limitation vs (b) channel permission audit issues.

fierce quest
#

Gateway reachable.

  • Discord default: enabled, configured, running, connected, in:1h ago, bot:@CleoClawBot, token:config, intents:content=limited, works, audit ok
zealous ravineBOT
#

Perfect, that channels status line basically closes the case:

intents:content=limited

OpenClaw is reading that straight from Discord’s /oauth2/applications/@me application flags. “Limited” means Discord will deliver MESSAGE_CREATE events, but the message payload fields are emptied for most guild messages (including content, attachments, etc.). The only times you reliably get content in that mode are DMs and messages that mention the bot (and your own bot’s messages).

So with requireMention: false + “plain” messages, OpenClaw receives “empty” messages and effectively has nothing to pass to the agent → it looks like “silently dropped”.

Discord’s own explanation (what fields get blanked + what still works):
https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ

What to do next

A) Fast workaround (works immediately):

  • Operate mention-only in guilds: set requireMention: true (at least in the guild/channel you care about), and mention the bot to talk to it.
  • Or just use slash commands.

B) Real fix (to make requireMention: false viable):

#

You need Discord to report intents:content=enabled (not limited). That typically requires one of:

  • If this is a verified bot in 100+ servers: you must request/obtain Message Content Intent approval in the Developer Portal (toggle alone won’t fully grant it).
  • If you don’t need a public/verified bot: create a fresh private bot for your personal server (unverified, <100 servers). That path usually gets full message content without any review.

After any portal change, restart the gateway (intents are negotiated on connect):

openclaw gateway restart
openclaw channels status --probe

If you tell me whether your Discord application is verified and roughly how many servers it’s installed in, I can tell you which of the two “real fix” paths is actually available in the portal UI.

fierce quest
#

the application is not verified and is only installed on one server

fierce quest
#

@zealous ravine any follow ups?

zealous ravineBOT
#

Yep — at this point the “why” is pinned down: your gateway is connected and healthy, but Discord is telling us message content is limited for that bot (intents:content=limited). In that mode Discord will often deliver message events with empty content/attachments/etc except for DMs + mentions, so OpenClaw has nothing to hand to the agent for “plain” guild chatter.

The only remaining question is why Discord still reports “limited” even though you flipped the toggle. Two quick follow-ups will decide the path:

  1. Is this Discord application verified (blue check / went through verification)?
  2. Roughly how many servers is the bot installed in?

Why I’m asking: per Discord’s policy, verified bots in 100+ servers need privileged intent approval to get full message content; otherwise you stay in the “limited” state even if the toggle is on. (Interactions/slash commands keep working either way.) Reference: https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ

Fast sanity check to rule out “wrong app / didn’t save”

Run and paste the JSON (no secrets in it):

openclaw channels status --probe --json

Look for the Discord application.id / application.flags / application.intents. Then confirm the application ID matches the one you’re editing in the Developer Portal, and that you hit Save Changes after enabling the intent.

#

Workaround if you just want it working today

Use mention-only in the guild (set requireMention: true, or just mention the bot) — Discord still provides message content for mention messages even when content is limited.

If you reply with “verified? yes/no” + “server count approx” (and/or the --json snippet for Discord), I’ll tell you the exact next step (request approval vs. create a fresh private bot vs. portal mismatch).

fierce quest
# zealous ravine Yep — at this point the “why” is pinned down: your gateway is connected and heal...

The discord application is not verified, and it is only installed in one server

{
"ts": 1773618998216,
"channelOrder": [
"discord"
],
"channelLabels": {
"discord": "Discord"
},
"channelDetailLabels": {
"discord": "Discord Bot"
},
"channelSystemImages": {
"discord": "bubble.left.and.bubble.right"
},
"channelMeta": [
{
"id": "discord",
"label": "Discord",
"detailLabel": "Discord Bot",
"systemImage": "bubble.left.and.bubble.right"
}
],
"channels": {
"discord": {
"configured": true,
"running": true,
"lastStartAt": 1773618861757,
"lastStopAt": 1773618861757,
"lastError": null,
"tokenSource": "config",
"probe": {
"ok": true,
"status": null,
"error": null,
"elapsedMs": 1199,
"bot": {
"id": "1482824305724231812",
"username": "CleoClawBot"
},
"application": {
"id": "1482824305724231812",
"flags": 8953856,
"intents": {
"presence": "limited",
"guildMembers": "limited",
"messageContent": "limited"
}
}
},
"lastProbeAt": 1773618999415
}
},
"channelAccounts": {
"discord": [
{
"accountId": "default",
"enabled": true,
"configured": true,
"running": true,
"lastStartAt": 1773618861757,
"lastStopAt": 1773618861757,
"lastError": null,
"probe": {
"ok": true,
"status": null,
"error": null,
"elapsedMs": 1199,
"bot": {
"id": "1482824305724231812",
"username": "CleoClawBot"
},
"application": {
"id": "1482824305724231812",
"flags": 8953856,
"intents": {
"presence": "limited",
"guildMembers": "limited",
"messageContent": "limited"
}
}
},
"lastInboundAt": 1773615544515,
"lastOutboundAt": null,
"tokenSource": "config",
"tokenStatus": "available",
"connected": false,
"reconnectAttempts": 0,
"lastConnectedAt": 1773616162783,
"lastDisconnect": null,
"lastEventAt": 1773618861757,
"application": {
"id": "1482824305724231812",
"flags": 8953856,
"intents": {
"presence": "limited",
"guildMembers": "limited",
"messageContent": "limited"
}
},
"bot": {
"id": "1482824305724231812",
"username": "CleoClawBot"
},
"audit": {
"ok": true,
"checkedChannels": 1,
"unresolvedChannels": 0,
"channels": [
{
"channelId": "1482825554423185558",
"ok": true,
"error": null,
"matchKey": "1482825554423185558",
"matchSource": "id"
}
],
"elapsedMs": 904
},
"lastProbeAt": 1773618999415
}
]
},
"channelDefaultAccountId": {
"discord": "default"
}
}

zealous ravineBOT
#

Good, that JSON is super informative.

1) This is not an OpenClaw config problem — Discord is explicitly flagging your app as “limited”

Your probe is hitting GET /oauth2/applications/@me and getting:

  • flags: 8953856
  • intents.messageContent: "limited"
  • and also presence: "limited", guildMembers: "limited"

So Discord itself is saying: “this app does not have the privileged intents fully enabled; you only get the limited subset (DMs/mentions/own messages).”

That exactly matches: slash commands work, but normal guild messages show up as “empty” and OpenClaw won’t run.

What’s weird (as you noticed): unverified + 1 server should normally be able to have these intents fully enabled. So the next step is to treat this as a Discord-side state/UI mismatch and verify it ruthlessly.

Do this checklist in the Developer Portal for application id 1482824305724231812:

  1. Go to Bot → Privileged Gateway Intents
#
  1. Toggle Message Content Intent OFF → Save Changes
  2. Toggle it ON → Save Changes
  3. (Optional but recommended) also toggle Server Members Intent ON and Save
  4. Wait ~1 minute, then on the gateway:
    openclaw gateway restart
    openclaw channels status --probe --json
    

You’re looking for messageContent: "enabled" (not limited).

If it still stays limited after a clean OFF→SAVE→ON→SAVE cycle, then Discord is not granting it to this app for some reason (account restriction, legacy verified state despite what the UI says, or Discord-side bug). At that point your only practical paths are:

  • operate mention-only / slash-command-only, or
  • create a brand new application/bot and try again (often faster than fighting Discord state).

(Discord’s “limited” semantics are exactly this: message objects arrive but content/attachments/embeds are blank except DMs/mentions/own messages: https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ)


#

2) Separate issue: your channel snapshot shows you’re currently not connected

In the JSON you pasted, under the running account:

  • "connected": false
  • lastConnectedAt is old
  • lastEventAt equals the start time

If you’re not connected to the Discord gateway, you won’t see any events (messages or interactions). So if you still believe you’re seeing INTERACTION_CREATE, that may have been earlier.

Can you paste the last ~50 lines of Discord/gateway logs around the disconnect/reconnect?

openclaw logs --follow

(or if you already have a log snippet with a close code / reason, paste that)