Files
JWeBot/docs/local-plugins-0.6.1.md
T

6.5 KiB
Raw Blame History

alpha 0.6.1.1015 本地插件与消息抓取

本版本增加三个插件。全部由本机命令引擎执行,不调用 DeepSeek 或 OpenClaw;中文、英文命令对应同一实现,英文不区分大小写,OCR 丢失 命令与参数间的空格时仍可解析。正常使用时仍需 @ 当前配置的机器人。

插件 中文指令 英文指令
context-summary `/上下文 [100 200
single-player-games /金币 /wallet
single-player-games /抽奖 [金额] /draw [金额]
single-player-games /买彩票 [000~999] [金额] /lottery [000~999] [金额]
single-player-games /21点 开始 [金额](空格可省略) /blackjack start [金额](空格可省略)
single-player-games /21点 要牌/停牌/状态/结束 /blackjack hit/stand/status/end
single-player-games /游戏帮助 /games
person-directory /人物列表 [页码]、/别名列表 [页码] /people [页码]
person-directory /人物 [名称或别名]、/个人属性 [名称或别名] /person [名称或别名]

命令所有权来自 descriptors.py,由同步工具生成三套受审核 SDK adapter。 每个 adapter 只提交命名 service-profile 请求,由 Kernel 执行数据库操作。 注册在启动期完成,运行期冻结。/余额 保持查询提供商余额; 游戏虚拟余额使用 /金币。

上下文总结

默认选择最近 100 条,也可选择 200 或 300。查询限定当前群,排除当前 请求事件,按观察时间和事件 ID 选出最近记录,再恢复时间顺序。 不足指定数量时明确报告实际数量;没有记录时返回空历史提示。

总结采用本地抽取式方法:统计参与人数、时间范围、重复话题,选出五条 具有代表性的内容并按时间排列。它保留原话,不生成未经原文支持的决定 或待办。覆盖范围是本机已经成功记录的文字消息,不包含图片、语音、 未加载的微信历史或本机没观察到的消息。所有历史只保存在本机私有状态。 独立的 context_history 保留短消息,避免复读排行的长度过滤影响最近 100/200/300 条计数;启动时从现有复读历史补入旧记录,查询时从 OCR 历史导入已识别发送人的文字。

人物与账户索引

当前 OCR 输入只有显示名,没有微信原生账号 ID。Kernel 将昵称或别名 解析到私有配置中的 canonical_name,再以“当前群+规范人物名”计算 person_key。相同人物的已配置别名共用金币和牌局,其他群使用独立账户。 没有配置的显示名使用独立临时身份;未识别到发送人的消息不能操作账户。

/人物 默认查看本人;指定参数时只查询已配置人物。输出包括展示名、 截短的群内索引、别名和经过安全过滤的基本属性,不返回 SteamID 或密钥。 /人物列表 每页五人。真实人物资料仍只存放于 ~/.config/jwebot/, 仓库没有生产人物或映射文件。

昵称识别不是账号身份认证。修改 canonical_name 会改变当前人物作用域; 应优先追加别名而不是重命名。用户不能通过游戏命令指定他人的账户, 不能充值、转账、赠币或兑换真实资产。

单人游戏管理

每个群内人物首次使用账户时一次性获得 1000 虚拟金币。再次查询、 重启服务或切换已配置别名都不会重复领取。下注为 2~100 的整数, 余额不足或参数非法不扣款。

抽奖默认下注 10:5% 概率返还五倍下注,20% 返还两倍,其余无返还。 彩票默认随机三位号码、下注 10;可指定 000~999,命中返还五百倍。 所有返还都包含本金,回复同时报告下注、返还、净变化和余额。

21 点默认下注 50。/21点 开始 100 表示拿 100 金币作为本局下注进场, 等价的 OCR 紧凑形式是 /21点开始100。开局会扣除下注并发两张牌, 然后根据牌面单独发送 /21点 要牌 或 /21点 停牌;开局与操作写在 同一条消息时不会扣款,而会返回分步提示。牌局使用洗牌后的单副 52 张牌, 牌堆、双方手牌、下注和最后操作时间持久化。A 可作为 1 或 11; 庄家软 17 停牌。开始后只公开一张庄家牌;要牌、停牌、认输和查询都 仅针对本人牌局。发牌、状态和结算回复以当前群内人物的配置展示名开头, 例如 jacky:你的牌 ...;别名解析到同一人物时沿用相同展示名和账户。 自然 21 点立即结算,返还 2.5 倍下注向下取整;普通胜利返还两倍, 平局返还下注,失败不返还。每人最多一局;牌局进行中不接受另一笔 抽奖、彩票或开局。

十分钟无有效游戏操作的牌局在下一次账户操作时按认输结束;查询状态 不延长有效期。主动结束同样按认输处理,不退下注。其他人可以各自 独立玩,不能加入或结束你的牌局。旧的群游戏保持独立。

Kernel 用一个 BEGIN IMMEDIATE 事务同时保存:

  1. player_accounts 中的金币、牌局和胜负统计;
  2. player_actions 中的事件、命令及响应。

同一群中的同一 event_id 只结算一次,重试返回原响应。相同事件若变更 人物或命令则拒绝。事务失败全部回滚,避免扣款后丢失结果。新的独立 指令会创建新的游戏操作,即使文字相同也不会被当成重试。 数据库迁移仅新增表,旧版本可以忽略它们;运行文件回滚不会主动删除 游戏数据。使用协调部署器回滚整库时,以部署前已验证备份为恢复基线。

单条消息抓取修复

独立观察证据表明,新气泡完成绘制后有时没有对应的有效 XDamage 事件;先前截图仍是旧布局,后续消息的绘制才唤醒生产抓取。

保留 XDamage 快速路径,同时将无有效变化时的复核等待窗口缩短到两秒。 空闲超时后走相同截图、跟随最新消息、视觉哈希和缓冲去重流程。 画面没变化时不进入重复 OCR;最终绘制漏事件时也能补抓。等待 X socket 前先检查 Xlib 已缓冲事件,避免用户态已有事件却阻塞等待另一次通知。

新增 source=reconcile 遥测用于识别补抓路径。两秒是等待窗口, 不是端到端响应承诺;截图、OCR、生成和 GUI 投递仍有各自耗时。 短周期复核增加空闲截图开销,上线后需观测实际负载。 群指纹、窗口就绪、GUI 串行、视觉确认和投递去重规则保持有效。