返回顶部
c

claw-lark-patches爪云补丁重打

Re-apply custom patches to claw-lark plugin dist files after updates. Use when claw-lark plugin is updated/reinstalled and custom behaviors (requireMention filtering, reply_in_thread, thread-based replies) stop working. Also use when debugging Lark message routing issues.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
503
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

claw-lark-patches

claw-lark 补丁

claw-lark 是一个编译型插件——我们直接修补分发文件。每次插件更新都会清除这些补丁。 本技能详细记录了需要修改的内容,并提供了自动应用脚本。

快速应用

bash
bash scripts/apply-patches.sh

然后重启网关:openclaw gateway restart

补丁概览

四个文件需要修补:

  1. 1. channel.js — messaging.targetResolver(目标ID识别)+ 出站账户解析
  2. monitor.js — requireMention 过滤 + 回复到线程(用于 deliver 回调)
  3. provider.js — 回复到线程(用于 sendTextMessage)
  4. send.js — 回复到线程(用于 SDK 回复调用)

补丁详情

0. channel.js — 目标解析 + 账户解析(2026-02-22)

问题1:message(send, lark, ocxxx) 返回未知目标,因为 claw-lark 没有 messaging.targetResolver.looksLikeId。核心无法识别 oc/ou/on 为有效ID,转而执行目录查找并失败。

修复:为 larkPlugin 导出添加 messaging 属性:

  • - 从 ./utils.js 导入 looksLikeLarkId, normalizeLarkTarget
  • 使用现有的 looksLikeLarkId() 添加 messaging.targetResolver.looksLikeId
  • 使用现有的 normalizeLarkTarget() 添加 messaging.normalizeTarget

问题2:outbound.sendText 从核心接收 { cfg, to, accountId },但期望 { account, recipientId }。account 对象未定义 → 无法读取未定义属性(读取appId)。

修复:所有5个出站方法(sendText、sendMedia、downloadMedia、addReaction、removeReaction)添加:
javascript
const account = args.account ?? resolveAccount(args.cfg, args.accountId ?? default);
const recipientId = args.recipientId ?? args.to;

1. monitor.js — requireMention 过滤

位置:routeMessage() 函数中,在 parseMessage(event) 和日志行之后。

功能:在群聊中,跳过未@提及我们机器人的消息。

关键事实

  • - event.message 是正确的路径(不是 event.event.message)
  • Lark webhook message.mentions 包含提及数据,带有 id.openid
  • 机器人 openid:运行 apply-patches.sh 时通过 BOTOPENID 环境变量设置
  • 所有机器人缺少 userid(空字符串)——无法使用 !userid 检测是否是我
  • @userN 文本占位符出现在所有被@的机器人中,不仅限于我们的——不要使用正则匹配
  • 回退方案:如果提及数组为空,检查 parsed.text.includes(@ + BOTNAME)(通过 BOTNAME 环境变量设置)

2. monitor.js — 回复到线程(deliver 回调)

位置:在 dispatchReplyWithBufferedBlockDispatcher 的 deliver 回调内部。

功能

  • - 设置 replyToId = payload.replyToId || parsed.threadId || parsed.messageId(始终有值)
  • 使用 client.im.message.reply() 并设置 replyinthread: true,替代使用 root_id 的 client.im.message.create()

关键事实

  • - create 上的 rootid 仅关联现有线程,不会创建新线程
  • reply API 上的 replyin_thread: true 会创建新线程
  • 在私聊和群聊中均有效

3. provider.js — sendTextMessage 线程回复

位置:sendTextMessage() 函数。

功能:当提供 threadId 时,使用 client.im.message.reply() 替代 client.im.message.create()。

4. send.js — SDK 回复中的 replyinthread

位置:sendMessageLark() 和 sendCardLark() 的回复分支。

功能:在 client.im.message.reply() 调用的数据对象中添加 replyinthread: true。

验证

应用补丁并重启网关后:

  1. 1. 发送一条未@机器人的群消息 → 应被静默忽略
  2. 发送一条@机器人的群消息 → 应在线程中回复
  3. 发送一条私聊消息 → 应在线程中回复
  4. @其他机器人 → 应被静默忽略

参见

  • - references/patch-details.md — 每个补丁的完整代码差异

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 claw-lark-patches-1776419968 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 claw-lark-patches-1776419968 技能

通过命令行安装

skillhub install claw-lark-patches-1776419968

下载

⬇ 下载 claw-lark-patches v1.0.0(免费)

文件大小: 6.47 KB | 发布时间: 2026-4-17 18:44

v1.0.0 最新 2026-4-17 18:44
Patches for claw-lark plugin dist files: target resolution, account resolution, requireMention, reply-in-thread.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部