132 lines
8.5 KiB
Markdown
132 lines
8.5 KiB
Markdown
# alpha 0.6.1.1015 本地插件与消息抓取
|
||
|
||
本版本增加三个插件。全部由本机命令引擎执行,不调用 DeepSeek 或
|
||
OpenClaw;中文、英文命令对应同一实现,英文不区分大小写,OCR 丢失
|
||
命令与参数间的空格时仍可解析。正常使用时仍需 @ 当前配置的机器人。
|
||
|
||
| 插件 | 中文指令 | 英文指令 |
|
||
|---|---|---|
|
||
| context-summary | `/上下文 [100|200|300]` | `/context [100|200|300]` |
|
||
| single-player-games | `/金币` | `/wallet` |
|
||
| coin-ranking | `/大富翁榜`、`/金币排行` | `/richlist` |
|
||
| coin-transfer | `/转账 对方 金额` | `/transfer name amount` |
|
||
| coin-loan | `/贷款 [金额]`、`/还款 [金额\|全部]` | `/loan amount`、`/repay [amount\|all]` |
|
||
| single-player-games | `/抽奖 [金额]` | `/draw [金额]` |
|
||
| single-player-games | `/彩票 开始/报名/当前状态/开奖/取消` | `/lottery start/join/status/draw/cancel` |
|
||
| single-player-games | `/21点 开始 [金额]`(空格可省略) | `/blackjack start [金额]`(空格可省略) |
|
||
| single-player-games | `/21点 要牌/停牌/状态/结束` | `/blackjack hit/stand/status/end` |
|
||
| single-player-games | `/游戏记录 [页码]` | `/gamehistory [page]` |
|
||
| 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,彩票和
|
||
21 点下注为 1~500;余额不足或参数非法不扣款。
|
||
|
||
`/转账 对方 金额` 会把本人的虚拟金币转给同群已初始化账户,英文为
|
||
`/transfer name amount`。金额范围 1~100000;不允许给自己转账。
|
||
转账、响应记录和重试去重写在同一个 ledger 事务内,同一 event_id
|
||
不会重复扣款。
|
||
|
||
`/贷款 [金额]` 会给本人账户借入 1~500 金币;同一账户同一时间最多
|
||
一笔未还贷款。`/还款 [金额|全部]` 从当前金币余额中扣除并减少未还
|
||
贷款,借款、还款、响应记录和重试去重同样写在一个 ledger 事务内。
|
||
|
||
`/大富翁榜` 或 `/金币排行 [人数]` 只读取当前群已有金币账户,不会创建
|
||
调用者账户。榜单按当前金币余额降序排列,人数范围 1~20;账户存在
|
||
未还贷款时会在名字后标注贷款本金。
|
||
|
||
抽奖默认下注 10:5% 概率返还五倍下注,20% 返还两倍,其余无返还。
|
||
alpha 0.6.3 将旧的个人即时彩票替换为群内多人轮次。三位数字顺序无关,
|
||
下注范围 1~500,命中 1/2/3 个分别返还 50%/120%/300%。完整流程见
|
||
[多人彩票与游戏记录](group-lottery-0.6.3.md)。
|
||
|
||
21 点默认下注 50、范围 1~500。`/21点 开始 100` 表示拿 100 金币作为本局下注进场,
|
||
等价的 OCR 紧凑形式是 `/21点开始100`。开局会扣除下注并发两张牌,
|
||
然后根据牌面单独发送 `/21点 要牌` 或 `/21点 停牌`;开局与操作写在
|
||
同一条消息时不会扣款,而会返回分步提示。牌局使用洗牌后的单副 52 张牌,
|
||
牌堆、双方手牌、下注和最后操作时间持久化。A 可作为 1 或 11;
|
||
庄家软 17 停牌。开始后只公开一张庄家牌;要牌、停牌、认输和查询都
|
||
仅针对本人牌局。发牌、状态和结算回复以当前群内人物的配置展示名开头,
|
||
例如 `jacky #1:你的牌 ...`;别名解析到同一人物时沿用相同展示名、
|
||
账户、局号和游戏记录。
|
||
|
||
多人 21 点使用 `/21点 多人 启动` 创建 Taffy 牌桌,开桌者自动入座。
|
||
其他玩家在下注前用 `/21点 加入` 进入当前牌桌;主持人发送 `/21点 多人 开始`
|
||
后,Taffy 会按座位顺序提示每个人 `/21点 放200` 放筹码,范围 1~10000。
|
||
所有玩家下注后统一发牌,轮到本人时用 `/21点 要牌` 或 `/21点 停牌` 操作;
|
||
结算按座位顺序列出每个人的下注、返还、净变化和当前金币。
|
||
自然 21 点立即结算,返还 2.5 倍下注向下取整;普通胜利返还两倍,
|
||
平局返还下注,失败不返还。每人最多一局;牌局进行中不接受另一笔
|
||
抽奖或 21 点开局,多人彩票报名仍可独立进行。
|
||
|
||
十分钟无有效游戏操作的牌局在下一次账户操作时按认输结束;查询状态
|
||
不延长有效期。主动结束同样按认输处理,不退下注。其他人可以各自
|
||
独立玩,不能加入或结束你的牌局。旧的群游戏保持独立。
|
||
|
||
Kernel 用一个 `BEGIN IMMEDIATE` 事务同时保存:
|
||
|
||
1. `player_accounts` 中的金币、牌局和胜负统计;
|
||
2. `player_actions` 中的事件、命令及响应。
|
||
|
||
同一群中的同一 event_id 只结算一次,重试返回原响应。相同事件若变更
|
||
人物或命令则拒绝。事务失败全部回滚,避免扣款后丢失结果。新的独立
|
||
指令会创建新的游戏操作,即使文字相同也不会被当成重试。
|
||
数据库迁移仅新增表,旧版本可以忽略它们;运行文件回滚不会主动删除
|
||
游戏数据。使用协调部署器回滚整库时,以部署前已验证备份为恢复基线。
|
||
|
||
## 单条消息抓取修复
|
||
|
||
独立观察证据表明,新气泡完成绘制后有时没有对应的有效 XDamage
|
||
事件;先前截图仍是旧布局,后续消息的绘制才唤醒生产抓取。
|
||
|
||
保留 XDamage 快速路径,同时将无有效变化时的复核等待窗口缩短到两秒。
|
||
空闲超时后走相同截图、跟随最新消息、视觉哈希和缓冲去重流程。
|
||
画面没变化时不进入重复 OCR;最终绘制漏事件时也能补抓。等待 X socket
|
||
前先检查 Xlib 已缓冲事件,避免用户态已有事件却阻塞等待另一次通知。
|
||
|
||
新增 `source=reconcile` 遥测用于识别补抓路径。两秒是等待窗口,
|
||
不是端到端响应承诺;截图、OCR、生成和 GUI 投递仍有各自耗时。
|
||
短周期复核增加空闲截图开销,上线后需观测实际负载。
|
||
群指纹、窗口就绪、GUI 串行、视觉确认和投递去重规则保持有效。
|