Discord (Bot API)
ステータス: 公式Discord gateway経由でDMとguild channelに対応済みです。Pairing
Discord DMはデフォルトでペアリングモードです。
Slash commands
ネイティブコマンドの動作とコマンドカタログ。
Channel troubleshooting
チャネル横断の診断と修復フロー。
クイックセットアップ
新しいapplicationをbot付きで作成し、そのbotを自分のサーバーに追加して、OpenClawにペアリングする必要があります。botは自分専用のプライベートサーバーに追加することをおすすめします。まだサーバーがない場合は、先に作成してください(Create My Own > For me and my friends を選択)。Discord applicationとbotを作成する
Discord Developer Portalにアクセスし、New Application をクリックします。「OpenClaw」のような名前を付けます。サイドバーの Bot をクリックします。Username を、OpenClaw agentに付けている名前に設定します。
特権intentを有効にする
Bot ページのまま、Privileged Gateway Intents までスクロールし、以下を有効にします。
- Message Content Intent(必須)
- Server Members Intent(推奨。ロールallowlistと名前からIDへの照合に必要)
- Presence Intent(任意。presence更新が必要な場合のみ)
bot tokenをコピーする
Bot ページの上部まで戻り、Reset Token をクリックします。tokenをコピーして、どこかに保存します。これが Bot Token で、すぐ後で必要になります。
名前に反して、これは最初のtokenを生成するものであり、何かが「reset」されるわけではありません。
招待URLを生成してbotをサーバーに追加する
サイドバーの OAuth2 をクリックします。サーバーにbotを追加するために必要な権限を持つ招待URLを生成します。OAuth2 URL Generator までスクロールし、以下を有効にします。
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions(任意)
Developer Modeを有効にしてIDを集める
Discordアプリに戻り、内部IDをコピーできるようにDeveloper Modeを有効にする必要があります。
- User Settings(アバターの横の歯車アイコン)→ Advanced → Developer Mode をオンにする
- サイドバーの server icon を右クリック → Copy Server ID
- 自分の avatar を右クリック → Copy User ID
サーバーメンバーからのDMを許可する
ペアリングを機能させるには、DiscordでbotがあなたにDMを送れる必要があります。server icon を右クリック → Privacy Settings → Direct Messages をオンにします。これにより、サーバーメンバー(botを含む)があなたにDMを送れるようになります。OpenClawでDiscord DMを使いたい場合は、これを有効のままにしてください。guild channelのみを使う予定なら、ペアリング後にDMを無効にできます。
bot tokenを安全に設定する(chatで送信しない)
Discord bot tokenは秘密情報です(パスワードのようなものです)。agentにメッセージを送る前に、OpenClawを実行しているマシンで設定してください。OpenClawがすでにバックグラウンドサービスとして実行中なら、OpenClaw Mac app経由、または
openclaw gateway run プロセスを停止して再起動して再起動してください。OpenClawを設定してペアリングする
- Ask your agent
- CLI / config
既存の任意のチャネル(例: Telegram)でOpenClaw agentと会話し、次のように伝えます。Discordが最初のチャネルである場合は、代わりにCLI / configタブを使ってください。
「Discord bot tokenはすでにconfigに設定しました。User ID<user_id>と Server ID<server_id>でDiscordのセットアップを完了してください。」
token解決はaccount認識対応です。configのtoken値がenv fallbackより優先されます。
DISCORD_BOT_TOKEN はdefault accountでのみ使用されます。
高度なoutbound call(message tool/channel action)では、明示的な呼び出し単位の token がその呼び出しに使われます。これは送信系とread/probe系のaction(たとえばread/search/fetch/thread/pins/permissions)に適用されます。account policy/retry設定は、アクティブなruntime snapshot内で選択されたaccountから引き続き取得されます。推奨: guild workspaceを設定する
DMが機能するようになったら、Discordサーバーを完全なworkspaceとして設定できます。各channelが独自のcontextを持つ独立したagent sessionになります。これは、自分と自分のbotだけがいるプライベートサーバーにおすすめです。サーバーをguild allowlistに追加する
これにより、agentはDMだけでなく、サーバー上の任意のchannelで応答できるようになります。
- Ask your agent
- Config
「自分のDiscord Server ID <server_id> をguild allowlistに追加してください」
@mentionなしでも応答できるようにする
デフォルトでは、agentはguild channel内では@mentionされたときだけ応答します。プライベートサーバーでは、すべてのメッセージに応答させたい場合が多いでしょう。
- Ask your agent
- Config
「このサーバーで、自分のagentが@mentionなしでも応答できるようにしてください」
#coding、#home、#research など、ワークフローに合うものを設定できます。
Runtime model
- GatewayがDiscord接続を管理します。
- 返信ルーティングは決定的です: Discordのinbound replyはDiscordに返されます。
- デフォルト(
session.dmScope=main)では、direct chatはagentのmain session(agent:main:main)を共有します。 - Guild channelは独立したsession keyです(
agent:<agentId>:discord:channel:<channelId>)。 - Group DMはデフォルトで無視されます(
channels.discord.dm.groupEnabled=false)。 - ネイティブslash commandは独立したcommand session(
agent:<agentId>:discord:slash:<userId>)で実行されますが、ルーティングされた会話sessionへのCommandTargetSessionKeyは保持されます。
Forum channels
Discord forumとmedia channelはthread postのみ受け付けます。OpenClawはそれらを作成する2つの方法をサポートしています。- forum親(
channel:<forumId>)にメッセージを送信すると、自動でthreadが作成されます。thread titleには、メッセージの最初の空でない行が使われます。 openclaw message thread createを使って直接threadを作成します。forum channelには--message-idを渡さないでください。
channel:<threadId>)に送信してください。
Interactive components
OpenClawはagent message向けにDiscord components v2 containerをサポートしています。components payload付きでmessage toolを使ってください。interaction結果は通常のinbound messageとしてagentにルーティングされ、既存のDiscord replyToMode 設定に従います。
サポートされるblock:
text,section,separator,actions,media-gallery,file- action rowでは最大5個のbutton、または単一のselect menuを使用可能
- select type:
string,user,role,mentionable,channel
components.reusable=true を設定してください。
buttonをクリックできるユーザーを制限するには、そのbuttonに allowedUsers を設定します(Discord user ID、tag、または *)。設定されている場合、一致しないユーザーにはephemeralな拒否が返されます。
/model と /models slash commandは、providerとmodelのdropdownにSubmit手順を加えたインタラクティブなmodel pickerを開きます。pickerの返信はephemeralで、起動したユーザー本人だけが使用できます。
ファイル添付:
fileblockはattachment参照(attachment://<filename>)を指している必要がありますmedia/path/filePath(単一ファイル)でattachmentを指定します。複数ファイルにはmedia-galleryを使ってください- upload名をattachment参照に一致させたい場合は、
filenameを使って上書きします
- 最大5個のfieldを持つ
components.modalを追加します - field type:
text,checkbox,radio,select,role-select,user-select - OpenClawがtrigger buttonを自動で追加します
アクセス制御とルーティング
- DM policy
- Guild policy
- Mentions and group DMs
channels.discord.dmPolicy はDMアクセスを制御します(legacy: channels.discord.dm.policy)。pairing(デフォルト)allowlistopen(channels.discord.allowFromに"*"を含める必要があります。legacy:channels.discord.dm.allowFrom)disabled
pairing モードではペアリングが促されます)。複数accountの優先順位:channels.discord.accounts.default.allowFromはdefaultaccountにのみ適用されます。- 名前付きaccountは、自身の
allowFromが未設定の場合にchannels.discord.allowFromを継承します。 - 名前付きaccountは
channels.discord.accounts.default.allowFromは継承しません。
user:<id><@id>mention
ロールベースのagent routing
bindings[].match.roles を使うと、Discord guild memberをrole IDごとに別のagentへルーティングできます。ロールベースbindingはrole IDのみ受け付け、peerまたはparent-peer bindingの後、guild-only bindingの前に評価されます。bindingが他のmatch fieldも設定している場合(例: peer + guildId + roles)、設定されたすべてのfieldが一致する必要があります。
Developer Portalのセットアップ
appとbotを作成する
appとbotを作成する
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- bot tokenをコピー
Privileged intents
Privileged intents
Bot -> Privileged Gateway Intents で以下を有効にします。
- Message Content Intent
- Server Members Intent(推奨)
setPresence)の設定には、member向けpresence updateを有効にする必要はありません。OAuth scopeとbaseline permissions
OAuth scopeとbaseline permissions
OAuth URL generator:
- scope:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions(任意)
Administrator は避けてください。IDをコピーする
IDをコピーする
Discord Developer Modeを有効にしてから、以下をコピーします。
- server ID
- channel ID
- user ID
Native commandsとcommand auth
commands.nativeのデフォルトは"auto"で、Discordでは有効です。- チャネルごとのoverride:
channels.discord.commands.native commands.native=falseは、以前登録されたDiscord native commandを明示的に消去します。- Native command authは、通常のmessage処理と同じDiscord allowlist/policyを使用します。
- 権限のないユーザーにもDiscord UI上ではcommandが表示される場合がありますが、実行時にはOpenClaw authが強制され、「not authorized」が返されます。
ephemeral: true
機能詳細
Reply tagとnative reply
Reply tagとnative reply
Live stream preview
Live stream preview
OpenClawは一時messageを送信して、textが届くたびに編集することで、下書きreplyをstreamできます。Preview streamingはtext専用で、media replyは通常配信にfallbackします。注: preview streamingはblock streamingとは別です。Discordでblock streamingが明示的に有効な場合、OpenClawは二重streamingを避けるためpreview streamをスキップします。
channels.discord.streamingはpreview streamingを制御します(off|partial|block|progress、デフォルト:off)。- Discordのpreview editはすぐにrate limitに達することがあり、特に複数のbotやgatewayが同じaccountまたはguild trafficを共有している場合があるため、デフォルトは
offのままです。 progressはチャネル間の一貫性のために受け付けられ、Discordではpartialにマップされます。channels.discord.streamModeはlegacy aliasで、自動移行されます。partialはtoken到着に合わせて単一のpreview messageを編集します。blockは下書きサイズのchunkを出力します(サイズと分割点の調整にはdraftChunkを使います)。
block モードのchunking default(channels.discord.textChunkLimit に合わせてclampされます):History、context、thread behavior
History、context、thread behavior
Guild history context:
channels.discord.historyLimitデフォルト20- fallback:
messages.groupChat.historyLimit 0で無効
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord threadはchannel sessionとしてルーティングされます
- parent thread metadataはparent-session linkageに使用できます
- thread固有のentryが存在しない限り、thread configは親channel configを継承します
Subagent向けthread-bound session
Subagent向けthread-bound session
Discordではthreadをsession targetにbindできるため、そのthread内の後続messageは同じsession(subagent sessionを含む)に継続してルーティングされます。コマンド:注:
/focus <target>現在または新規threadをsubagent/session targetにbind/unfocus現在のthread bindingを解除/agentsアクティブなrunとbinding状態を表示/session idle <duration|off>focused bindingの非アクティブ時自動unfocusを確認/更新/session max-age <duration|off>focused bindingの最大有効期間を確認/更新
session.threadBindings.*はグローバルdefaultを設定します。channels.discord.threadBindings.*はDiscordの動作をoverrideします。sessions_spawn({ thread: true })用にthreadを自動作成/自動bindするには、spawnSubagentSessionsをtrueにする必要があります。- ACP用にthreadを自動作成/自動bindするには、
spawnAcpSessionsをtrueにする必要があります(/acp spawn ... --thread ...またはsessions_spawn({ runtime: "acp", thread: true }))。 - accountでthread bindingが無効な場合、
/focusと関連するthread binding操作は利用できません。
永続的なACP channel binding
永続的なACP channel binding
安定した「常時稼働」ACP workspaceには、Discord conversationを対象にするトップレベルの型付きACP bindingを設定します。Config path:注:
bindings[]にtype: "acp"とmatch.channel: "discord"を設定
/acp spawn codex --bind hereは現在のDiscord channelまたはthreadをその場でbindし、以後のmessageを同じACP sessionにルーティングし続けます。- これは「新しいCodex ACP sessionを開始する」を意味することはありますが、それ自体では新しいDiscord threadは作成しません。既存のchannelがchat surfaceのまま使われます。
- Codex自体は、ディスク上の独自の
cwdまたはbackend workspaceで動作する場合があります。そのworkspaceはruntime stateであり、Discord threadではありません。 - Thread messageは親channel ACP bindingを継承できます。
- bind済みchannelまたはthreadでは、
/newと/resetは同じACP sessionをその場でresetします。 - 一時的なthread bindingも引き続き機能し、有効な間はtarget解決をoverrideできます。
spawnAcpSessionsは、OpenClawが--thread auto|here経由で子threadを作成/bindする必要がある場合にのみ必要です。現在のchannelでの/acp spawn ... --bind hereには不要です。
Reaction通知
Reaction通知
guildごとのreaction notification mode:
offown(デフォルト)allallowlist(guilds.<id>.usersを使用)
Ack reaction
Ack reaction
ackReaction は、OpenClawがinbound messageを処理中であることを示す確認emojiを送信します。解決順序:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- agent identityのemoji fallback(
agents.list[].identity.emoji、なければ"👀")
- Discordはunicode emojiまたはcustom emoji名を受け付けます。
- channelまたはaccountでreactionを無効にするには
""を使います。
Config書き込み
Config書き込み
channel起点のconfig書き込みはデフォルトで有効です。これは
/config set|unset フローに影響します(command機能が有効な場合)。無効化:Gateway proxy
Gateway proxy
channels.discord.proxy を使って、Discord gateway WebSocket trafficと起動時REST lookup(application ID + allowlist解決)をHTTP(S) proxy経由にルーティングします。PluralKitサポート
PluralKitサポート
proxied messageをsystem member identityに対応付けるため、PluralKit解決を有効にします。注:
- allowlistには
pk:<memberId>を使用できます - member display nameは、
channels.discord.dangerouslyAllowNameMatching: trueの場合にのみ名前/slugで一致判定されます - lookupは元message IDを使用し、時間範囲制約があります
- lookupに失敗した場合、proxied messageはbot messageとして扱われ、
allowBots=trueでない限り破棄されます
Presence設定
Presence設定
presence updateは、statusまたはactivity fieldを設定したとき、またはauto presenceを有効にしたときに適用されます。statusのみの例:activityの例(custom statusがデフォルトのactivity typeです):streamingの例:activity type対応表:auto presenceはruntime availabilityをDiscord statusに対応付けます: healthy => online、degradedまたはunknown => idle、exhaustedまたはunavailable => dnd。任意のtext override:
- 0: Playing
- 1: Streaming(
activityUrlが必要) - 2: Listening
- 3: Watching
- 4: Custom(activity textをstatus stateとして使用。emojiは任意)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText({reason}placeholderをサポート)
Discordでの承認
Discordでの承認
DiscordはDMでのbuttonベース承認処理をサポートし、必要に応じて元のchannelに承認promptを投稿することもできます。Config path:
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(任意。可能ならcommands.ownerAllowFromにfallback)channels.discord.execApprovals.target(dm|channel|both、デフォルト:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled が未設定または "auto" で、execApprovals.approvers または commands.ownerAllowFrom のどちらかから少なくとも1人のapproverを解決できる場合、Discordはnative exec approvalを自動有効化します。Discordは、channel allowFrom、legacy dm.allowFrom、またはdirect-message defaultTo からexec approverを推測しません。Discordをnative approval clientとして明示的に無効化するには enabled: false を設定してください。target が channel または both の場合、承認promptはchannel内に表示されます。解決済みapproverだけがbuttonを使用でき、他のユーザーにはephemeralな拒否が返されます。承認promptにはcommand textが含まれるため、channel配信は信頼できるchannelでのみ有効にしてください。session keyからchannel IDを導出できない場合、OpenClawはDM配信にfallbackします。Discordは、他のchat channelで使用される共有承認buttonも描画します。native Discord adapterは主に、approverのDM routingとchannel fanoutを追加します。
それらのbuttonが存在する場合、それらが主要な承認UXです。OpenClawは、tool resultがchat approvalを利用不可と示す場合、または手動承認しか手段がない場合にのみ、手動 /approve commandを含めるべきです。このhandler向けのGateway authは、他のGateway clientと同じ共有credential解決契約を使います。- env優先のlocal auth(
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDの後にgateway.auth.*) - local modeでは、
gateway.auth.*が未設定の場合にのみgateway.remote.*をfallbackとして使えます。設定済みだが未解決のlocal SecretRefはfail closedします - 該当する場合は
gateway.remote.*経由でremote-modeもサポート - URL overrideはoverride-safeです: CLI overrideは暗黙credentialを再利用せず、env overrideはenv credentialのみを使います
plugin:接頭辞付きIDはplugin.approval.resolveで解決されます。- それ以外のIDは
exec.approval.resolveで解決されます。 - Discordはここで追加のexec-to-plugin fallback hopは行いません。どのGateway methodを呼ぶかはID prefixで決まります。
Toolsとaction gate
Discord message actionには、messaging、channel admin、moderation、presence、metadata actionが含まれます。 主な例:- messaging:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reactions:
react,reactions,emojiList - moderation:
timeout,kick,ban - presence:
setPresence
event-create actionは、scheduled eventのcover imageを設定するための任意の image パラメータ(URLまたはlocal file path)を受け付けます。
action gateは channels.discord.actions.* の下にあります。
デフォルトのgate動作:
| Action group | Default |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled |
| roles | disabled |
| moderation | disabled |
| presence | disabled |
Components v2 UI
OpenClawはexec approvalとcross-context markerにDiscord components v2を使用します。Discord message actionも、カスタムUI用のcomponents を受け付けられます(高度な用途。discord tool経由でcomponent payloadを構築する必要があります)。一方、legacy embeds も引き続き利用できますが、推奨されません。
channels.discord.ui.components.accentColorは、Discord component containerで使われるaccent colorを設定します(hex)。- accountごとの設定は
channels.discord.accounts.<id>.ui.components.accentColor。 - components v2が存在する場合、
embedsは無視されます。
Voice channels
OpenClawはDiscord voice channelに参加し、リアルタイムで継続的な会話を行えます。これはvoice message attachmentとは別機能です。 要件:- native command(
commands.nativeまたはchannels.discord.commands.native)を有効にします。 channels.discord.voiceを設定します。- botには対象voice channelでのConnect + Speak権限が必要です。
/vc join|leave|status を使います。このcommandはaccount default agentを使用し、他のDiscord commandと同じallowlistおよびgroup policyルールに従います。
auto-joinの例:
voice.ttsはvoice playback専用でmessages.ttsをoverrideします。- voice transcript turnはDiscord
allowFrom(またはdm.allowFrom)からowner statusを導出します。owner以外のspeakerはowner専用tool(たとえばgatewayやcron)にアクセスできません。 - voiceはデフォルトで有効です。無効化するには
channels.discord.voice.enabled=falseを設定します。 voice.daveEncryptionとvoice.decryptionFailureToleranceは@discordjs/voiceのjoin optionにそのまま渡されます。@discordjs/voiceのdefaultは、未設定時にdaveEncryption=trueとdecryptionFailureTolerance=24です。- OpenClawは受信decrypt failureも監視し、短時間に繰り返しfailureが発生するとvoice channelからleave/rejoinして自動復旧します。
- 受信ログに
DecryptionFailed(UnencryptedWhenPassthroughDisabled)が繰り返し表示される場合、これは上流の@discordjs/voiceの受信バグで、discord.js #11419 で追跡されている可能性があります。
Voice messages
Discord voice messageはwaveform previewを表示し、OGG/Opus audioとmetadataが必要です。OpenClawはwaveformを自動生成しますが、gateway host上でaudio fileを検査および変換するためにffmpeg と ffprobe が利用可能である必要があります。
要件と制約:
- local file path を指定してください(URLは拒否されます)。
- text contentは省略してください(Discordは同じpayload内でtext + voice messageを許可しません)。
- 任意のaudio formatを受け付けます。必要に応じてOpenClawがOGG/Opusに変換します。
トラブルシューティング
許可されていないintentを使用した、またはbotがguild messageを見られない
許可されていないintentを使用した、またはbotがguild messageを見られない
- Message Content Intentを有効にする
- user/member解決に依存する場合はServer Members Intentを有効にする
- intent変更後にgatewayを再起動する
Guild messageが予期せずブロックされる
Guild messageが予期せずブロックされる
groupPolicyを確認するchannels.discord.guilds配下のguild allowlistを確認する- guildの
channelsmapが存在する場合、一覧にあるchannelだけが許可される requireMentionの動作とmention patternを確認する
Require mention falseなのにまだブロックされる
Require mention falseなのにまだブロックされる
よくある原因:
groupPolicy="allowlist"なのに一致するguild/channel allowlistがないrequireMentionが間違った場所に設定されている(channels.discord.guildsまたはchannel entryの下である必要があります)- 送信者がguild/channel
usersallowlistによってブロックされている
長時間実行handlerがタイムアウトする、またはreplyが重複する
長時間実行handlerがタイムアウトする、またはreplyが重複する
典型的なログ:listenerの初期化が遅い場合は
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- 単一account:
channels.discord.eventQueue.listenerTimeout - 複数account:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- 単一account:
channels.discord.inboundWorker.runTimeoutMs - 複数account:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - デフォルト:
1800000(30分)。無効化するには0を設定
eventQueue.listenerTimeout を使い、queueされたagent turnに別個の安全弁が欲しい場合のみ inboundWorker.runTimeoutMs
を使ってください。Permissions auditの不一致
Permissions auditの不一致
channels status --probe のpermission checkは、数値channel IDでのみ機能します。slug keyを使っている場合、runtime matchingは機能することがありますが、probeではpermissionを完全には検証できません。DMとpairingの問題
DMとpairingの問題
- DM無効:
channels.discord.dm.enabled=false - DM policy無効:
channels.discord.dmPolicy="disabled"(legacy:channels.discord.dm.policy) pairingモードでpairing approval待ち
bot to bot loop
bot to bot loop
デフォルトではbotが作成したmessageは無視されます。
channels.discord.allowBots=true を設定する場合は、loop動作を避けるために厳格なmentionとallowlistルールを使ってください。
botをmentionしたbot messageだけを受け付けるには、channels.discord.allowBots="mentions" を推奨します。Voice STTが DecryptionFailed(...) で途切れる
Voice STTが DecryptionFailed(...) で途切れる
- Discord voice receive recovery logicが入っているように、OpenClawを最新に保つ(
openclaw update) channels.discord.voice.daveEncryption=true(デフォルト)を確認するchannels.discord.voice.decryptionFailureTolerance=24(上流default)から始め、必要時のみ調整する- 以下のログを監視する:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- 自動rejoin後もfailureが続く場合は、ログを収集して discord.js #11419 と比較する
Configuration reference pointers
主な参照先: 重要度の高いDiscord field:- 起動/auth:
enabled,token,accounts.*,allowBots - policy:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - command:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - event queue:
eventQueue.listenerTimeout(listener budget),eventQueue.maxQueueSize,eventQueue.maxConcurrency - inbound worker:
inboundWorker.runTimeoutMs - reply/history:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - delivery:
textChunkLimit,chunkMode,maxLinesPerMessage - streaming:
streaming(legacy alias:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - media/retry:
mediaMaxMb,retrymediaMaxMbはoutbound Discord uploadの上限です(デフォルト:100MB)
- actions:
actions.* - presence:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - features:
threadBindings, トップレベルのbindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
安全性と運用
- bot tokenは秘密情報として扱ってください(監視付き環境では
DISCORD_BOT_TOKEN推奨)。 - Discord permissionは最小権限にしてください。
- command deploy/stateが古い場合は、gatewayを再起動して
openclaw channels status --probeで再確認してください。