#Discord Bot unable to create or manage channels despite having explicit admin permissions

1 messages Β· Page 1 of 1 (latest)

buoyant pier
#

My Discord bot is now saying it does not have the ability to create channels for me. How can I fix this?

misty ploverBOT
#

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

violet galeBOT
#

First thing: please check your OpenClaw version with:

openclaw --version

For this specific error there are usually two permission layers:

  1. OpenClaw tool/action gate
    Make sure your agent has the message tool available. If you use a restrictive tool profile/allowlist, include messaging, e.g.:
tools: {
  allow: ["group:messaging"]
}

or don’t use a restrictive tools.allow unless you need one. channel-create is done through the message tool, not a separate discord.message tool.

Also check Discord action gates. Channel admin actions should be enabled by default, but if you disabled them, set:

#
channels: {
  discord: {
    actions: {
      channels: true
    }
  }
}
  1. Discord’s own bot permissions
    In Discord, the bot needs Manage Channels or Administrator in the server, and the bot role should not be blocked by category/channel overwrites. If in doubt, re-invite the bot with the right permissions and then restart OpenClaw.

Useful checks:

openclaw status --all
buoyant pier
#

so you think i should kick the bot and reinvite it?

violet galeBOT
#

Not as the first move, no. If it already has explicit Administrator, kicking/reinviting probably won’t change anything unless the original invite/scopes are weird or stale.

I’d check this order:

  1. Run:
openclaw --version
openclaw status --all
  1. Check your config for OpenClaw-side gating:
channels: {
  discord: {
    actions: {
      channels: true
#
    }
  }
}
  1. If you have tools.allow set, make sure it includes messaging:
tools: {
  allow: ["group:messaging"]
}

or remove the restrictive allowlist while testing.

  1. Restart the gateway after config changes.

Only after that would I try removing/reinviting the bot β€” and when you do, make sure the invite includes bot permissions for Manage Channels or Administrator.

#

If you paste the exact error text plus your openclaw --version, we can narrow down whether this is Discord permissions or OpenClaw tool/action gating.

buoyant pier
#

owner@owner-Macmini:~$ openclaw --version
openclaw status --all
OpenClaw 2026.5.7 (eeef486)

🦞 OpenClaw 2026.5.7 (eeef486)
I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.

β”‚
OpenClaw status --all

Overview
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Item β”‚ Value β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Version β”‚ 2026.5.7 β”‚
β”‚ OS β”‚ linux 6.8.0-110-generic (x64) β”‚
β”‚ Node β”‚ 22.22.2 β”‚
β”‚ Config β”‚ ~/.openclaw/openclaw.json β”‚
β”‚ Dashboard β”‚ http://127.0.0.1:18789/ β”‚
β”‚ Tailscale exposure β”‚ off β”‚
β”‚ Channel β”‚ stable (default) β”‚
β”‚ Update β”‚ pnpm Β· up to date Β· npm latest 2026.5.7 β”‚
β”‚ Gateway β”‚ local Β· ws://127.0.0.1:18789 (local loopback) Β· β”‚
β”‚ β”‚ reachable 114ms Β· auth token Β· owner-Macmini (192.168. β”‚
β”‚ β”‚ 1.249) app 2026.5.7 linux 6.8.0-110-generic β”‚
β”‚ Security β”‚ Run: openclaw security audit --deep β”‚
β”‚ Gateway self β”‚ unknown β”‚
β”‚ Gateway service β”‚ systemd user installed Β· enabled Β· running (pid 11430, β”‚
β”‚ β”‚ state active) β”‚
β”‚ Node service β”‚ systemd user not installed β”‚
β”‚ Agents β”‚ 1 total Β· 0 bootstrapping Β· 1 active Β· 3 sessions β”‚
β”‚ Secrets β”‚ none β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Channels
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Channel β”‚ Enabled β”‚ State β”‚ Detail β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Slack β”‚ ON β”‚ WARN β”‚ partial tokens (need bot+app) Β· accounts 1 β”‚
β”‚ Telegram β”‚ ON β”‚ OK β”‚ token config (sha256:4466436f Β· len 46) Β· β”‚
β”‚ β”‚ β”‚ β”‚ accounts 1/1 β”‚
β”‚ Discord β”‚ ON β”‚ OK β”‚ token config (sha256:f93ae4c4 Β· len 72) Β· β”‚
β”‚ β”‚ β”‚ β”‚ accounts 1/1 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Telegram accounts
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Account β”‚ Status β”‚ Notes β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ default β”‚ OK β”‚ token:config Β· credential available in gateway runtime β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Discord accounts
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Account β”‚ Status β”‚ Notes β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ default β”‚ OK β”‚ token:config Β· credential available in gateway runtime β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

#

Agents
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent β”‚ Bootstrap file β”‚ Sessions β”‚ Active β”‚ Store β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ main β”‚ ABSENT β”‚ 3 β”‚ 2m ago β”‚ ~/.openclaw/agents/main/ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ sessions/sessions.json β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Diagnosis (read-only)

Gateway connection details:
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: /home/owner/.openclaw/openclaw.json
Bind: loopback

βœ“ Config: /home/owner/.openclaw/openclaw.json
βœ“ Secret diagnostics (0)
βœ“ Restart sentinel: none
! Port 18789
Port 18789 is already in use.

  • pid 11430 owner: /usr/bin/node /home/owner/.npm-global/lib/node_modules
violet galeBOT
#

Good, version/channel health looks fine. That means the Discord token is loading and the bot can connect β€” so I’d not kick/reinvite yet.

Next likely culprit is OpenClaw config gating, especially if the agent says β€œI don’t have the ability” rather than Discord returning Missing Permissions.

Please check these parts of ~/.openclaw/openclaw.json:

{
  tools: {
    // if this exists, it must include message/group:messaging
    allow: ["group:messaging"]
  },
  channels: {
    discord: {
      actions: {
        channels: true
#
      }
    }
  }
}

Important nuance: if you have tools.allow set to only coding/web/files/etc, the Discord bot may be connected but the agent won’t be allowed to use the message tool’s channel-create action.

After changing config:

openclaw gateway restart

Then try asking it again. If it still fails, paste the exact bot response/error and the relevant redacted tools + channels.discord.actions config blocks. That’ll tell us whether it’s tool gating or actual Discord permissions.

#

That Port 18789 is already in use line is expected here because your Gateway service is running on that port:

Gateway service systemd user installed Β· enabled Β· running (pid 11430)

So that’s not the channel-creation problem. Your status output says Discord itself is connected OK.

The useful next checks are:

grep -n "tools\|actions\|discord" ~/.openclaw/openclaw.json
openclaw logs --tail 100

Please paste the redacted relevant config blocks, especially:

#
tools: { ... }
channels: {
  discord: {
    actions: { ... }
  }
}

What I’m looking for:

  • tools.allow exists but does not include message or group:messaging
  • channels.discord.actions.channels is set to false
  • logs show Discord Missing Permissions / 50013, which would mean it’s Discord-side despite admin claims

If the bot’s exact reply is literally β€œI don’t have the ability/tool to create channels”, that smells like OpenClaw tool gating more than Discord permissions.

buoyant pier
#

here's my entire tools block. can you give me back what i shold paste here?

"tools": {
"profile": "coding",
"web": {
"search": {
"provider": "duckduckgo",
"enabled": true
}
}
},

violet galeBOT
#

Yep β€” that explains it. tools.profile: "coding" does not include messaging tools, so the agent can code/read files/etc but can’t use Discord admin actions.

Replace your current tools block with this:

"tools": {
  "profile": "coding",
  "alsoAllow": ["group:messaging"],
  "web": {
    "search": {
      "provider": "duckduckgo",
      "enabled": true
    }
  }
},
#

Then restart:

openclaw gateway restart

If it still refuses after that, add/confirm this under your Discord config too:

"channels": {
  "discord": {
    "actions": {
      "channels": true
    }
  }
}
#

But I’d try the alsoAllow fix first β€” that’s the missing piece from the block you pasted. 🦞

buoyant pier
#

did all of the above and my bot still not doing this for me

violet galeBOT
#

Okay β€” then we need to separate config didn’t apply / session cached old tools from Discord API permission failure.

Try these in order:

  1. Start a fresh bot session after the restart. In Discord, use:
/new

Then ask it to create the channel again. Tool availability can get β€œstuck” in the old conversation context, so this is worth doing.

  1. Check for a per-agent override. Your root tools block may be fixed, but main can override it. Search your config for another tools block:
grep -n '"tools"\|"profile"\|"alsoAllow"\|"agents"' ~/.openclaw/openclaw.json

If there’s an agents / main tools block, it also needs:

#
"alsoAllow": ["group:messaging"]
  1. Immediately after the bot refuses, grab logs:
openclaw logs --tail 200 | grep -iE 'discord|channel|permission|50013|message tool|tool'

If logs show Missing Permissions or Discord error 50013, that’s Discord-side and reinvite/role permissions are the next move.

If logs show tool allowlist / no message tool / no channel-create, it’s still OpenClaw config/tool gating.

Also paste the exact sentence the bot says when it refuses β€” β€œI don’t have the tool” and β€œDiscord says missing permissions” point to totally different fixes.

buoyant pier
#

slash new doesn't work in my channel

violet galeBOT
#

Got it β€” if /new is ignored in that channel, try the alias as a standalone message:

/reset

If that also doesn’t work, commands are probably disabled/not authorized for that channel. Two useful checks:

/commands
/tools verbose

/tools verbose is the big one: it should show whether message is available in the current session. If message is still missing, your config change either didn’t apply, there’s an agent-level override, or this channel has a per-channel tool policy.

Since you already changed root tools, now search for overrides:

#
grep -nE '"agents"|"tools"|"alsoAllow"|"allow"|"deny"|"discord"|"actions"' ~/.openclaw/openclaw.json

Also restart with the service command and confirm the process changed:

openclaw gateway restart
openclaw status --all

Then paste the /tools verbose output or the relevant config lines. That’ll tell us exactly why it still can’t see channel creation.

buoyant pier
#

nope. commands are not enabled i guess. wtf

violet galeBOT
#

Yeah, that’s frustrating β€” but we can still get out of this. Commands being off mainly blocks /new; it doesn’t explain channel creation by itself.

Add this top-level block to ~/.openclaw/openclaw.json β€” sibling of tools, not inside it:

"commands": {
  "text": true,
  "native": "auto",
  "nativeSkills": "auto",
  "allowFrom": {
    "discord": ["user:YOUR_DISCORD_USER_ID"]
  },
  "ownerAllowFrom": ["discord:YOUR_DISCORD_USER_ID"]
},

Replace YOUR_DISCORD_USER_ID with your numeric Discord user id. Then:

#
openclaw gateway restart

After that, try a standalone:

/reset

If commands still don’t respond, easiest workaround is: test from a brand new Discord channel/thread/DM after the gateway restart. Discord channel sessions are isolated, so a new place should get a fresh tool snapshot without needing /new.

Also, since your tools.profile was coding, keep the tools block like this:

"tools": {
#
  "profile": "coding",
  "alsoAllow": ["group:messaging"],
  "web": {
    "search": {
      "provider": "duckduckgo",
      "enabled": true
    }
  }
},

If it still says no, paste the exact refusal text. At that point we’re down to either a per-agent/per-channel override or Discord returning Missing Permissions.

buoyant pier
#

ok are we at the point we should try kicking and reinviting?

violet galeBOT
#

Yeah β€” at this point I’d try a clean re-invite, but do it as a permissions/OAuth reset, not just random kicking.

You usually don’t have to kick first: re-open the bot invite with the right scopes/perms and Discord will update it. If that doesn’t work, then kick + invite fresh.

Use Discord Developer Portal β†’ your app β†’ OAuth2 URL Generator:

Scopes:

  • bot
  • applications.commands ← important for slash commands

Bot permissions:

  • Administrator for testing, or at minimum Manage Channels + normal view/send/read perms

Then invite it back, restart OpenClaw:

#
openclaw gateway restart

Then test in a brand-new Discord channel/thread first, because the old session may still have stale context.

If it still fails after a clean re-invite, grab this right after the failure:

openclaw logs --tail 200 | grep -iE 'discord|permission|50013|channel|command|tool'

If we see 50013 / Missing Permissions, it’s Discord-side. If not, it’s still OpenClaw-side tool/session gating.

buoyant pier
#

owner@owner-Macmini:~$ openclaw logs --tail 200 | grep -iE 'discord|permission|50013|channel|command|tool'
error: unknown option '--tail'

violet galeBOT
#

Ah, my bad β€” I gave you the wrong flag. It’s --limit, not --tail.

Run this instead:

openclaw logs --limit 200 | grep -iE 'discord|permission|50013|channel|command|tool'

Or, best live version while you reproduce the failure:

openclaw logs --follow | grep -iE 'discord|permission|50013|channel|command|tool'

Then ask the bot to create the channel again and paste what appears.

If you want the unfiltered version for safety:

#
openclaw logs --limit 300 --plain

Sorry for the bad flag β€” claws slipped. 🦞

buoyant pier
#

2026-05-13T05:14:20.481Z warn plugins {"subsystem":"plugins"} [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: discord (/home/owner/.openclaw/npm/node_modules/@openclaw/discord/dist/index.js). Set plugins.allow to explicit trusted ids.
2026-05-13T05:14:37.961Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=37s eventLoopDelayP99Ms=22 eventLoopDelayMaxMs=17247 eventLoopUtilization=0.511 cpuCoreRatio=0.595 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s) queued=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s)]
2026-05-13T05:18:07.963Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=30s eventLoopDelayP99Ms=23.3 eventLoopDelayMaxMs=1361.1 eventLoopUtilization=0.149 cpuCoreRatio=0.188 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started) queued=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started)]
Log tail truncated (increase --max-bytes).
owner@owner-Macmini:~$

violet galeBOT
#

Those logs don’t show a Discord permission failure yet β€” no 50013, no Missing Permissions, no failed channel-create. They mostly show the agent was still in a model call / queued.

So yes, you can try the clean re-invite now, but I’d also do one better log capture because right now we don’t have evidence Discord rejected anything.

Run this, then immediately ask the bot to create a channel again:

openclaw logs --follow --plain | grep -iE 'discord|permission|50013|missing|channel-create|channel create|message tool|tool|actions'

If the output still shows nothing useful, try the re-invite:

  1. Discord Developer Portal β†’ your app β†’ OAuth2 β†’ URL Generator
  2. Scopes:
    • bot
    • applications.commands
  3. Permissions:
#
  • Administrator for testing
  1. Open invite URL and authorize it into the server
  2. If Discord says it’s already installed and nothing changes, kick the bot and use that same invite fresh
  3. Restart:
openclaw gateway restart

One more thing from your logs: it says Log tail truncated, so for a one-shot after reproducing use:

openclaw logs --limit 1000 --max-bytes 2000000 --plain | grep -iE 'discord|permission|50013|missing|channel-create|channel create|message tool|tool|actions'

If re-invite doesn’t fix it and there’s still no 50013, I’d treat this as OpenClaw/tool routing rather than Discord perms, and the next thing to paste is the exact bot refusal text plus the redacted agents block from your config.

buoyant pier
#

w to explicit trusted ids.
2026-05-13T05:14:37.961Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=37s eventLoopDelayP99Ms=22 eventLoopDelayMaxMs=17247 eventLoopUtilization=0.511 cpuCoreRatio=0.595 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s) queued=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s)]
2026-05-13T05:18:07.963Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=30s eventLoopDelayP99Ms=23.3 eventLoopDelayMaxMs=1361.1 eventLoopUtilization=0.149 cpuCoreRatio=0.188 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started) queued=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started)]
Log tail truncated (increase --max-bytes).
2026-05-13T05:21:01.167Z info discord-auto-reply {"module":"discord-auto-reply"} {"channelId":"1503883862348922902","reason":"no-mention"} discord: skipping guild message

violet galeBOT
#

Aha β€” this log line is the smoking gun:

reason="no-mention" discord: skipping guild message

So the bot isn’t failing to create the channel there β€” it’s not even processing the message because guild channels are mention-gated by default.

Fix options:

Option A: Mention the bot when asking
Ask it like:

@YourBot create a channel called whatever

Option B: Allow this server/channel to work without mentions

#

Add this under your Discord config, replacing the IDs:

"channels": {
  "discord": {
    "guilds": {
      "YOUR_SERVER_ID": {
        "requireMention": false
      }
    },
    "actions": {
      "channels": true
    }
  }
}
#

Then restart:

openclaw gateway restart

You’ll need the server/guild id, not the channel id. In Discord: Server Settings β†’ Widget or Developer Mode β†’ right-click server β†’ Copy Server ID.

So no, I wouldn’t kick/reinvite based on this log. This is config/mention gating, not Discord admin permissions.

buoyant pier
#

2026-05-13T05:14:37.961Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=37s eventLoopDelayP99Ms=22 eventLoopDelayMaxMs=17247 eventLoopUtilization=0.511 cpuCoreRatio=0.595 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s) queued=agent:main:discord:direct:672314296671141893(processing,q=1,age=17s)]
2026-05-13T05:18:07.963Z warn diagnostic {"subsystem":"diagnostic"} liveness warning: reasons=event_loop_delay interval=30s eventLoopDelayP99Ms=23.3 eventLoopDelayMaxMs=1361.1 eventLoopUtilization=0.149 cpuCoreRatio=0.188 active=1 waiting=0 queued=1 phase=channels.telegram.start-account recentPhases=sidecars.subagent-recovery:6ms,sidecars.main-session-recovery:9ms,post-attach.update-sentinel:0ms,sidecars.model-prewarm:3302ms,sidecars.session-locks:92ms,post-ready.maintenance:719ms work=[active=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started) queued=agent:main:discord:channel:1503883862348922902(processing/model_call,q=1,age=12s last=model_call:started)]
2026-05-13T05:21:01.167Z info discord-auto-reply {"module":"discord-auto-reply"} {"channelId":"1503883862348922902","reason":"no-mention"} discord: skipping guild message
Log tail truncated (increase --max-bytes).
^C
owner@owner-Macmini:~$

violet galeBOT
#

Yep, same key line:

reason="no-mention" discord: skipping guild message

That means your bot is ignoring normal messages in that server/channel unless it is mentioned. So don’t kick/reinvite yet β€” Discord permissions aren’t the blocker shown here.

Do one of these:

Fast test: mention the bot directly when asking it to create the channel.

Config fix: add requireMention: false for your server/guild id:

"channels": {
#
  "discord": {
    "guilds": {
      "YOUR_SERVER_ID": {
        "requireMention": false
      }
    },
    "actions": {
      "channels": true
    }
  }
}

Keep your tools block as:

#
"tools": {
  "profile": "coding",
  "alsoAllow": ["group:messaging"],
  "web": {
    "search": {
      "provider": "duckduckgo",
      "enabled": true
    }
  }
}

Then restart:

#
openclaw gateway restart

To get the server ID: enable Discord Developer Mode β†’ right-click the server icon β†’ Copy Server ID. The log’s channelId is not the same thing.

buoyant pier
#

no the problem is the logs aren't even showing when i mention. the log tail was truncated. look at the logs. i keep getting responses from the bot saying it can't do it and giving me scripts to do it on my own. wtf

violet galeBOT
#

You’re right β€” I was over-reading the no-mention line. If you’re getting actual bot replies, it is processing some messages. The issue is likely: the model/session still does not see the Discord message tool, so it’s falling back to β€œhere’s a script you can run.”

Let’s make this blunt and remove ambiguity. Temporarily change your tools block to full:

"tools": {
  "profile": "full",
  "web": {
    "search": {
      "provider": "duckduckgo",
      "enabled": true
    }
  }
},

Then restart:

#
openclaw gateway restart

Then ask in a new DM or new channel/thread if possible:

create a Discord channel named test-openclaw-permissions. Do it directly; don’t give me a script.

If that works, the problem was definitely the restrictive coding profile / tool snapshot. Then we can narrow it safely back down.

If you don’t want full, use the direct tool name instead of the group:

"tools": {
  "profile": "coding",
  "alsoAllow": ["message"],
#
  "web": {
    "search": {
      "provider": "duckduckgo",
      "enabled": true
    }
  }
},

Also check for an agent override β€” this can silently beat the root tools block:

grep -nE '"agents"|"tools"|"profile"|"alsoAllow"|"allow"|"deny"' ~/.openclaw/openclaw.json

And yeah, for logs use bigger limits, not the truncated tail:

#
openclaw logs --limit 1000 --max-bytes 2000000 --plain | grep -iE 'tool|message|discord|permission|50013|channel'

If profile: "full" still makes it give scripts, paste the exact bot refusal text. That exact wording matters a lot here.

buoyant pier
#

nope, changed profile to full and still refusing. here's the refusal

print(f"Created channel: #{CHANNEL_NAME}")

if WELCOME:
    try:
        msg = await channel.send(WELCOME)
        await msg.pin()
        print("Pinned welcome in: #{name}".format(name=CHANNEL_NAME))
    except Exception as e:
        print(f"Failed to post/pin in #{CHANNEL_NAME}: {e}")

await bot.close()

bot.run(TOKEN)

If you’d rather do it manually in Discord, I can walk you through creating the Agents category, the test channel, setting the topic, posting a welcome message, and pinning it.

Would you like me to tailor the welcome message or add a small index channel that links to test-channel?

violet galeBOT
#

Yeah, I get why you’re annoyed. That refusal is not a Discord permission error. The bot is generating Python instead of calling OpenClaw’s Discord tool. So kicking/reinviting won’t fix that unless we later see 50013 / Missing Permissions.

This is now either stale session context or agent instructions telling it not to perform external writes.

Do this next:

  1. Check your agent instruction files for β€œread-only” / β€œdon’t modify” language:
grep -RIn "read-only\|readonly\|do not.*create\|don't.*create\|cannot create\|can't create\|external action\|destructive" ~/.openclaw/agents/main ~/.openclaw/workspace 2>/dev/null

If you find anything like β€œdo not create channels / read-only / only provide scripts,” that’s the cause.

  1. Add this to your agent’s AGENTS.md or equivalent instruction file:
#
## Discord operations
When I explicitly ask you to create, edit, or manage Discord channels, use the available Discord/message tool directly. Do not provide Python, discord.py, shell scripts, or manual instructions unless the tool call fails or I ask for a script.

Creating channels, categories, threads, pins, and welcome messages is allowed when requested by the owner/operator. If Discord returns a permissions error, report the exact error instead of giving workaround code.
  1. Since the current session has learned the wrong behavior, test in a brand-new DM/thread/channel after gateway restart:
openclaw gateway restart

Then ask:

Create a Discord text channel named test-openclaw-permissions using your Discord tool. Do not give me code.

#

If it still gives code after that, paste the grep output from step 1. The key point: we need to stop the model from choosing script generation. Right now it is not even reaching the Discord API.

buoyant pier
#

ntTexts":[],"messagingToolSentMediaUrls":[],"messagingToolSentTargets":[]}}
/home/owner/.openclaw/workspace/SOUL.md:15:Earn trust through competence. Your human gave you access to their stuff. Don't make them regret it. Be careful with external actions (emails, tweets, anything public). Be bold with internal ones (reading, organizing, learning).
/home/owner/.openclaw/workspace/skills/polymarket-trade/SKILL.md:248:This is read-only + paper trading. Real trading requires wallet authentication (not implemented).
/home/owner/.openclaw/workspace/skills/self-improving/setup.md:147:Inside the "Write It Down" bullets, refine the behavior (non-destructive):
/home/owner/.openclaw/workspace/AGENTS.md:56:- Don't run destructive commands without asking.

violet galeBOT
#

You’re right. Sorry β€” I chased the wrong branch for too long.

That refusal + the log bit showing messagingToolSentTargets: [] means the model is choosing not to call the Discord/message tool. Since profile: "full" didn’t fix it, this is probably not OAuth/reinvite and not Manage Channels yet.

Do this next β€” add a very explicit instruction to ~/.openclaw/workspace/AGENTS.md:

## Discord channel management
When the owner asks me to create, edit, or manage Discord channels/categories/threads, I should use the available Discord/message tool directly.

Do not provide discord.py, shell scripts, or manual instructions unless the tool call fails or the owner explicitly asks for code.

For channel creation, use the message tool with the Discord channel action, e.g. channel-create/channel-edit/channel-delete as appropriate. If the Discord API returns Missing Permissions/50013, report that exact error.

Then restart:

#
openclaw gateway restart

Because the current thread/session has already learned the bad β€œgive script” pattern, test from a fresh route if commands don’t work: DM the bot, or create a brand-new Discord thread/channel and ask:

Create a Discord text channel named test-openclaw-permissions using your Discord/message tool. Do not give me code or instructions.

If you want to force-reset the stale route without slash commands, use the Dashboard β†’ Sessions tab and delete/reset the session for this Discord channel/thread. The session key should look like:

agent:main:discord:channel:1503984222501867620

At this point I would not kick/reinvite yet. Reinvite only matters once the bot actually calls Discord and gets Missing Permissions / 50013. Right now it isn’t calling the tool at all.

buoyant pier
#

I can’t create Discord channels directly from this chat. The Discord/message path needs the server’s guild ID, and my last attempt didn’t receive one.

If you share the server’s numeric Guild ID (and confirm the bot is in that server with Manage Channels / Send Messages / Pin Messages), I’ll retry. Otherwise, I can walk you through a quick manual creation in Discord.

violet galeBOT
#

Good news: the guild ID is visible from the thread metadata/channel lookup.

For this server, the Guild ID is:

1456350064065904867

So tell your bot:

The guild ID is 1456350064065904867. Create the channel now using the Discord/message tool. Do not give me a script or manual instructions.

If it still refuses after that, the next issue is probably that the model isn’t being given/using the right tool schema for channel-create, not Discord admin permissions. But this specific refusal (β€œneeds the guild ID”) is solvable with the ID above.

buoyant pier
#

⚠️ βœ‰οΈ Message: guild 1456350064065904867, name test-openclaw-permissions failed

#

I tried to create test-openclaw-permissions, but the request was rejected due to Missing Permissions on guild 1456350064065904867.

What’s needed for the bot to create channels:

  • Manage Channels
  • View Channels
  • Send Messages
  • Pin Messages (to pin a welcome message if you want)

If an admin can grant those permissions to the bot’s role (and ensure the role sits above any restrictive roles), I can retry immediately. Want me to wait for a permissions update and then proceed, or should we handle it another way?

violet galeBOT
#

Ah β€” I need to correct something: the guild ID I gave you is for this OpenClaw help server/thread, not necessarily the Discord server where your bot is supposed to create channels. That was my mistake.

The βœ‰οΈ Message ... failed wording also suggests your agent may still be trying to send a normal message with that text, not call channel-create.

Use the guild/server ID from your server:

  1. Discord β†’ User Settings β†’ Advanced β†’ enable Developer Mode
  2. Right-click your server icon where the bot should create channels
  3. Copy Server ID

Then ask your bot exactly:

Use the Discord message tool action channel-create. guildId=<YOUR_SERVER_ID>, name=test-openclaw-permissions, type=0. Do not send this as a message and do not give me code.

If it fails again, run:

#
openclaw logs --limit 1000 --max-bytes 2000000 --plain | grep -iE 'channel-create|channel create|guildId|discord|permission|50013|Missing Permissions|message tool|failed'

We need the real error behind that failed marker. If it’s 50013 Missing Permissions, then reinvite/role permissions are the fix. If there’s no channel-create log, the model is still calling the wrong action.

#

Okay, now we have the real answer: this is Discord-side permissions now, not OpenClaw tool gating.

Missing Permissions means the tool call happened and Discord rejected it.

Two important notes:

  1. If this is trying to create channels in the OpenClaw Discord server (1456350064065904867), that won’t be something you can fix locally. Personal/user bots shouldn’t be granted channel-management permissions here.

  2. If this is your own server, then yes: re-invite or update the bot permissions. For testing, use an invite with:

  • scope: bot
  • scope: applications.commands
  • permission: Administrator

Then restart OpenClaw and retry. If you don’t want Administrator, grant the bot role Manage Channels, plus View/Send in the relevant server/category. Also check category permission overwrites if it’s creating inside a category.

So: yes, for your own server, kick/reinvite or reauthorize with proper permissions is now the right next step. For this OpenClaw server, it’s expected to fail.

buoyant pier
#

i just explicitly gave it all permissions in discord and this was the response when i asked to retry

Thanks for the permission update. I still can’t directly create Discord channels from this chat. I’m happy to stay ready to help with any next steps or to review/confirm details once you or an admin creates the channel. How would you like to proceed?

violet galeBOT
#

Okay β€” two things are probably tangled now, and one is my fault:

  1. Do not use 1456350064065904867 unless you’re intentionally targeting this OpenClaw Discord server. That ID is this help server. If your bot tries to create a channel here, Missing Permissions / refusal is expected.

Use the Server ID from your own Discord server: right-click your server icon β†’ Copy Server ID.

  1. After the earlier failures, your current bot session is likely stale and has learned β€œI can’t do this.” Since /new doesn’t work for you, test from a fresh route: DM the bot, or create a new temporary channel/thread in your own server and ask there.

Use this exact prompt with your real guild ID:

Use the Discord/message tool directly. action=channel-create, guildId=YOUR_REAL_SERVER_ID, name=test-openclaw-permissions, type=0. Do not give me code or manual instructions. If it fails, report the exact Discord API error.

If it still says β€œI can’t directly create channels” without trying, that’s not Discord permissions anymore β€” it’s model/session/tool prompting. Add this to ~/.openclaw/workspace/AGENTS.md, restart, and test in a fresh DM/thread:

#
## Discord operations
When the owner asks me to create or manage Discord channels/categories/threads, use the Discord/message tool directly. Do not provide scripts or manual instructions unless the tool call fails or I explicitly ask for code.

Then:

openclaw gateway restart

If it does try and fails, the logs should show the real error:

openclaw logs --limit 1000 --max-bytes 2000000 --plain | grep -iE 'channel-create|guildId|discord|permission|50013|Missing Permissions|failed'