#Discord Permissions & Set up
1 messages · Page 1 of 1 (latest)
Yep. First thing, paste:
pnpm openclaw --version
Version mismatch causes a lot of weird Discord setup issues.
Also tell me which part is failing:
- adding the bot to the server
- DM pairing
- bot is in the server but not replying
Quick Discord checklist from the docs:
- Bot page → Privileged Gateway Intents
- Message Content Intent: required
- Server Members Intent: recommended
- OAuth2 scopes
botapplications.commands
- Bot permissions
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optional)
If the bot is already in the server but stays silent, the usual causes are:
- Message Content Intent is off
- your server is not added under
channels.discord.guilds requireMentionis still enabled
If you want, paste these too:
pnpm openclaw channels status --probe
pnpm openclaw status --deep
Docs:
https://docs.openclaw.ai/channels/discord
https://docs.openclaw.ai/help/faq
I;m getting You are not authorized to use this command. erro when giving her slash command in to the server.
That error is usually OpenClaw command authorization, not missing Discord bot invite permissions.
Most likely one of these:
commands.allowFromis set, and your Discord user is not in it- The command is owner-only (
/config,/debug, some admin-ish ones), and your user is not incommands.ownerAllowFrom - In a server, your guild/channel/user allowlist is blocking you
Common fixes
If you use commands.allowFrom, add yourself there:
{
commands: {
allowFrom: {
discord: ["user:YOUR_USER_ID"],
},
},
}
If it is an owner-only command, add yourself here:
{
commands: {
ownerAllowFrom: ["discord:YOUR_USER_ID"],
},
}
If this only fails in the server but DMs work, also check your guild config:
{
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
YOUR_SERVER_ID: {
users: ["YOUR_USER_ID"],
requireMention: false,
},
},
},
},
}
Important bit: if commands.allowFrom exists, it becomes the only command auth source.
After changing config, restart the gateway.
Please paste these so I can tell you the exact fix:
pnpm openclaw --version- which slash command you ran (
/status,/model,/config, etc.) pnpm openclaw channels status --probe
Docs:
https://docs.openclaw.ai/tools/slash-commands
https://docs.openclaw.ai/channels/discord
Give me step by step process and one step at a time. I'm new
Absolutely. We’ll go one step at a time.
Step 1: run this and paste the output here:
pnpm openclaw --version
If pnpm doesn’t work, try:
openclaw --version
Send me that, and I’ll give you step 2.
openclaw --version OpenClaw 2026.4.15 (041266a)
Nice, your version looks fine.
Step 2: tell me the exact slash command you typed.
Example: /status, /model, /config, /dock-discord
Send me that, and I’ll give you step 3.
Any. She's accepting none. Giving me ou are not authorized to use this command. Note: Only inside the server. DM worksd
Perfect, that narrows it down a lot.
If DM works but server commands fail, your bot/token are probably fine. The server usually just is not allowlisted yet.
Step 3: get your Discord Server ID and paste it here.
How:
- In Discord, go to User Settings → Advanced
- Turn on Developer Mode
- Right-click your server icon
- Click Copy Server ID
Paste the Server ID here, and I’ll give you step 4.
Server 1: 1396404029680128001
Server 2: 1495157727146545194
Great.
Step 4: tell me which one you want to fix first:
- Server 1 (
1396404029680128001) - Server 2 (
1495157727146545194)
Just reply with 1 or 2, and I’ll give you step 5.
2
Perfect. We’ll fix Server 2 first.
Step 5: now copy your Discord User ID and paste it here.
How:
- Right-click your avatar in Discord
- Click Copy User ID
Paste that, and I’ll give you step 6.
My User ID: 1302991150763999302
My Server: 1495157727146545194
Nice, we have what we need.
Step 6: run this exactly:
openclaw config set channels.discord.guilds '{"1495157727146545194":{"requireMention":false,"users":["1302991150763999302"]}}' --strict-json
What this does:
- adds your server to the Discord allowlist
- allows your user in that server
- lets the bot respond without requiring
@mention
Run it, then paste what it says back, and I’ll give you step 7.
openclaw config set channels.discord.guilds '{"1495157727146545194":{"requireMention":false,"users":["1302991150763999302"]}}' --strict-json Invalid config at /home/wrakeeb/.openclaw/openclaw.json:\n- channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties 🦞 OpenClaw 2026.4.15 (041266a) — One CLI to rule them all, and one more restart because you changed the port. Config invalid File: ~/.openclaw/openclaw.json Problem: - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties Run: openclaw doctor --fix
No worries, that actually helps a lot.
Your openclaw.json is already invalid, so OpenClaw refused to save the Discord server change.
Step 7: run this:
openclaw doctor --fix
If it asks to repair the config, say yes.
Then paste the output here, and I’ll give you step 8.
Doctor complete.
Nice. 👍
Step 8: now rerun this exact command:
openclaw config set channels.discord.guilds '{"1495157727146545194":{"requireMention":false,"users":["1302991150763999302"]}}' --strict-json
Then paste what it says, and I’ll give you step 9.
openclaw config set channels.discord.guilds '{"1495157727146545194":{"requireMention":false,"users":["1302991150763999302"]}}' --strict-json Invalid config at /home/wrakeeb/.openclaw/openclaw.json:\n- channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties 🦞 OpenClaw 2026.4.15 (041266a) — I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet. Config invalid File: ~/.openclaw/openclaw.json Problem: - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties - channels.discord: invalid config: must NOT have additional properties Run: openclaw doctor --fix
Got it. That means there are still old/invalid Discord keys in your config, and we need to see exactly which ones.
Step 9: run this and paste the output:
openclaw config validate --json
That will show the exact bad keys, and then I can give you the next exact fix.
openclaw config validate --json { "valid": false, "path": "/home/wrakeeb/.openclaw/openclaw.json", "issues": [ { "path": "channels.discord", "message": "invalid config: must NOT have additional properties" }, { "path": "channels.discord", "message": "invalid config: must NOT have additional properties" }, { "path": "channels.discord", "message": "invalid config: must NOT have additional properties" }, { "path": "channels.discord", "message": "invalid config: must NOT have additional properties" ```
Thanks. That confirms the config is bad, but not which Discord keys are bad.
Step 10: open this file:
nano ~/.openclaw/openclaw.json
Then:
- find the
discordsection underchannels - copy just that
discordblock - paste it here
- if you see your bot token, replace it with
REDACTEDbefore pasting
Once I see that block, I can tell you the exact line to change next.
"discord": { "enabled": true, "token": "M
(I removed it for safety)", "groupPolicy": "open", "guildId": "1396404029680128001", "userId": "1302991150763999302", "guildAllowlist": [ "1495157727146545194", "1396404029680128001" ], "userAllowlist": [ "1302991150763999302
Nice, we found it.
The bad keys are the old ones:
guildIduserIdguildAllowlistuserAllowlist
Step 11: in ~/.openclaw/openclaw.json, replace your whole discord block with this, but keep your real token value in place of YOUR_EXISTING_TOKEN:
"discord": {
"enabled": true,
"token": "YOUR_EXISTING_TOKEN",
"groupPolicy": "allowlist",
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
}
Important:
- do not paste your real token here in chat
- this is only for Server 2 for now
Save the file, then reply done, and I’ll give you step 12.
How can I do it?
Yep, here’s the easy way.
Do this exactly:
-
Open the file:
nano ~/.openclaw/openclaw.json -
Find the part that starts with:
"discord": { -
Delete that whole
discordblock. -
Paste this in its place, but keep your real token where it already is:
"discord": {
"enabled": true,
"token": "YOUR_EXISTING_TOKEN",
"groupPolicy": "allowlist",
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
}
- Save and exit:
- Press Ctrl + O
- Press Enter
- Press Ctrl + X
Do not paste your real token here in chat.
When you’ve done that, reply done and I’ll give you the next step.
I can't do that, I"m not getting how to
Totally okay. Let’s make it easier.
Pick one of these, and I’ll guide you step by step:
- editor = you want to open the file in a normal text editor
- nano = you want to do it in the terminal
I recommend editor if you have one, because it’s much easier.
Just reply with editor or nano.
I'm not sure which one exist
No problem, let’s try the simplest one.
Step 12: run this:
nano ~/.openclaw/openclaw.json
Then tell me which happened:
- A) a full-screen editor opened
- B) it said
nano: command not found
Just reply with A or B.
A
Perfect.
Step 13: inside nano:
- Press Ctrl + W
- Type:
discord - Press Enter
That should jump you to the Discord section.
Reply found it when you’re there.
Found it. Good, GIve me step with the keyboard command
Perfect. We’ll do one tiny edit at a time.
Step 14: change groupPolicy
Keyboard only:
- Use the arrow keys to move the cursor onto the word:
open - Press Backspace until
openis gone - Type:
allowlist
So this line becomes:
"groupPolicy": "allowlist",
When that part is changed, reply done.
done
Nice.
Step 15: delete the guildId line
Keyboard only:
- Use the arrow keys to move onto the line that starts with:
"guildId": - Press Ctrl + K
That deletes the whole line.
Reply done when that line is gone.
done
Good.
Step 16: delete the userId line
- Use the arrow keys to move onto the line that starts with:
"userId": - Press Ctrl + K
Reply done when that line is gone.
done
Great.
Step 17: delete the whole guildAllowlist block
- Move to the line that starts with:
"guildAllowlist": [ - Press Ctrl + K repeatedly until all of this is gone:
- the
"guildAllowlist": [line - the server ID lines under it
- the closing
],
- the
Keep going until you no longer see guildAllowlist.
Reply done when that whole block is gone.
done
Nice.
Step 18: delete the whole userAllowlist block
- Move to the line that starts with:
"userAllowlist": [ - Press Ctrl + K repeatedly until all of that block is gone, including the closing
],
Keep going until you no longer see userAllowlist.
Reply done when it’s gone.
including the server/user ids too?
Yes, delete that whole userAllowlist block, including the user ID lines inside it.
That old format is the problem. We’ll add your server/user back in the new format right after.
Once the whole userAllowlist block is gone, reply done.
done
it looks like this now:
"enabled": true,
"token": "HIDDEN",
"groupPolicy": "allowlist",
}```
Perfect, that’s clean now.
Step 19: add the new guilds block
Keyboard steps:
- Use the arrow keys to move to the line:
"groupPolicy": "allowlist", - Press End
- Press Enter
- Paste this right under it, before the closing
}:
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
When you’re done, it should look like this:
"discord": {
"enabled": true,
"token": "HIDDEN",
"groupPolicy": "allowlist",
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
}
Reply done when that block is added.
What key paste it?
Try this:
- Ctrl + Shift + V to paste
If that doesn’t work, try:
- Right-click → Paste
Paste this block:
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
When it’s pasted in, reply done.
it looks like this now
}, "discord": { "enabled": true, "token": "HIDDEN", "groupPolicy": "allowlist", "guilds": { "1495157727146545194": { "requireMention": false, "users": ["1302991150763999302"] } } }, "hooks": { ```
That looks correct. Nice. 👍
Step 20: save and exit nano
Keyboard only:
- Press Ctrl + O
- Press Enter
- Press Ctrl + X
That saves the file and closes nano.
Reply done when you’re back in the terminal.
done
Great.
Step 21: run this:
openclaw config validate --json
Then paste the output here.
We’re checking that the config is valid before restarting anything.
openclaw config validate --json { "valid": false, "path": "/home/wrakeeb/.openclaw/openclaw.json", "issues": [ { "path": "<root>", "message": "JSON5 parse failed: SyntaxError: JSON5: invalid end of input at 140:1" } ] }
Almost there. That error means the file is missing a closing bracket or brace near the end.
Step 22: run this and paste the output:
tail -n 25 ~/.openclaw/openclaw.json
That will show the end of the file so I can spot the missing } or ].
The ening lines:
"plugins": {
"entries": {
"openrouter": {
"enabled": true
},
"anthropic": {
"enabled": true
}
}
}
}```
Thanks, the very end looks okay. The problem is probably a few lines above that.
Step 23: run this and paste the output:
nl -ba ~/.openclaw/openclaw.json | sed -n '120,145p'
That will show lines 120 to 145 with line numbers, so we can spot exactly what’s broken.
{ "valid": false, "path": "/home/wrakeeb/.openclaw/openclaw.json", "issues": [ { "path": "<root>", "message": "JSON5 parse failed: SyntaxError: JSON5: invalid end of input at 140:1" } ] }
This line?
Almost, but that was the validate output again. I need the file lines.
Please run this exact command:
nl -ba ~/.openclaw/openclaw.json | sed -n '120,145p'
You should see numbered lines from the file itself.
Paste that result here, and I’ll point to the exact broken line.
```nl -ba ~/.openclaw/openclaw.json | sed -n '120,145p' 120 "lastRunAt": "2026-04-21T07:35:14.718Z", 121 "lastRunVersion": "2026.4.15", 122 "lastRunCommand": "configure", 123 "lastRunMode": "local" 124 }, 125 "meta": { 126 "lastTouchedVersion": "2026.4.15", 127 "lastTouchedAt": "2026-04-21T07:35:15.022Z" 128 }, 129 "plugins": { 130 "entries": { 131 "openrouter": { 132 "enabled": true 133 }, 134 "anthropic": { 135 "enabled": true 136 } 137 } 138 } 139 } ````
Perfect, that helps.
The file ends at line 139, so something earlier is still missing a closing }.
Step 24: run this exact command and paste the output:
nl -ba ~/.openclaw/openclaw.json | sed 's/"token": ".*"/"token": "HIDDEN"/' | sed -n '1,120p'
That will:
- show the first 120 lines
- hide your token automatically
Then I can spot the exact missing brace.
what next?
Next, run this exact command and paste the result here:
nl -ba ~/.openclaw/openclaw.json | sed 's/"token": ".*"/"token": "HIDDEN"/' | sed -n '1,120p'
That will show me the top part of the file and hide your token automatically. Then I can tell you the exact broken line.
I can't put the output, it's big
I think I see it now. You’re probably missing one closing line between discord and hooks.
Step 24: add this line right above "hooks": {
},
Keyboard only:
- Open the file again:
nano ~/.openclaw/openclaw.json - Press Ctrl + W
- Type:
hooks - Press Enter
- Move the cursor to the start of the
"hooks": {line - Press Enter to make a new blank line above it
- Type:
},
Then save and exit:
- Ctrl + O
- Enter
- Ctrl + X
Reply done when that line is added.
Show me how itll look like
"1495157727146545194": { "requireMention": false, "users": ["1302991150763999302"] } } }, "hooks": { "internal": { "enabled": true, "entries": { "boot-md": { "enabled": true
Yep, it should look like this around that part:
"discord": {
"enabled": true,
"token": "HIDDEN",
"groupPolicy": "allowlist",
"guilds": {
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
},
},
"hooks": {
The important part is this extra line:
},
That line closes the channels section before hooks starts.
If you add that, reply done and I’ll give you the next check.
You’re very close.
Right now you have this:
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
},
"hooks": {
You need one more line between }, and "hooks": {
So it should become:
"1495157727146545194": {
"requireMention": false,
"users": ["1302991150763999302"]
}
}
},
},
"hooks": {
So the next step is:
Add one new line that contains only:
},
right above "hooks": {
When that’s added, reply done.
Nice. Now let’s check it.
Next step: run this and paste the output:
openclaw config validate --json
If it says "valid": true, we’re basically there.
{"valid":true,"path":"/home/wrakeeb/.openclaw/openclaw.json"}```
Nice, that’s a big win. 🎉 Your config is valid now.
Next step: restart OpenClaw so it loads the new Discord settings:
openclaw gateway restart
When that finishes, reply done and I’ll give you the final test step.
Done
Perfect.
Final test step: in Server 2 (1495157727146545194), type this slash command:
/status
Then tell me what happens:
- A) it works
- B) it still says “not authorized”
If it works, we’re done.
GOAT, working.
Now for this server: 1396404029680128001
User: 1302991150763999302
I want this server to allow me full, mention only & working can be acceesed by me. Ony I can mention her and reply to me. No one else.
Hell yes 😄
For Server 1, we’ll make it:
- only you can use it
- mention only
- no one else can trigger it
Next step: run this exact command:
openclaw config set channels.discord.guilds '{"1495157727146545194":{"requireMention":false,"users":["1302991150763999302"]},"1396404029680128001":{"requireMention":true,"users":["1302991150763999302"]}}' --strict-json
What that does:
- keeps Server 2 working like before
- adds Server 1
- makes Server 1 require
@mention - allows only your user ID
Run it and tell me what it says, then I’ll give you the restart step.
she's not replying, just adding reactions of trying to type
🦞 OpenClaw 2026.4.15 (041266a) — Deployed locally, trusted globally, debugged eternally.
Config overwrite: /home/wrakeeb/.openclaw/openclaw.json (sha256 677afe5cf97e9f8401619aa71bcee9ae8d7f370a24be3a3c2ff9a7633a28e365 -> c7d8b1eeb06b2da9d388d5b61d24d9fa9c4cdb3fedd2ada501075bd3e7f89154, backup=/home/wrakeeb/.openclaw/openclaw.json.bak)```
That config command worked.
Also, for Server 1, you set it to mention-only, so normal messages there will not reply unless you @mention the bot.
Next step: restart OpenClaw so it loads the new server rules:
openclaw gateway restart
After that, test in Server 1 with:
@YourBotName /status
or just the native slash command:
/status
Then tell me which happens:
- A) replies normally
- B) still only shows typing/reactions
- C) says not authorized
I can use the slash, but she's not replying when I mention.
That’s actually a really useful clue.
If slash commands work but @mentions do not, the most likely cause is:
Message Content Intent is OFF in the Discord Developer Portal.
Slash commands can work without it. Normal message replies cannot.
Next step: go to your bot in the Discord Developer Portal and turn on:
- Message Content Intent
Path:
Discord Developer Portal → Your App → Bot → Privileged Gateway Intents
Turn that on, save, then reply done and I’ll give you the restart step.
this is on. if it was off then how can she reply in another server?
Yep, good catch. If she can reply by mention in another server, then Message Content Intent is probably not the issue here.
That means this is likely a server-specific routing/policy problem.
Next step: capture the live logs while you mention her once in Server 1.
Run this in your terminal:
openclaw logs --follow
Then:
- go to Server 1
- send one message mentioning her
- copy the new log lines that appear
- paste those log lines here
That should tell us exactly why Server 1 mentions are being ignored.
One interesting thing, she's replying to other channel in the same server but not replying to that one specific channel. Might be the channel issue. Ill add new channel.
Now the main thing is, she's adding reactions whenever I mention her, this is the server: 1396404029680128001
I don't want her to add emojis unless I say so. She add 1/2 emojis, and keep changing it untl she reply. Seems like she's showing im processing the replay
Yep, that emoji behavior is the ack reaction, basically “I’m processing”.
Let’s turn that off first, with the smallest change.
Next step: run this:
openclaw config set channels.discord.ackReaction '""' --strict-json
That disables the processing emoji for Discord.
Then tell me what it says, and I’ll give you the restart step.
It worked. Finally, the basic setup is done.
Thanks from Miko & me.
Love it, glad we got Miko fully online 😄
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution.
That helps Answer Overflow index it for the next person.
If you want next, I can also help you:
- lock down the other channel
- clean up the Discord config
- set nicer default behavior for Miko