OpenClaw

OpenClaw Discord 頻道

即時通訊
簡單

透過 discord.js Bot Gateway API 將 OpenClaw 連接到 Discord。在 Discord 開發者入口建立機器人,啟用所需的 Intent 權限,邀請機器人到您的伺服器,AI 助手即可在 Discord 上運行。支援私訊、伺服器頻道對話、表情回應、討論串、斜線命令和富媒體。是最容易設定的頻道之一。

快速資訊
難度簡單
分類即時通訊
支援功能數5 / 6

Discord 支援功能

文字訊息

支援

媒體與檔案

支援

表情回應

支援

討論串

支援

語音訊息

不支援

群組聊天

支援

Discord 前置條件

  • 擁有 Discord 開發者入口存取權限的 Discord 帳號
  • Discord 開發者入口的 Bot Token(Applications → New Application → Bot)
  • 在 Privileged Gateway Intents 中啟用 Message Content Intent
  • OpenClaw Gateway 已執行並完成設定

Discord 快速設定

1

建立 Discord 機器人並啟用 Intent

前往 Discord 開發者入口(discord.com/developers),建立新應用程式,新增 Bot 使用者並複製 Bot Token。在 Privileged Gateway Intents 中,啟用 'Message Content Intent'(必要)和 'Server Members Intent'(建議用於成員查詢)。

2

新增 Discord 頻道設定

在 ~/.openclaw/openclaw.json 中新增 Discord 頻道設定。設定 token(或使用 DISCORD_BOT_TOKEN 環境變數),並設定 dm.policy 來控制誰可以私訊機器人。

3

邀請機器人到伺服器並測試

在開發者入口中,前往 OAuth2 → URL Generator。選擇 scopes 'bot' 和 'applications.commands'。選擇權限:View Channels、Send Messages、Read Message History、Embed Links、Attach Files、Add Reactions。開啟產生的 URL 邀請機器人到您的伺服器。傳送 '@機器人名稱 hello' 進行測試。

Discord 設定範例

config.json
{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "dm": {
        "policy": "pairing"
      }
    }
  }
}

Discord 深入了解

架構概述

OpenClaw 透過 discord.js 函式庫連接到 Discord —— 這是一個強大的 Node.js 模組,用於與 Discord Bot Gateway API 互動。機器人透過 WebSocket 連接到 Discord 的閘道,即時接收訊息、表情回應和其他互動事件。 工作階段路由因上下文而異:私訊對話合併到代理的主工作階段(agent:main:main),而伺服器頻道對話為每個頻道建立隔離的工作階段(agent:<agentId>:discord:channel:<channelId>)。斜線命令按使用者擁有獨立的隔離工作階段。群組私訊預設停用。
Bot Token 可以透過 DISCORD_BOT_TOKEN 環境變數設定,也可以在設定檔的 channels.discord.token 欄位中設定。
在 Discord 中啟用開發者模式(使用者設定 → 進階),即可透過右鍵選單輕鬆複製伺服器 ID、頻道 ID 和使用者 ID。

建立您的機器人

設定 Discord 機器人需要在 Discord 開發者入口中建立應用程式: 1. 前往 discord.com/developers/applications 2. 點選 'New Application' 並命名 3. 進入 Bot 區段,點選 'Add Bot' 4. 複製 Bot Token —— 妥善保存 5. 在 Privileged Gateway Intents 中啟用: • Message Content Intent(必要 —— 沒有它機器人無法讀取訊息內容) • Server Members Intent(建議用於成員/角色查詢) 6. 前往 OAuth2 → URL Generator 7. 選擇 scopes:'bot' 和 'applications.commands' 8. 選擇權限:View Channels、Send Messages、Read Message History、Embed Links、Attach Files、Add Reactions 9. 複製產生的 URL 並開啟它來邀請機器人到您的伺服器
除非偵錯需要,否則避免授予 Administrator 權限。使用最小所需權限以提升安全性。
請保管好您的 Bot Token。任何擁有該 Token 的人都可以控制您的機器人。如果洩露,請在開發者入口中重新產生。
Message Content Intent 是機器人讀取訊息文字的必要條件。沒有它,機器人雖然可以連線,但無法看到任何訊息內容。

私訊策略

私訊(DM)策略控制誰可以與您的 AI 助手進行私聊。OpenClaw 支援四種策略: • pairing(預設)—— 未知傳送者會收到一個限時配對碼(1 小時後過期)。在終端機透過 'openclaw pairing approve discord <code>' 審核。審核通過後即可自由聊天。 • allowlist —— 只有 dm.allowFrom 中明確列出的使用者 ID 可以傳送訊息給機器人。其他人將被靜默忽略。 • open —— 任何私訊機器人的人都會收到回覆。需要 dm.allowFrom=["*"] 才能生效。請謹慎使用。 • disabled —— 完全關閉私訊處理。機器人不會回應任何私訊。
openclaw.json
{
  "channels": {
    "discord": {
      "dm": {
        "policy": "pairing",
        "allowFrom": ["123456789012345678"]
      }
    }
  }
}

伺服器頻道設定

伺服器(Guild)頻道是大多數 Discord 互動發生的地方。OpenClaw 提供細粒度的控制,可以管理機器人在哪些伺服器和頻道中運作。 頂層設定: • groupPolicy —— 控制伺服器頻道的處理方式。選項:open(在所有頻道中回應)、disabled(忽略所有伺服器訊息)、allowlist(限制為已設定的伺服器) 每伺服器設定可為每個伺服器自訂行為: • slug —— 用於顯示的友善識別碼 • users —— 使用者白名單(ID 或名稱) • requireMention —— 是否需要 @提及 機器人 • reactionNotifications —— 控制表情回應事件通知(off、own、all、allowlist) 每頻道規則可在伺服器內提供更精細的控制: • allow —— 啟用/停用該頻道 • requireMention —— 頻道層級的提及要求 • users —— 頻道使用者白名單 • skills —— 技能篩選器(省略則全部可用) • systemPrompt —— 為 AI 提供的額外上下文指令
openclaw.json
{
  "channels": {
    "discord": {
      "groupPolicy": "open",
      "guilds": {
        "YOUR_GUILD_ID": {
          "slug": "my-server",
          "requireMention": true,
          "channels": {
            "CHANNEL_ID": {
              "allow": true,
              "requireMention": false,
              "systemPrompt": "You are a helpful assistant in this channel."
            }
          }
        }
      }
    }
  }
}
在 Discord 中啟用開發者模式(使用者設定 → 進階),即可右鍵複製伺服器、頻道和使用者 ID。
每頻道 systemPrompt 可以讓 AI 在不同頻道擁有不同的角色或指令。

表情回應與訊息確認

OpenClaw 支援 Discord 的表情回應系統,用於訊息確認和接收回應通知。 訊息確認回應:機器人可以在收到訊息時用表情回應來表示正在處理。透過 messages.ackReaction 設定。回應可以在 AI 回覆後透過 messages.removeAckAfterReply 自動移除。 回應通知:可以按伺服器設定哪些回應觸發代理通知: • off —— 不通知 • own —— 僅機器人訊息的回應 • all —— 頻道中所有回應 • allowlist —— 僅白名單使用者的回應
openclaw.json
{
  "channels": {
    "discord": {
      "messages": {
        "ackReaction": "👀",
        "removeAckAfterReply": true
      },
      "guilds": {
        "GUILD_ID": {
          "reactionNotifications": "own"
        }
      }
    }
  }
}

訊息格式與分塊

Discord 有 2,000 字元的訊息限制。OpenClaw 透過自動分塊來處理較長的 AI 回覆。 關鍵設定: • textChunkLimit —— 每個訊息塊的最大字元數(預設:2000) • maxLinesPerMessage —— 每則訊息的軟行數限制(預設:17) • chunkMode —— 分割策略:'length'(預設,硬字元限制)或 'newline'(按段落邊界分割) 機器人還會注入最近的伺服器訊息作為上下文(透過 historyLimit 設定,預設 20 則訊息),這樣 AI 可以自然地參與正在進行的對話。
openclaw.json
{
  "channels": {
    "discord": {
      "textChunkLimit": 2000,
      "chunkMode": "newline",
      "historyLimit": 20
    }
  }
}

斜線命令與工具操作

OpenClaw 在機器人啟動時自動註冊 Discord 原生斜線命令(預設:auto,可透過 commands.native 設定)。將 commands.native 設為 false 會清除之前註冊的命令。命令遵循與訊息相同的白名單規則 —— 未授權使用者在 Discord UI 中可以看到命令,但會收到「未授權」的回覆。 工作階段隔離:斜線命令使用獨立的工作階段金鑰(agent:<agentId>:discord:slash:<userId>),而非共享的 main 工作階段,提供按使用者隔離的體驗。 代理支援豐富的工具操作來與 Discord 互動: • 訊息 —— 傳送、編輯、刪除、置頂/取消置頂訊息、搜尋訊息 • 討論串 —— 建立討論串、列出討論串、在討論串中回覆 • 回應 —— 對訊息傳送表情回應、列出回應 • 管理 —— 禁言、踢出、封鎖成員(預設停用) • 伺服器資訊 —— 成員資訊、角色資訊、頻道資訊、表情列表 • 狀態 —— 設定機器人狀態(預設停用) 回覆標籤允許模型控制訊息討論串: • [[reply_to_current]] —— 回覆觸發訊息 • [[reply_to:<id>]] —— 回覆指定訊息 ID
確保 OAuth2 邀請 URL 中包含 'applications.commands' scope,斜線命令才會顯示。
管理工具(禁言、踢出、封鎖)和角色管理預設停用。如需使用,請在設定中明確啟用。

媒體與檔案處理

OpenClaw 支援透過 Discord 傳送和接收媒體檔案。預設最大上傳大小為 8 MB(可透過 mediaMaxMb 設定)。 支援的操作: • 接收使用者的圖片和檔案附件 • 在回覆中傳送圖片、文件和其他檔案 • 嵌入連結的富文字預覽 機器人需要 'Attach Files' 權限才能在伺服器頻道中傳送媒體。
Discord 的檔案大小限制取決於伺服器的 Boost 等級。預設為 8 MB(無 Boost),Level 2 為 50 MB,Level 3 為 100 MB。

PluralKit 整合

OpenClaw 可選支援 PluralKit 代理訊息解析,允許機器人正確辨識來自 PluralKit 系統的訊息。 啟用後,機器人會將代理訊息解析回其原始 PluralKit 成員身份。這對使用 PluralKit 進行系統/多重身份訊息路由的社群非常有用。 關鍵細節: • 在白名單中使用 pk:<memberId> 前綴來比對 PluralKit 成員 • 成員名稱也可透過顯示名稱或 slug 進行比對 • 查詢使用原始 Discord 訊息 ID,有效期為 PluralKit 的 30 分鐘視窗 • 如果查詢失敗,代理訊息被視為機器人訊息(除非 allowBots=true,否則會被捨棄)
openclaw.json
{
  "channels": {
    "discord": {
      "pluralkit": {
        "enabled": true,
        "token": "pk_live_..."
      }
    }
  }
}
私有 PluralKit 系統需要 pluralkit.token 來解析成員。沒有它,代理訊息會被視為機器人訊息並捨棄。
在白名單中使用 pk:<memberId> 前綴來精確比對 PluralKit 成員。

執行審核(按鈕 UI)

Discord 支援基於按鈕的執行操作審核流程。啟用後,機器人會在私訊中向指定審核者傳送互動按鈕(允許一次、始終允許、拒絕)。 這取代了基於命令的 /approve 流程,提供更友善的介面。要求: • execApprovals.enabled 必須為 true • 審核者的 Discord 使用者 ID 必須在 execApprovals.approvers 清單中 • 可選的 agentFilter 和 sessionFilter 陣列限制哪些代理/工作階段觸發審核 注意:/approve <id> 命令僅用於轉發的審核。Discord 按鈕 UI 在直接互動中優先於基於命令的審核。
openclaw.json
{
  "channels": {
    "discord": {
      "execApprovals": {
        "enabled": true,
        "approvers": ["USER_ID_1", "USER_ID_2"],
        "agentFilter": [],
        "sessionFilter": []
      }
    }
  }
}
如果審核按鈕未出現或看到 'unknown approval id' 錯誤,請確認使用者 ID 已列入 execApprovals.approvers 且 execApprovals.enabled 為 true。

操作權限閘控

OpenClaw 提供細粒度的控制來管理代理可以執行哪些 Discord 工具操作。操作透過 channels.discord.actions.<action>(true/false)進行閘控。 預設啟用: • reactions、stickers、emojiUploads、stickerUploads、polls、permissions、messages、threads、pins、search、memberInfo、roleInfo、channelInfo、voiceStatus、events、channels 預設停用: • roles —— 角色管理(指派/移除角色) • moderation —— 禁言、踢出、封鎖成員 • presence —— 設定機器人狀態/活動 停用特定操作可以減少機器人的功能範圍並降低風險。例如,設定 channels.discord.actions.moderation=false 確保代理永遠不會踢出或封鎖成員。
遵循最小權限原則:只啟用您的使用情境實際需要的操作。
透過 guilds.<id>.tools 和 guilds.<id>.channels.<id>.tools 可以實現按伺服器和按頻道的工具權限覆寫,提供更精細的控制。

白名單解析與比對

OpenClaw 支援多種格式來指定白名單中的使用者和頻道: • 數字 ID(建議)—— 例如 "123456789012345678" • Discord 使用者/頻道名稱 —— 例如 "username"、"#channel-name" • 提及格式 —— 例如 "<@userId>"、"<#channelId>" • 前綴格式 —— discord:、user:、channel:、pk:(用於 PluralKit 成員) • 萬用字元 —— "*" 表示無限制存取 啟動時,當機器人可以搜尋成員時(需要 Server Members Intent),OpenClaw 會將名稱解析為 ID。對映會被記錄;未解析的項目保持原樣。 擁有者偵測:當按伺服器或按頻道的 users 白名單比對到傳送者時,OpenClaw 會在系統提示中將傳送者視為擁有者。全域擁有者透過 commands.ownerAllowFrom 設定。 討論串繼承:討論串繼承父頻道的設定(白名單、requireMention、skills、prompts),除非使用討論串的頻道 ID 單獨設定。
盡可能使用數字 ID 以確保可靠比對。基於名稱的解析需要 Server Members Intent,在大型伺服器中可能失敗。
Slug 格式為小寫且空格替換為連字號(例如 #my-help → slug my-help)。
伺服器頻道主題會作為上下文注入,但不會作為系統提示 —— 請將其視為不可信輸入。

Discord 設定參考

enabled
Type: booleanDefault: true

啟用或停用 Discord 頻道

token
Type: stringDefault: ""

Discord Bot Token。也可使用 DISCORD_BOT_TOKEN 環境變數

dm.policy
Type: stringDefault: "pairing"

控制誰可以私訊機器人。選項:pairing、allowlist、open、disabled

dm.allowFrom
Type: string[]Default: []

允許私訊機器人的 Discord 使用者 ID(當 dm.policy 為 allowlist 時)

groupPolicy
Type: stringDefault: "allowlist"

伺服器頻道處理策略。選項:open、disabled、allowlist

guilds
Type: objectDefault: {}

按伺服器 ID 索引的每伺服器設定。包含 slug、users、channels、requireMention 等

requireMention
Type: booleanDefault: true

機器人在伺服器頻道中是否需要 @提及 才回覆

messages.ackReaction
Type: stringDefault: ""

處理訊息時用於確認的表情回應

messages.removeAckAfterReply
Type: booleanDefault: false

AI 回覆後是否移除確認表情回應

textChunkLimit
Type: numberDefault: 2000

每個訊息塊的最大字元數(Discord 限制為 2000)

chunkMode
Type: stringDefault: "length"

長回覆的分割方式。選項:length(硬字元限制)、newline(按段落分割)

historyLimit
Type: numberDefault: 20

作為 AI 上下文包含的最近伺服器訊息數量

mediaMaxMb
Type: numberDefault: 8

媒體檔案上傳的最大大小(MB)

replyToMode
Type: stringDefault: "off"

回覆討論串模式。選項:off、first(僅首個塊作為回覆)、all(所有塊都作為回覆)

configWrites
Type: booleanDefault: true

允許透過 Discord /config set|unset 命令發起的設定更新

allowBots
Type: booleanDefault: false

是否處理其他機器人的訊息。請謹慎使用以避免迴圈

retry.attempts
Type: numberDefault: 3

Discord API 呼叫失敗時的重試次數

retry.minDelayMs
Type: numberDefault: 500

重試之間的最小延遲毫秒數

retry.maxDelayMs
Type: numberDefault: 30000

重試之間的最大延遲毫秒數

retry.jitter
Type: numberDefault: 0.1

套用於重試延遲的抖動因子

dm.enabled
Type: booleanDefault: true

是否接受私訊

dm.groupEnabled
Type: booleanDefault: false

啟用群組私訊處理

dm.groupChannels
Type: string[]Default: []

群組私訊頻道白名單

dmHistoryLimit
Type: numberDefault: -

每使用者私訊歷史記錄限制覆寫

maxLinesPerMessage
Type: numberDefault: 17

每則訊息塊的軟行數限制

commands.native
Type: string | booleanDefault: "auto"

原生斜線命令註冊。選項:auto(Discord 預設啟用)、true、false

commands.text
Type: objectDefault: {}

文字命令設定,要求獨立的 /... 訊息

commands.useAccessGroups
Type: booleanDefault: false

是否對命令執行存取群組檢查

actions.*
Type: booleanDefault: varies

工具操作權限閘控。大部分預設啟用;roles、moderation 和 presence 預設停用

pluralkit.enabled
Type: booleanDefault: false

啟用 PluralKit 代理訊息解析

Discord 常見問題

Discord 故障排除

機器人已連線但不回覆訊息

Message Content Intent 未啟用、機器人缺少頻道權限,或提及要求設定不正確。

在 Discord 開發者入口中確認 Message Content Intent 已啟用(Bot → Privileged Gateway Intents)。確認機器人擁有 View Channels、Send Messages 和 Read Message History 權限。檢查 requireMention 是否設為 true 而機器人未被 @提及。
私訊不運作

設定中可能停用了私訊處理,或配對審核仍在等待中。

檢查 dm.policy 是否設為 'disabled'。如果使用 pairing 模式,透過 'openclaw pairing list' 檢視待審核的配對請求,並透過 'openclaw pairing approve discord <code>' 審核。如果使用 allowlist 模式,確保使用者的 Discord ID 在 dm.allowFrom 中。
斜線命令在 Discord 中不可見

機器人的 OAuth2 邀請 URL 中未包含 'applications.commands' scope。

前往開發者入口 → OAuth2 → URL Generator,確保同時選取 'bot' 和 'applications.commands' scopes,產生新的邀請 URL 並重新邀請機器人到您的伺服器。斜線命令與一般訊息受相同的白名單規則約束。
機器人被限速或卡住

觸發了 Discord API 速率限制,或閘道連線處於異常狀態。

使用 'openclaw gateway --force' 重新啟動閘道。OpenClaw 內建了指數退避重試邏輯來處理速率限制(429 回應)。如果問題持續存在,檢查 channels.discord.retry 下的重試設定。
requireMention 設為 false 但機器人仍然不回覆

groupPolicy 預設值為 'allowlist',機器人只在明確設定的伺服器/頻道中回應。

將 groupPolicy 設為 'open' 以在所有頻道中回應,或將特定的伺服器和頻道 ID 新增到 guilds 設定中。確保伺服器項目包含 allow: true 的頻道。
執行審核按鈕未在私訊中出現

execApprovals 未啟用,或使用者的 Discord ID 未列在 approvers 陣列中。

在 Discord 頻道設定中將 execApprovals.enabled 設為 true。將使用者的數字 Discord ID 新增到 execApprovals.approvers 陣列中。使用按鈕 UI(而非 /approve 命令)進行直接 Discord 審核。