☰
agent-scripts 的 discord-clawd 技能:通过 OpenClaw Relay 与 Discord 后端 Agent 会话对话的实战指南
2026/10/11 13:24:14 网站建设 项目流程

【免费下载链接】agent-scripts

Scripts for agents, shared between my repositories.

项目地址:https://gitcode.com/gh_mirrors/ag/agent-scripts
点击查看免费下载

discord-clawd是 agent-scripts 仓库中一个专门用于"通过 Discord 通道与 OpenClaw Agent/会话实时对话"的技能:任务需要向运行在 Discord 后端的 agent 会话提问、或者需要把消息投递到 Discord 通道时启用它,而它的底层传输完全复用仓库中的 OpenClaw Relay 辅助脚本openclaw_relay.py。读完本文你将掌握:如何列出并解析会话目标别名、何时选用ask/publish/force-send三种消息模式、如何配置session_aliases.json会话别名文件,以及发送真实内容前必须遵守的 guardrails 边界——最终能安全地把对话路由到 Discord 后端的 agent 会话,而不是误用于本地归档检索。

技能定位:实时会话中继,而非归档搜索

skills/discord-clawd/SKILL.md的开头就划清了技能边界:

Use this when the task is to talk with the Discord-backed agent/session, ask it a question, or post through that route.

它解决的场景是与 Discord 后端 agent/会话的双向对话——向它提问、或通过该路由发布消息。同时文档明确排除了另一类需求:本地 Discord 归档/历史/搜索查询,这类任务应改用$discrawl(注意skills/discrawl在本仓库中是一个指向仓库外部路径的符号链接,归档搜索功能独立于此技能)。

配套的skills/discord-clawd/agents/openai.yaml给出了该技能的对外接口定义:

interface: display_name: "Discord Clawd" short_description: "Talk to the Discord-backed OpenClaw agent" default_prompt: "Use $discord-clawd to route a private ask or explicit post through the Discord-backed OpenClaw agent/session."

其中default_prompt把技能用途凝练为两个动作:private ask(私有询问)与explicit post(显式发布),这恰好对应下文将要展开的ask与force-send两种命令模式。

传输层:OpenClaw Relay 辅助脚本

discord-clawd本身不实现协议细节,而是复用skills/openclaw-relay/scripts/openclaw_relay.py。这个 Python 脚本负责把提示词或消息通过 local / ssh 两种传输方式中继到本地或远程的 OpenClaw 会话(详见 openclaw-relay 技能文档)。

按原文档的运输流程,第一步是进入仓库目录并检查已知目标:

cd ~/Projects/agent-scripts python3 skills/openclaw-relay/scripts/openclaw_relay.py targets python3 skills/openclaw-relay/scripts/openclaw_relay.py resolve --target maintainers

说明:cd ~/Projects/agent-scripts是原作者示例中的仓库路径,实际使用时应切换到你自己 clone 的 agent-scripts 目录。targets子命令直接打印别名文件内容(见下文"会话别名配置"),resolve则把目标别名解析为可用的会话键。

各子命令一览

从openclaw_relay.py的build_parser()(源码)可以确认脚本支持的全部子命令与参数:

子命令作用关键参数
doctor健康检查,验证 acpx 仓库、.acpxrc.json、gateway token 是否就绪--transport,--host
targets列出已知目标别名—
resolve将别名或名称解析为会话键--target(必填)
sessions列出/过滤会话列表--query,--limit
ensure确保控制会话存在—
send向控制会话阻塞式发送消息--message(必填)
ask向指定目标会话发起私有询问--target,--message(均必填)
publish由目标会话决定是否发布--target,--text/--text-file,--context,--dry-run
force-send强制直接发布消息(可带媒体)--target,--text/--text-file,--media,--channel,--to等
start异步入队一条工作消息--message(必填)
status查看控制会话状态—
show展示会话内容摘要--limit
wait轮询等待会话推进--after-seq,--after-updated-at,--timeout,--interval
cancel取消排队中的工作—

所有子命令都共享add_shared_flags()(源码)定义的公共标志:--transport(local/ssh,默认local)、--host(默认steipete@steipete-macstudio.local)、--acpx-repo、--cwd、--agent、--session(控制会话名,默认codex-bridge)、--gateway-url、--gateway-token-file、--targets-file、--limit。脚本刻意避免内置个人路径,全部可用OPENCLAW_RELAY_*环境变量或命令行标志覆盖(见 openclaw-relay/SKILL.md 的 Defaults 小节)。

三种消息模式:ask、publish、force-send

原文档给出的模式选择规则是整个技能的核心决策点:

If the target alias exists, prefer a private ask first. Usepublishwhen the session should decide whether to post. Useforce-sendonly when the user explicitly wants a message posted.

对应三种递进的控制力度:

1.ask:私有询问(首选)

目标别名解析成功后,优先以私有方式向该会话提问,不直接向频道发消息:

python3 skills/openclaw-relay/scripts/openclaw_relay.py ask \ --target maintainers \ --message "Reply with exactly OK."

源码层面,cmd_ask()(源码)先调用resolve_target()解析目标,再经run_target_exec()用acpx exec向目标会话注入消息,并通过解析session/update帧汇总出assistantText(extract_prompt_result(),源码)。因此在对话结束后,脚本能返回 agent 的实际回复文本,而不仅仅是"已发送"的壳。

2.publish:交给会话判断是否发布

当会话应当自主决定内容是否适合对外发布时使用。cmd_publish()会构造一段提示词(build_publish_prompt(),源码),指令目标会话:只调用一次sessions_send;若文本符合目标会话上下文则原样播报,否则回复ANNOUNCE_SKIP,并最终以 JSON 返回{"delivery":"posted|skipped|unknown", ...}。多行内容推荐用--text-file读取,避免 shell 转义:

python3 skills/openclaw-relay/scripts/openclaw_relay.py publish \ --target maintainers \ --text-file /tmp/announcement.md \ --context "Weekly maintainer update"

--dry-run可预览将要构造的提示词而不真正发送。

3.force-send:用户明确要求发布时

只有当用户明确希望把消息发到通道时才使用。cmd_force_send()(源码)会先由derive_delivery_from_key()(源码)从会话键推导channel、to、threadId,再调用 OpenClaw 的message send命令,支持--text/--text-file与--media(媒体路径或 URL),以及--force-document、--gif-playback、--silent等通道级选项:

python3 skills/openclaw-relay/scripts/openclaw_relay.py force-send \ --target maintainers \ --text "Deploy is done."

远程传输时则加--transport ssh与--host:

python3 skills/openclaw-relay/scripts/openclaw_relay.py force-send \ --transport ssh \ --host steipete@steipete-macstudio.local \ --target maintainers \ --text "Demo video." \ --media /tmp/demo.mp4

若无法从会话键推导投递目标(即channel或to为空),脚本会报错并要求通过--channel/--to显式覆盖。

会话别名配置:session_aliases.json

discord-clawd的--target maintainers之所以能工作,靠的是目标别名文件。默认路径为skills/openclaw-relay/config/session_aliases.json,仓库中的实际示例为:

{ "main": "agent:main:main", "maintainers": "agent:main:discord:channel:1456744319972282449" }

从源码看,session_aliases.json的键值都是字符串,load_aliases()(源码)会对其strip()后使用。会话键遵循agent:<agentId>:<channel>:<kind>:<peer>形态——上例中maintainers就指向 Discord 频道1456744319972282449。若别名缺失,resolve_target()(源码)还会按规则匹配实时会话:完全匹配 key/label、或以:名称结尾的键,并在匹配到多个时以ambiguous target报错,避免误投。

官方文档(openclaw-relay/SKILL.md)提醒:仓库内置的别名文件是占位示例,实际部署时替换为真实值即可。

Guardrails:四条不可逾越的边界

原文档末尾列出的 guardrails 是使用时必须遵守的安全与职责约束:

  1. 发送真实内容前先解析目标——先resolve --target,确认别名或会话键有效,再发送实际消息,防止投递到错误会话;
  2. 报告使用的 target 与 delivery mode——每次中继后都要说明实际投递目标和所用模式(ask/publish/force-send),这也是 openclaw-relay/SKILL.md 中"Output Relay"的要求:返回 agent 的真实回复或投递结果,而不是 shell 噪音;
  3. 不要用于本地 Discord 归档查询——归档/历史/搜索交给$discrawl,实时对话中继与归档检索是两套技能;
  4. 不要暴露 gateway token 与会话密钥——gateway token 文件(默认~/.openclaw/gateway.token)与会话键属于敏感信息,任何输出中不得泄露。

故障处理与降级路径

虽然discord-clawd原文档未展开故障处理,但其底层脚本提供了完整的兜底流程(openclaw-relay/SKILL.md 的 Failure Handling):

  1. 先运行doctor做健康检查——验证 acpx 仓库目录、cwd/.acpxrc.json、gateway token 是否齐全(cmd_doctor(),源码);
  2. 再运行status与show查看控制会话状态;
  3. 若控制会话卡死,依次cancel→ensure→ 重试;
  4. 若路由不确定,先 resolve,优先用别名或精确会话键,并在发送真实内容前用一条极小的探针消息(如Reply with exactly OK.)验证链路。

这套"先探测、后投递"的流程与discord-clawd的 guardrails 相互印证,确保通过 Discord 后端路由的每一次对话都安全、可控、可追踪。


相关资源

  • 技能定义:skills/discord-clawd/SKILL.md
  • 接口配置:skills/discord-clawd/agents/openai.yaml
  • 中继脚本实现:skills/openclaw-relay/scripts/openclaw_relay.py
  • 中继技能文档:skills/openclaw-relay/SKILL.md
  • 会话别名示例:skills/openclaw-relay/config/session_aliases.json

【免费下载链接】agent-scripts

Scripts for agents, shared between my repositories.

项目地址:https://gitcode.com/gh_mirrors/ag/agent-scripts
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询