Mainstream messaging

Discord

OpenClaw connects to Discord as a bot over the official Discord gateway. DMs and guild channels are supported.

What each page covers

Where each section moved

Every section heading from the previous single-page version keeps its anchor here, so an existing link such as /channels/discord#voice-channels still resolves. Each entry points at the page that now holds the content.

Configuration reference

Primary reference: Configuration reference - Discord.

High-signal Discord fields
  • startup/auth: enabled, token, applicationId, accounts.*, allowBots
  • policy: groupPolicy, dmPolicy, allowFrom, dm.*, guilds.*, guilds.*.channels.*
  • group introductions: joinIntro, accounts.*.joinIntro (default: true)
  • command: commands.native, commands.allowFrom (global), configWrites, slashCommand.ephemeral
  • gateway: proxy
  • reply/history: replyToMode, historyLimit, dmHistoryLimit, dms.*.historyLimit
  • delivery: textChunkLimit (default 2000), maxLinesPerMessage (default 17)
  • streaming: streaming.mode, streaming.chunkMode, streaming.preview.*, streaming.progress.*, streaming.block.* (legacy flat streamMode, draftChunk, blockStreaming, blockStreamingCoalesce, chunkMode keys are migrated into streaming.* by openclaw doctor --fix)
  • media: mediaMaxMb (caps outbound Discord uploads, default 100)
  • actions: actions.*
  • presence: activity, status, activityType, activityUrl, autoPresence.*
  • features: threadBindings, top-level bindings[] (type: "acp"), pluralkit, execApprovals, intents, agentComponents.enabled, agentComponents.ttlMs, activities, heartbeatVisibility, responsePrefix

Discord Activities

Set channels.discord.activities to let the core show_widget tool post self-contained HTML widgets that open inside Discord. The block is opt-in. Discord registers the Activity plumbing statically, but the current-channel presenter stays unavailable and /discord/activity remains externally hidden behind the normal 404 until an enabled account has an available bot token, resolved client secret, and application ID. See Discord Activities for the Developer Portal, tunnel, security, and troubleshooting setup.

  • activities.clientSecret: OAuth2 client secret for the Discord application; falls back to DISCORD_CLIENT_SECRET
  • activities.applicationId: optional Activity application ID; defaults to the bot application ID learned at gateway startup

Safety and operations

  • Treat bot tokens as secrets (DISCORD_BOT_TOKEN preferred in supervised environments).
  • Grant least-privilege Discord permissions.
  • If command deploy/state is stale, restart the gateway and re-check with openclaw channels status --probe.
Was this useful?
On this page

On this page