Commit Graph
100 Commits
Author SHA1 Message Date
youpaishidifu 0405e42a90 修复OCR回复牛头不对马嘴+残留消息+EasyOCR崩溃捕获+360误报
1. knowledge_base.py: 检索排序惩罚标题-only/短正文段,降低heading bonus,奖励正文命中,避免纯标题/免责声明段排第一
2. auto_reply.py: 动作类查询要求正文命中才放行;拒绝纯标题/免责声明答案
3. monitor.py: 调试截图改存%LOCALAPPDATA%/windowmsgbot/ocr_debug避开源码目录(360); 收紧残留消息fresh gate(600s硬门); 启动即崩溃/请求崩溃时读取easyocr_crash.log写入主日志
4. easyocr_worker.py: 加faulthandler+sys.excepthook全局捕获,崩溃traceback落盘%LOCALAPPDATA%/windowmsgbot/easyocr_crash.log
2026-08-01 21:21:05 +08:00
youpaishidifu 9ff019df00 fix: EasyOCR inner timeout mismatch + fresh timestamp gate放宽
1. EasyOCR inner timeout 30s→_OCR_TIMEOUT-1(9s)
   外层join 10s,inner必须<外层,否则线程永远alive跳过
2. _ocr_text_has_fresh_timestamp: 时间戳全过期但含新鲜内容特征时放行
   旧时间戳后紧跟新消息(无独立时间戳)不再被整批丢弃
2026-08-01 18:09:26 +08:00
youpaishidifu 8cf28d11bc EasyOCR容错: 连续3次超时才杀进程, 前2次保留子进程预留初始化时间, 单次OCR超时保持10s 2026-08-01 17:15:57 +08:00
youpaishidifu ae145c0d2d EasyOCR修复: 1)总超时10s→60s(首次加载~28s) 2)时间戳正则兼容EasyOCR的16.47/15;39/16:03.41格式 → 标准化为HH:MM:SS 2026-08-01 17:07:30 +08:00
youpaishidifu 749d14ab91 修复: 1)OCR时间戳跨行继承(消息无时间戳时继承前行时间戳) 2)QQ UI黑名单添加窗口抖动 2026-08-01 16:16:17 +08:00
youpaishidifu 16fdfb0620 EasyOCR修复: 1)worker加顶层异常捕获确保stderr可见 2)竞态保护:stdin写入前检查proc非None 3)增加处理日志 4)超时改30s 2026-08-01 15:58:58 +08:00
youpaishidifu 8ccad84986 OCR历史消息过滤: 若文本有可见时间戳但全部过期(>300s)直接丢弃, 防止混入旧消息误触发回复 2026-08-01 14:58:41 +08:00
youpaishidifu 733f12c45b 偏旁过滤改md库驱动: bot只查Unicode列码点, md缺失才回退硬编码范围, 维护只改md不改代码 2026-08-01 13:22:24 +08:00
youpaishidifu ba0e6e2450 修复3个OCR问题: easyocr子进程ready握手+60s初始化预算, 偏旁过滤改Unicode范围判断, 新旧消息按新鲜特征放行
- easyocr_worker.py: 初始化完成后输出{"ready":true}握手, 父进程不再把3-10s初始化计入10s请求超时
- monitor.py: _ensure_easyocr_subprocess重写 - 60s握手预算(daemon线程+Queue), stderr PIPE捕获崩溃原因, 崩溃/超时改30s冷却自动重试(不再永久broken)
- monitor.py: 删除markdown表格字符key偏旁库, 改U+2E80-U+2FDF码位范围判断, 修复"地图"/"太"等正常汉字被误判为偏旁丢弃
- monitor.py: _looks_fresh_content新鲜特征判断 - 旧时间戳但含疑问词/问句/句尾标点的消息放行, 不再整块丢弃
- 新增test_easyocr_handshake.py: 子进程握手+OCR往返回归测试(实测通过: 28s含初始化, 识别'你好世界测试123')
2026-08-01 13:00:57 +08:00
youpaishidifu d2389ec3e1 fix: 微信裁切参数调整 + 气泡上下文验证 + EasyOCR重启修复
- 微信裁切参数:cap_left从0.34减至0.30,cap_right改为跳过滚动条+右边框(2%宽度)
- 微信气泡上下文验证:OCR后处理增加气泡消息上下文检查
  - 消息必须包含时间戳、冒号分隔符或标点结尾
  - 短中文消息(≤8字)和含问词/感叹词的消息放行
  - 过滤Windows弹窗/通知/非聊天内容
- EasyOCR重启修复:stop()和start()中重置_easyocr_broken标志
  - 确保停止/急停后双引擎仍能搭档作业
2026-07-31 22:29:14 +08:00
youpaishidifu f9c4b161f3 fix: 偏旁替换改为偏旁丢弃 + 英文配置乱码过滤
- 偏旁过滤逻辑:从'替换为补充字符'改为'包含偏旁字符就丢弃'
  修复'法'被OCR拆成'氵去'后替换为'河去'的问题
- 新增英文配置格式+乱码过滤:拦截 key=value 后跟乱码的模式
  如 'invite referral bonus=5a激<5'
- OCR级和Poll级同步更新偏旁过滤和乱码过滤规则
2026-07-31 21:20:07 +08:00
youpaishidifu fe83f1035a feat: 补全所有偏旁的补充字符(200个偏旁,0空值)
1. 为200个CJK偏旁全部填写补充字符(正确汉字)
2. 修正U+2E8E:氵→冫(两点水,之前误标为三点水)
3. 删除重复条目:广(U+2EA4)与尸(U+2EA4)重复,删除广
4. 修正文件头描述:从"≥3丢弃"改为"替换/丢弃"

维护方式:编辑unicode_radicals.md的补充字符列,重启bot生效
2026-07-31 19:47:48 +08:00
youpaishidifu 18742065a7 feat: 偏旁库逻辑重构 — 替换偏旁为正确汉字\n\n1. 修改unicode_radicals.md格式,新增补充字符列\n2. 新增_load_radicals()加载偏旁→补充字符映射(字典)\n3. 新增_replace_radicals()函数:遍历偏旁,有补充字符则替换,无补充字符则整段丢弃\n4. OCR级和Poll级偏旁过滤逻辑同步更新\n5. 降级逻辑:默认范围U+2E80-U+2FDF,补充字符为空\n\n维护方式:编辑unicode_radicals.md填写补充字符,重启bot生效 2026-07-31 18:30:33 +08:00
youpaishidifu 9163f12fcb fix: OCR吞字纠错 + 拉黑'拍了拍'系统通知
1. OCR吞字纠错:在_normalize_ocr_text中添加词级纠错字典,
   修复Windows OCR常见汉字误识别(手髓→手续、β余→多余、
   早原→草原、届件→插件、文|牛→文件、日何→如何)
2. 拉黑'拍了拍':加入_UI_SUBSTR_BLOCKLIST,过滤微信/QQ
   '拍了拍'系统通知(UI按钮触发,非用户消息)
2026-07-31 17:40:44 +08:00
youpaishidifu 9d30943a84 fix: QQ截图cap_left从20%减至15%,修复时间戳被截断(15:54→0:54)\n\n根因:cap_left=20%仍截掉了消息面板左侧的时间戳数字,\n导致OCR识别到的时间戳丢失前导数字(15→0),被补0后\n判定为旧消息跳过。减至15%确保时间戳完整。 2026-07-31 17:13:03 +08:00
youpaishidifu 0f5be72af0 feat: 保存OCR处理后图片到根目录(JPG格式)用于肉眼对比
1. QQ和微信轮询方法中,图像预处理(resize+sharpen+contrast)后
   保存一份JPG格式的图片到windowmsgbot根目录
2. 文件名格式:ocr_processed_qq_时间戳.jpg / ocr_processed_wx_时间戳.jpg
3. 与原图(ocr_debug_*.png)对比,判断是OCR识别问题还是美化过度
4. 修改_clean_old_ocr_debug函数支持清理.jpg文件
2026-07-31 16:44:04 +08:00
youpaishidifu 7812f3cc63 fix: 放宽bot配置说明过滤规则 — 三重匹配防误过滤用户消息
原规则:只要包含配置短语或英文关键词就过滤,导致用户讨论配置的消息
如'invite referral bonus=5afi配置此处的文件'被误过滤。

修复:改为三重匹配——必须同时满足:
1. 包含配置短语(如'配置此处的文件')
2. 包含英文关键词(如invite/referral)
3. 包含配置格式(=或:后跟非空白字符)

只有三者都满足才判定为bot旧回复,避免误过滤用户消息。
2026-07-31 16:13:27 +08:00
youpaishidifu 7012eaa7ed fix: OCR时间戳截断修复 — 裁切左移 + 时间戳OCR误读兜底
1. QQ截图cap_left从25%减至20%,减少时间戳左侧数字被截断概率
2. _is_timestamp_old新增OCR误读兜底:h<12时尝试h+10/h+12取diff最小者
   若<max_age则放行(OCR把15→5时h+10=15=正确值)
2026-07-31 15:57:08 +08:00
youpaishidifu ce74fc762a fix: 用户操作不再打断bot唤醒截图 — 窗口可见即可截图,不要求前台
根因:_ensure_visible 强制要求窗口在前台(_check_foreground),
用户操作鼠标/键盘会瞬间抢走前台焦点 → 3次重试全部失败 →
"唤醒失败"跳过本轮。但 ImageGrab.grab 只需要窗口在屏幕上可见,
不要求前台,用户操作≠窗口被遮挡。

修复:
- _ensure_visible:前台校验失败后,若窗口仍然可见(!IsIconic && IsWindowVisible),
  仍返回True继续截图。仅窗口真的不可见时返回False
- QQ/微信轮询:窗口不可见时退避5秒(每0.1秒检查急停),
  给用户接管时间,同时不阻塞急停操作
2026-07-31 14:44:12 +08:00
youpaishidifu 3a4fecbc03 fix: 用 daemon 线程替代 ThreadPoolExecutor,防止 Windows OCR 卡死冻结电脑
根因:_ocr_dual_engine 用 ThreadPoolExecutor with 块,__exit__ 调
shutdown(wait=True),当 Windows OCR 引擎卡死时永久阻塞主线程 → 电脑冻结。

修复:改用 daemon 线程 + join(timeout=10s),超时后线程丢弃不阻塞。
daemon 线程随进程退出自动回收,不会泄漏。
2026-07-31 14:13:51 +08:00
youpaishidifu 435f729589 fix: 降低OCR预处理锐化/对比度,增强偏旁碎片检测 2026-07-31 12:45:48 +08:00
youpaishidifu b065f8d707 fix: 时间戳分割支持中文日期前缀(昨天、前天、星期X等) 2026-07-31 10:19:01 +08:00
youpaishidifu e91fc20523 fix: 修复偏旁库加载失败 — 改用更健壮的markdown表格解析 2026-07-31 09:57:32 +08:00
youpaishidifu bd5ec8cbd8 fix: md格式直接砍掉 — 删除用户文本提取,统一过滤逻辑
问题:OCR截屏截到bot旧回复(md格式文档内容),时间戳分割后
调用 _extract_user_text_from_md_fragment 尝试从混合文本中提取
'用户文本',导致md内容中的非md部分绕过过滤→触发查库→错误回复。

修复:
1. 时间戳分割逻辑(两处):md格式直接跳过,不再提取用户文本
2. 删除 _extract_user_text_from_md_fragment 方法(约100行)
3. 统一过滤逻辑:只要匹配 _is_markdown_document → 直接continue

原理:正常用户聊天不用 #标题、[链接](url)、-列表等md语法,
只要出现就是bot旧回复被OCR读回。不需要尝试提取'用户部分'。
2026-07-31 00:32:22 +08:00
youpaishidifu 567924a2e4 fix: 加强bot自身回复过滤 — 5层防护拦截OCR读回bot旧回复
问题:OCR截屏截到bot之前发的回复内容(如'奖励:邀请人可获得该新用户首充金额的30%'、
'invite referral bonus=5afii'、'配置此处的文件,负责展示...'),
这些内容逃过了颜色检测(左确有白色气泡)、时间戳检测、偏旁检测,
流入KB匹配→触发错误回复。

修复(OCR级+Poll级双层,共5类新过滤器):
1. 英文key=value配置格式:invite referral bonus=5afii
2. 配置文件描述片段:配置此处的文件、负责展示、对应一个商品等
3. 英文奖励关键词:invite/referral/reward/bonus
4. KB内容回读:奖励:、规则:、配置:等KB段落标记
5. 百分比+金额描述:30%+金额/奖励/积分等

原理:正常用户对话不含这些模式,只要出现就是bot旧回复被OCR读回
2026-07-31 00:17:00 +08:00
youpaishidifu 348e40a995 fix: 病句过滤增强(特殊符号开头) + 急停多阶段中断检查
1. 病句过滤增强:
   - 新增OCR级+Poll级特殊符号开头碎片过滤:^[~`~]
   - 拦截OCR把'一键'识别为'~键'导致的病句碎片(如'~键导出全服流水')

2. 急停多阶段中断检查(6处):
   - _poll函数入口:急停后下一轮立即折返
   - _ocr_read_qq截屏前:防止截屏+OCR继续执行
   - _ocr_read_wechat截屏前:同上
   - _process_ocr_output入口:防止文本处理继续
   - 回复发送前:防止急停后仍发送回复
   - 原有2处:OCR返回后 + 文本过滤后

3. 修复原理:原急停只在while循环开头检查_running,
   线程已深入_poll内部时无法中断同步阻塞的OCR操作。
   现在在每个耗时操作前检查,急停后立即丢弃当前结果。
2026-07-30 23:39:54 +08:00
youpaishidifu 664d02ac55 fix: 尾部内容也检查时间戳过期 — 修复OCR拼凑历史消息触发查库
问题:OCR读屏文本含多个时间戳(17:49:58, 8:33:06, 21:56:17),
中间碎片因last_ts过期被正确跳过,但尾部(最后时间戳之后的内容)
被无条件放行→历史消息内容绕过时间戳过滤→触发查库→自动回复。

根因:尾部逻辑注释说'可能来自新消息'无条件放行,
但21:56:17清晰可见且已过期(差47min=2820s≥300s),
尾部内容也是历史消息。

修复:尾部增加 last_ts 年龄检查,若最后可见时间戳已过期(≥300s),
尾部内容也跳过不处理。
2026-07-30 22:50:33 +08:00
youpaishidifu 5e86ef3c67 fix: 加强病句过滤 — 纯问句碎片、问句+乱码拼接、中段斜线命令
问题:OCR捕捉到残余病句'怎么办?/printer...'触发查库,
回复了一串配置文件值(printer相关配置参数)。

根因:
1. '怎么办?'单独出现时无实质内容,但含问词被放行
2. '/printer玩家名'是指令帮助碎片,在消息中段未被拦截
3. 两者拼接后绕过了现有过滤器

修复(OCR级+Poll级双层):
- 新增中段斜线命令碎片过滤:(?<=[\s??。!,,])/[A-Za-z]{2,}
  拦截'怎么办?/printer玩家名'这种混合碎片
- 新增纯问句碎片过滤:只含疑问词+标点的短句直接丢弃
- 新增问句+乱码拼接过滤:问词开头+斜线/英文乱码特征→丢弃
2026-07-30 22:36:15 +08:00
youpaishidifu 2a181ab34a fix: 偏旁过滤还原≥1丢弃 + OCR过滤bot自身pipe表格回复
1. 偏旁碎片过滤还原:≥3→≥1,只要包含CJK偏旁就丢弃
   - 原因:OCR拆字碎片如'亻牛''彡'只要出现就说明是碎片
2. OCR/Poll级新增bot自身回复过滤:
   - pipe表格格式(|参数1|参数2|参数3|结果|)是bot回复格式
   - OCR截屏截到旧的bot回复不该进入KB匹配
   - pipe≥3且长度>30 → 过滤丢弃
2026-07-30 20:01:47 +08:00
youpaishidifu 2a655e56ac feat: 偏旁Unicode库 + 偏旁数≥3才丢弃
根因:OCR把'件'拆成'亻牛',偏旁碎片触发查库。原逻辑只要包含CJK偏旁就过滤,
但正常用户消息也可能偶尔包含偏旁字符。

修复:
1. 新增 unicode_radicals.md 偏旁库文件(225个偏旁+Unicode码表)
2. bot启动时读取md文件构建偏旁字符集 _RADICAL_CHARS
3. 偏旁过滤改为计数:偏旁出现次数≥3才整段丢弃
4. 维护方式:编辑 md 文件添加/删除偏旁,重启 bot 生效

覆盖场景:
- '亻牛'('件'被拆碎)
- '彳亍'('行'被拆碎)
- OCR把多个汉字拆成偏旁碎片(≥3个偏旁)
2026-07-30 18:55:55 +08:00
youpaishidifu 2b03ca1a7d fix: 简化偏旁碎片过滤逻辑,只要包含CJK偏旁就过滤
- 原逻辑:偏旁数>=CJK完整字数才过滤,但长文本中CJK字数多,偏旁数少,条件不成立
- 新逻辑:只要包含CJK偏旁(U+2E80-U+2FDF)就直接过滤
- 原理:正常用户消息几乎不含这些偏旁字符,只要出现就是OCR把汉字拆碎了
- 覆盖'亻牛'、'彳亍'等OCR拆字碎片
2026-07-30 18:06:48 +08:00
youpaishidifu 41f55fe9ed fix: 清理HTML标签 + 降低绿色像素阈值 + 增强乱码过滤
1. HTML标签清理:
   - 在_normalize_ocr_text中清理<br>、<div>等HTML标签
   - OCR截到网页/终端时常带HTML标签,影响文本处理

2. 绿色像素检测阈值降低:
   - 从>=5改为>=3,更敏感地检测微信窗口
   - 防止QQ轮询截到微信内容被误处理

3. 乱码过滤增强:
   - CJK+拉丁混合乱码检测(如'默i'、'鼍')
   - 生僻字/罕见字检测(CJK扩展区)
   - 系统配置内容过滤(概览、数据看板、在线玩家等)

4. 解决'牛头不对马嘴'问题:
   - OCR截到Wiki/终端内容被当用户消息处理
   - 知识库匹配到错误的section(Wiki标题而非具体内容)
2026-07-30 17:44:49 +08:00
youpaishidifu 405191bab3 fix: 增强偏旁碎片过滤 + 系统配置内容过滤
1. 偏旁碎片过滤增强:
   - 去掉长度限制(原≤20字),只要包含CJK偏旁(U+2E80-U+2FDF)且偏旁数>=CJK完整字数就过滤
   - 覆盖OCR把'件'拆成'亻牛'等更长碎片的情况

2. 系统配置内容过滤(新增):
   - 检测包含@example、smtp、.py/.bat/.sh等特征的行,判定为系统配置内容
   - 检测邮件地址格式(user@domain.tld),判定为SMTP配置片段
   - 防止OCR截屏截到代码编辑器/终端内容被当用户消息处理

3. 同步更新OCR级和Poll级过滤逻辑
2026-07-30 17:17:30 +08:00
youpaishidifu e42f56dc8f fix: 加强病句过滤 + QQ跨窗口污染检测
1. 病句过滤增强:
   - 病句6:包含时间戳格式(16:29, 2026/7/29)的句子跳过
   - 病句7:以数字开头且包含问号的句子跳过(如'1屏蔽?不想要的后缀。')
   - 病句8:包含引号包裹时间戳的句子跳过(如'"2026/7/29"')

2. QQ跨窗口污染检测:
   - 检测微信绿色像素(R:135-180, G:205-250, B:75-125)
   - 若QQ轮询截图中检测到大量绿色像素,判定为微信窗口,跳过本轮
   - 防止QQ轮询截到微信内容被误处理

3. 像素检测优化:
   - QQ轮询增加绿色像素检测,避免截到微信窗口
   - 微信轮询已有类似逻辑(绿色=自身消息)
2026-07-30 17:02:46 +08:00
youpaishidifu 52fd2cbd03 fix: 加强病句过滤 + QQ颜色检测逻辑简化
1. 病句过滤增强:
   - 病句3扩展匹配范围:'^[其将把被]' → '^[其将把被认查问帮试想]'
   - 覆盖OCR常丢失前缀的情况:'默认管理员密码多少' → '认管理员密码多少'
   - 句子以动词开头、缺主语、无标点 → 判定为病句跳过

2. QQ颜色检测简化:
   - 核心原则:只要左半区无白色气泡 → 无用户消息 → 跳过
   - 删除冗余条件分支(仅bot回复、气泡柱检测等)
   - 避免'拿不准保守处理返回True'导致bot自身消息被处理
2026-07-30 16:48:45 +08:00
youpaishidifu dadbcebe7f fix: EasyOCR GPU OOM 冻结 — 每3次主动重启子进程 + 用原图降显存压力
根因:EasyOCR reader.readtext() 每次调用后 PyTorch CUDA 内存缓存不释放,
几轮后 VRAM 满 → Allocation Fail(27MB) → 显存错误 → 系统冻结。

修复:
- _easyocr_call_count 计数,达到 3 后 kill 子进程(下次自动重启)
- EasyOCR 用 im_original(1x)代替 im_processed(2x),降单次显存 4x
- _ensure_easyocr_subprocess 遇空 _easyocr_proc 自动重启
2026-07-30 14:49:43 +08:00
youpaishidifu b382520093 fix: QQ OCR 截图前检查 _ensure_visible 返回值,失败跳过避免截到微信内容
- _ocr_read_qq 中 _ensure_visible(hwnd) 返回值被丢弃,
  唤醒失败时 ImageGrab.grab 拿到微信窗口内容被当QQ消息处理
- 微信路径已正确检查返回值,QQ路径补齐
2026-07-30 14:22:01 +08:00
youpaishidifu b55fff8cbb 修复2个bug: 急停后OCR残留 + 知识库奖励配置匹配错误
Bug1 - 急停(ESC×2)后Windows OCR仍在运行输出日志:
  _emergency_stop设_running=False+杀EasyOCR子进程,但Windows OCR
  (RecognizeAsync)是同步阻塞调用,无法被中断。OCR完成后_poll继续
  处理文本→触发回复。
  修复:_poll中在_read_messages返回后+文本过滤后各增加self._running
  检查,OCR完成或文本处理中如已急停则立即return,不再触发回复。

Bug2 - 用户问寻宝奖励配置,bot返回指令参数表格(匹配度15.38):
  知识库sdf1_game.md中'## 寻宝玩法介绍'命令表含'寻宝'高频词,
  TF-IDF得分远高于'## 奖励配置:'段。heading bonus仅2.0/词,
  不足以翻转15分的TF-IDF差距。
  修复:heading bonus从2.0/词提升至5.0/词;新增heading连续短语
  匹配bonus(+8.0),如查询含'奖励配置'且heading含'奖励配置'则
  大幅boost,确保语义匹配的section排到最前。
2026-07-30 13:49:58 +08:00
youpaishidifu e9bccb688b 修复2个bug: 同poll取最新消息(末条) + 斜线I变形(Iskin)过滤
Bug1 - 用户问寻宝奖励,bot回复sdf1导入错误:
  OCR从上到下读屏,旧消息排前面新消息排后面。
  原逻辑'只处理第一条'把旧历史消息当新消息处理,
  真正的用户新消息被'同poll第条跳过'挡掉。
  修复:改为取new_items[-1](最后一条=屏幕最下方=最新消息),
  其余加入seen防重复。

Bug2 - /skin OCR变形为Iskin在消息中后段未被过滤:
  /skin→OCR→Iskin(I替代/)。原过滤器要求^[A-Za-z]开头
  且len>10,但'使用指令Iskin'=9字符→漏网。
  修复:新增CJK+I+小写字母变形过滤器[\u4e00-\u9fff]I[a-z]{2,},
  拦截所有CJK上下文中的斜线I变形命令。
2026-07-30 13:04:30 +08:00
youpaishidifu 18d7880a49 添加偏旁碎片过滤器:拦截OCR输出的氵亻讠扌等CJK偏旁部首\n\n根因:OCR识别不完整时会输出CJK偏旁(如氵亻讠扌艹钅等),\n这些不是完整汉字,不应触发查库回复。\n\n修复:\n- OCR级+Poll级双层过滤\n- 检测U+2E80-U+2FDF(CJK Radicals Supplement + Kangxi Radicals)\n- 短文本(≤20字)中偏旁数>=完整CJK数时判定为碎片丢弃 2026-07-30 12:32:23 +08:00
youpaishidifu 43bd80d3b6 修复2个bug: stop()未杀EasyOCR子进程残留 + _/sdfl历史消息误判为新消息
Bug1 - 消息监控停止后EasyOCR子进程残留吃GPU导致冻电脑:
  stop()只清线程不杀子进程→GPU推理持续运行→系统冻结。
  修复:stop()末尾增加杀死_easyocr_proc + wait(timeout=3)

Bug2 - 用户问寻宝插件奖励配置,bot回复sdf1插件导入错误:
  微信OCR截到'_ /sdfl undo撤销导入昨天'(历史消息残影),
  sdfl过滤器要求^[A-Za-z]字母开头,但该文本以下划线_开头→漏网→
  被判为新消息优先处理,真正的用户消息'寻宝玩法中支持哪些奖励配置?'
  被同poll第条跳过。
  修复:
  - sdfl过滤器去掉^锚点限制,只要含sdfl/sdf1即拦截
  - 新增_/下划线斜线残影过滤器^_[ /]拦截OCR气泡残影
2026-07-30 12:22:04 +08:00
youpaishidifu e3c8249251 修复 _has_user_colors @staticmethod 内误用 self 导致 OCR 全部失败\n\n根因:_has_user_colors 是 @staticmethod(无 self),但内部嵌套的\nanalyze() 函数调用了 self._is_white_bubble_pixel() → NameError。\nQQ/微信两侧 OCR 均因此失败。\n\n修复:self._is_white_bubble_pixel → MessageMonitor._is_white_bubble_pixel\n全部27个@staticmethod经AST扫描确认无其他self误用 2026-07-30 12:04:21 +08:00
youpaishidifu 3a53db427b 修复 _poll 方法被孤立到类外导致 AttributeError
根因:_is_white_bubble_pixel 以0缩进定义在模块级,其后4缩进的方法
(含 _has_user_colors、_poll 等21个)被Python解析为该函数体的一部分,
导致 MessageMonitor 类缺失 _poll 等方法→运行时 AttributeError。

修复:
- _is_white_bubble_pixel 改为 @staticmethod 移入 MessageMonitor 类内
- 唯一调用点改为 self._is_white_bubble_pixel(...)
- 类方法从50个恢复为71个,py_compile 校验通过
2026-07-30 10:06:38 +08:00
youpaishidifuandSenior Developer 62928d81eb 修复微信自身消息未跳过(自回复循环) + QQ调试截图被清理顶掉
1. 微信颜色门禁误判根因:聊天浅灰背景(≈237)原阈值>225被算作"对方白气泡",
   且绿色自身气泡上的白色文字也通过白像素检测,导致门禁永远不跳过→一直OCR→自回复循环。
   改为:白像素须≥245(纯白,排除浅灰背景),且四邻域≥3个同为纯白才计为"对方气泡",
   从而正确排除绿/蓝自身气泡上的白色文字。合成图验证:仅自身绿泡→跳过、对方白泡→OCR、
   空白灰屏→跳过、绿底白字→跳过。

2. QQ调试截图"没保存"根因:_clean_old_ocr_debug 用 QQ+微信共享6张上限池,
   微信轮询频率远高于QQ,其清理调用把刚保存的QQ截图顶掉。改为按前缀分别保留
   (ocr_debug_qq_ / ocr_debug_wx_ 各6张),互不挤占。

3. 截图保存硬化:保存后校验文件存在并INFO记录;异常时WARNING输出真实路径(原输出的是glob);
   显式指定 format=PNG。

Co-Authored-By: Senior Developer <senior-developer@experts>
2026-07-30 00:39:50 +08:00
youpaishidifu 01d0604f11 修复截屏前未真正唤醒QQ/微信的bug
- _ensure_visible 增强:原仅 SwitchToThisWindow 无法把窗口顶到 Z-order 最前,
  导致 ImageGrab.grab 截到用户停留的遮挡窗口(如终端)
  改为 恢复最小化→AllowSetForegroundWindow 解除前台限制→SetForegroundWindow
  + SwitchToThisWindow 兜底并校验前台(重试3次);不做 TOPMOST 避免 DWM 冻结
- 微信: 唤醒提前到 GetWindowRect 之前,唤醒后重新取 rect 算 cap(最小化恢复位置会变)
  可见性检查改为只判断 IsWindow,不可见交由 _ensure_visible 恢复而非直接返回
- QQ: 同样先唤醒再取 rect 算 cap,避免最小化恢复后 cap 区域过期
2026-07-29 23:55:55 +08:00
youpaishidifu dfaa62e2c0 修复微信自身消息过滤+病句加强+QQ共同好友黑名单
1. 微信颜色检测重写(_has_user_colors):
   - 绿色=自身消息(右对齐),白色=对方消息(左对齐)
   - 自身消息是最顶层门禁:右绿+左无白→跳过,左有白→继续OCR
   - 修复:之前绿色被当作bot色,导致自身消息未过滤触发查库

2. 病句过滤加强:
   - 短句阈值从≤5字提升到≤8字,必须含疑问词才放行
   - 新增疑问词:是不是/会不会/能不能/怎么办/好不好/行不行
   - 新增病句4:OCR拼接系统提示碎片(含#本/请自行/源码修改)
   - 新增病句5:修字碎片(自行修?帮我修)

3. QQ群UI黑名单:
   - _UI_SUBSTR_BLOCKLIST增加'共同好友'和'点击添加好友'
   - 防止QQ群'你和xxx有x个共同好友'触发查库
2026-07-29 23:29:38 +08:00
youpaishidifu a181300df5 OCR调试截图自动清理:从60张降至6张
- 微信和QQ截图统一池,合计最多6张
- 超过时从最早开始删除覆盖
- 确保保存失败时日志未打印也能通过截图及时发现问题
2026-07-29 22:57:54 +08:00
youpaishidifu a076353ee4 修复三个问题:病句过滤、KB回复内容、截图保存日志
1. 病句过滤改进(monitor.py):
   - ≤5字短句:必须包含疑问词(什么/怎么/如何/为什么/吗/呢等)才放行
   - 无疑问词的短句直接过滤(如'自行修?')
   - 5-50字病句:增加'过'字匹配(如'修正过后')

2. KB回复内容改进(auto_reply.py + knowledge_base.py):
   - _get_answer 改为返回 body(纯正文),不含 heading
   - KB搜索增加heading包含查询关键词的bonus
   - 文档头部(# 文档名)增加penalty,避免返回错误section

3. 截图保存日志改进(monitor.py):
   - QQ/微信截图保存失败日志从 debug 升级为 warning
   - 增加保存路径提示,便于定位问题
2026-07-29 22:43:32 +08:00
youpaishidifu 503de361c5 修复KB搜索质量差+增加OCR病句过滤
1. 改进内容相关性检查:高匹配度(≥10.0)但无共同词时拒绝匹配
   - 用户问PVP击杀播报,KB返回json格式说明(匹配度9.53)→ 拒绝
   - 增加body内容检查,防止TF-IDF误匹配

2. 增加OCR病句过滤:
   - 病句1:句子以动词结尾但缺少宾语(如'将其修正后重三')
   - 病句2:句子以'三'结尾(OCR误读'试'为'三')
   - 病句3:句子缺少主语且无标点
   - 病句直接过滤,不触发查库
2026-07-29 22:11:08 +08:00
youpaishidifu db64918761 改进内容相关性检查:增加body内容匹配,增强日志诊断
- _has_content_relevance 增加 content/body 检查,防止TF-IDF匹配到heading无关但body相关的section
- 增加 score 参数传递,用于日志记录
- 日志增加 doc_body 预览,便于诊断匹配失败原因
2026-07-29 21:56:14 +08:00
youpaishidifu fae6d5184f 修复OCR截历史消息自言自语: 变形命令过滤 + 首次轮询基线\n\n问题: OCR阅读历史帮助文档触发错误回复 + 首次启动时历史消息全部触发回复\n\nFix1: OCR误读斜线为字母(4处过滤)\n /sdfl→Isdfl /import→Jimport 均不被^/[A-Za-z]拦截\n - OCR级+Poll级: 含sdfl关键词的行以字母开头→变形命令跳过\n - OCR级+Poll级: 大写字母+4+小写+含CJK+>10字符→变形命令跳过\n 覆盖Isdfl update更新插件、Jimport导入cdk等所有OCR变形命令行\n\nFix2: 首次成功轮询基线拦截\n 检测_last_new_msg_time[platform]==0判断是否首次见消息\n 首次消息列表全部标记基线→加_seen_messages但skip_on_message\n 不触发KB搜索/自动回复\n 下一轮有真正的增量消息才触发回复 2026-07-29 21:23:32 +08:00
youpaishidifu d72d994db1 修复2问题: 斜线英文命令触发回复 + 微信Electron安全发送\n\n问题1: 斜线开头英文命令碎片触发自动回复\n 日志: /sdfl undo撤销导入 匹配度9.53触发了回复\n 旧过滤: 只拦>=2个/cmd, /sdfl只有1个→漏过\n 修复(OCR+Poll双级):\n - _process_ocr_output新增: re.match(r'^/[A-Za-z]', line)→跳过\n - _poll_on_new_messages同级新增\n 不拦/兑换码(斜线后中文), 只拦/register /sdfl等英文命令\n\n问题2: 微信SetForegroundWindow异常+Electron闪崩风险\n 日志: SetForegroundWindow/SwitchToThisWindow异常 code=0\n WeChat也是Electron, AttachThreadInput+SendMessage同TIM风险\n 修复:\n - _paste_and_send_tim→_paste_and_send_safe, 加platform参数\n 硬编码[qq]改为[platform]避免写错字典key\n 清理return True后不可达死代码\n - _paste_and_send路由: wechat也走安全路径\n Electron双平台(TIM+微信)统一走SwitchToThisWindow+前台确认→keybd_event\n 无AttachThreadInput、无SendMessage同步点击 2026-07-29 20:14:47 +08:00
youpaishidifu b1ca2f058c 修复OCR截图BitBlt卡死DWM→整机冻结2-3分钟
根因: ImageGrab.grab() 底层用 GDI BitBlt 从 DWM 合成表面截屏。
_ensure_visible(SwitchToThisWindow) 触发 DWM 窗口激活合成后,
紧接着 BitBlt 在 DWM 繁忙时阻塞等待→DWM 死锁→桌面冻结 2-3 分钟
→DWM 重启→部分使用 GPU 的软件崩溃

修复(新增 _safe_screenshot):
- daemon 线程内 ImageGrab.grab(), join(timeout=3.0) 超时等待
- 超时后线程 is_alive→返回 None, 跳过本轮(日志: BitBlt 可能卡在 DWM)
- 不会 cancel 线程(无法取消阻塞的 C 调用), 但 daemon 特性确保:
  进程退出时自动终止, 正常运行时 GDI 调用最终完成+线程自动回收
- _ensure_visible 后 sleep 从 0.1s 增加到 0.4s, 给 DWM 完成窗口合成
  降低 BitBlt 在 DWM 繁忙时调用的概率
2026-07-29 18:49:34 +08:00
youpaishidifu ef227eb7b0 修复2个问题: OCR拼接合并 + 微信定位冻结3-5s
问题1: OCR拼接合并 (2处改动)
  - easyocr_worker.py: ' '.join→'\n'.join, 各检测区域用换行而非空格拼接
    避免 '兑换码导入错误时如何处置?游戏专用小筑憩-草一' 式合并
  - _process_ocr_output 尾部新增 _split_merged_ocr_text:
    在中文句尾标点([。?!?])后紧跟CJK处拆分,两侧CJK>=3且非续接语气词
    将合并文本分为多条消息,各自独立参与KB匹配

问题2: 微信 _fresh_window 冻结3-5s (2处改动)
  - _poll: 对wechat跳过 _fresh_window(ControlFromHandle构建Electron UIA树冻结)
    用 win=None 代替
  - _read_messages(wechat): 接收window=None, OCR失败后惰性创建UIA控件
    大多数轮次 OCR 读到消息就直接返回,不碰UIA树
2026-07-29 18:11:29 +08:00
youpaishidifu 722d2a5438 双引擎OCR并发: Windows OCR + EasyOCR同时跑最多等10秒,谁先出用谁
之前: Windows OCR串行等完→再串行等EasyOCR(微信端甚至无超时)。
EasyOCR子进程挂起=OCR整条链路都卡死。

改为 _ocr_dual_engine 方法:
- Windows OCR + EasyOCR 通过 ThreadPoolExecutor 同时跑
- concurrent.futures.wait(timeout=10.0, ALL_COMPLETED) 等最多10秒
- 两引擎都在10秒内出结果→_pick_ocr_text质量对比选优
- 只有一个在10秒内出结果→直接用那个
- 都超时→返回空
- Windows OCR bad allocation 自动降级到原图重试(在worker线程内处理)

两个平台调用点(_ocr_read_qq / _ocr_read_wechat)都改为调_ocr_dual_engine。
微信端同时补上im_original备份(之前缺bad allocation降级)。
2026-07-29 17:51:52 +08:00
youpaishidifu 68d364a0c6 修复TIM在回复冷却期因OCR空返回→回退到剪贴板路径(AttachThreadInput)→崩进程→永久罢工
根因链:
1. _paste_and_send_tim回复成功→_self_reply_cooldown_until[qq]=15s
2. 冷却期每轮_ocr_read_qq返回[]但未设_ocr_unchanged
3. _read_messages穿过_ocr_unchanged检查→落到_read_via_clipboard_once
4. _read_via_clipboard_once调_ensure_foreground→_attach_set_foreground→AttachThreadInput
5. TIM Electron进程崩溃→_ensure_hwnd再找不到→QQ永久罢工

修复(两处):
- _ocr_read_qq冷却返回时也设_ocr_unchanged[qq]=True,阻挡fallthrough
- _read_messages对tim变体在OCR空时直接return[],跳过所有fallback
2026-07-29 17:34:03 +08:00
youpaishidifu 431b49d88c 截图路径回退项目目录+QQ随机错峰轮询+尾部时间戳不过滤 2026-07-29 16:45:11 +08:00
youpaishidifu 5b31b66f01 QQ轮询加速+故障降级:EasyOCR超时8s/原图降级/截图存TEMP 2026-07-29 16:15:48 +08:00
youpaishidifu 659f667d74 OCR过滤:加多/cmd指令列表碎片检测 + 内容相关性检查防偶然匹配 2026-07-29 15:29:42 +08:00
youpaishidifu 47bd990f76 fix: 急停WH_KEYBOARD_LL钩子两个致命bug修复
1. hmod参数必须为NULL: GetModuleHandleW(None)返回Python.exe模块句柄≠NULL,
   导致SetWindowsHookExW静默失败,钩子从未安装成功。改用None(0)。

2. 安装钩子前先创建消息队列: PeekMessageW强制创建线程消息队列,
   WH_KEYBOARD_LL回调通过GetMessage投递,无消息队列则回调永远不到达。

新增启动成功日志: [急停] 底层键盘钩子安装成功,ESC 急停已激活
2026-07-29 14:23:47 +08:00
youpaishidifu c243549169 fix: 急停改用底层键盘钩子WH_KEYBOARD_LL,全局生效
GetAsyncKeyState 依赖消息泵,daemon 线程无消息循环,只有 CMD 有焦点时才能偶然读到 ESC。

改用 SetWindowsHookExW(WH_KEYBOARD_LL) 系统级底层键盘钩子:
- 不依赖窗口焦点,任何进程按 ESC 都能捕获(游戏全屏/浏览器/桌面)
- 钩子回调运行在安装钩子的线程消息泵(GetMessage)
- 线程退出时 PostThreadMessageW(WM_QUIT) 唤醒 GetMessage 阻塞
- 卸载钩子 + 释放回调引用防 GC 延迟崩溃
2026-07-29 14:13:44 +08:00
youpaishidifu b2dc72e7b5 fix: 剪贴板hash去重 + 双击ESC急停 + 截图日志完善
1. 剪贴板hash去重: _read_via_clipboard_once计算md5(content),
   同平台内容未变则跳过,防止QQ读到微信遗留的过时剪贴板数据
   答非所问(跨平台stale数据)问题修复

2. 双击ESC急停: _esc_check_loop daemon线程每150ms轮询ESC键,
   两次ESC间隔<500ms触发_emergency_stop: 设置_running=False、
   杀死EasyOCR子进程、清空发送锁、回调GUI更新状态、
   用户可点击开关重新启动。急停后不退出程序。

3. 截图日志完善:
   - 日志打印完整路径(用户可直接定位)
   - 统一keep=60(QQ+微信共享清理池,双平台不互删)
   - 移除微信冗余二次保存(wechat_ocr_*重复save)
   - 修复silent except→打出save失败日志
2026-07-29 13:11:00 +08:00
youpaishidifu afbcd109f0 fix: poll first变量修复 + KB添加安装动词 + 绿色气泡OCR拦截\n\n1. Poll first变量修复: first=True初始化但循环体内从未设为False→\n 所有new_items都被当作第一条处理。加first=False只处理首条。\n2. KB action_verbs_all添加"安装": "云背包插件怎么安装"\n verb+obj提取安装+云背包插件→优先匹配"安装方法"section\n3. 绿色气泡OCR拦截三层:\n - OCR级: |管道符+CJK混合过滤(正常聊天从不混用|和中文)\n - Poll级: 同|管道符+CJK过滤兜底\n - _is_reply_fragment阈值降低: raw 8→6, CJK 6→5\n - OCR line filter阈值同步降低: raw 8→6, CJK 6→5\n 绿色气泡被OCR啃成"GU |进行配置..."的乱码现在pipe过滤\n 即可拦截或SequenceMatcher阈值降低后匹配replied_texts\n- 提交git.ypshidifu.cn 2026-07-29 12:42:23 +08:00
youpaishidifu 3b8117977b fix: 白色气泡柱检测拦截CMD窗口误截图
_has_user_colors 新增一层: 左35%区域按行统计白色像素密度。
用户气泡在左侧形成多行多列白色密集区(气泡柱), CMD窗口/非聊
天截图即使有零星白字也不会在同一行出现≥3白色采样点。日志输
出行白色分布数组用于调参: [qq] 无白色气泡柱(r=[0,1,0,2,0,...])
跳过(非聊天截图)
2026-07-29 12:05:06 +08:00
youpaishidifu b160514729 fix: QQ独立轮询线程 + 调试截图前置 + 游戏UI乱码过滤补全
1. QQ独立轮询线程: QQ从_run_loop移到_qq_poll_loop独立daemon线程,
   不再被微信OCR(~15-20s/轮)阻塞。QQ响应从~34s降到~3-5s。
   EasyOCR子进程加_easyocr_lock保护并发访问。
2. 调试截图前置: QQ/微信的ocr_debug截图移至颜色+哈希检查之前,
   即使像素/哈希跳过也有图可查。日志打印截图文件名。
   _read_messages各路径增加'消息来源: xxx → N条'日志追踪。
3. 游戏UI乱码过滤补全: 剪贴板路径和poll级去重循环追加
   CJK+下划线英文/CJK+大写英文组合过滤,堵住clipboard/UIA兜底漏过的乱码。
2026-07-29 11:44:25 +08:00
youpaishidifu 21f2426492 fix: QQ裁剪回退0.25 + 轮询加速2周期
1. QQ cap_left 0.50→0.25 回退到5de2521状态,消息面板覆盖左半侧,用户消息不再被切掉
   颜色检测+md过滤负责拦截bot回复残片,无需用0.50避开会话列表
2. QQ降频4周期→2周期(~8s→~4s),用户消息响应加快
2026-07-29 10:46:09 +08:00
youpaishidifu 30e8e0ccc3 fix: <br>HTML标签 md检测 + 游戏UI乱码过滤 + 无消息气泡跳过OCR
1. _is_markdown_document: 增加<br>HTML换行标记检测,bot回复中<br>残片不再触发查库
2. OCR过滤: 增加游戏UI/非聊天文本乱码过滤,含下划线英文(CJK+_组合)和
   CJK后跟大写英文(玩家Ierite 比武Mtp)特征两项,拦截群中游戏插件输出残缺
3. _has_user_colors: 左右半区白色像素合计<20且bot色<3时认为无可见消息气泡,跳过本轮OCR
2026-07-29 10:17:50 +08:00
youpaishidifu 94cd3ca448 修复颜色检测+自身冷却+QQ裁切+2324异常 4项:QQ cap_left 0.25→0.50(避会话列表) / _has_user_colors改左右半区策略 / 回复后同平台15s冷却 / 2324行try-except兜住SetForegroundWindow崩溃 2026-07-29 00:53:36 +08:00
youpaishidifu 718f67804c 修复KB搜索3项:疑问词不当降权 + 文档聚合tiebreaker + section弱匹配不计入 2026-07-29 00:09:22 +08:00
youpaishidifu 4da415f9c5 修复KB匹配:action_verbs_all去掉怎么/如何等疑问词,避免sdf1_login含'怎么办'被惩罚更少反超beibao 2026-07-29 00:01:28 +08:00
youpaishidifu 0452246c73 修复多发+剪贴板安全 4项:模糊阈值0.85→0.75/CJK子串8→6/同poll只处理第一项/设剪贴板后回读校验/读剪贴板时检查发送锁防竞争 2026-07-28 23:37:01 +08:00
youpaishidifu e2a1fe2a68 修复OCR 3项:微信裁切左移到34% + 颜色像素检测(蓝=QQ绿=微信=仅bot跳过) + bot回复残留因颜色检测一并隔离 2026-07-28 23:11:19 +08:00
youpaishidifu a093528888 修复2个问题:微信OCR hash碰撞(aHash→dHash+5秒强制刷新) + KB搜索动词+对象精准匹配防误召回 2026-07-28 22:28:29 +08:00
youpaishidifu 1ccaa926fd 4项修复:CJK比例乱码过滤/跨平台冷却30s/SequenceMatcher加强(原始文本匹配+CJK阈值6)/split阶段回复残片预检;加_reply_fragment复用方法;回复前缀后缀变体追踪 2026-07-28 21:48:55 +08:00
youpaishidifu 768b3da214 修复3个bug:加import sys修复子进程崩溃;加消息漫游到UI子串黑名单;加结构化数据面板过滤拦截QQ指令面板(3+中文冒号键值对);同步到Poll过滤层级 2026-07-28 21:19:47 +08:00
youpaishidifu 7102821127 EasyOCR GPU crash隔离:子进程隔离GPU推理,崩溃只杀子进程不冻电脑;新增easyocr_worker.py常驻worker;主进程降级到Windows OCR 2026-07-28 19:24:33 +08:00
youpaishidifu 94cf619f3d OCR截屏JSON/YAML配置块剥离:新增_strip_json_yaml_blocks方法在切行前剥离JSON对象块/key-value行/YAML列表;OCR行过滤和Poll过滤加JSON/YAML语法兜底;修复微信右侧配置面板与用户消息搅合导致消息丢失 2026-07-28 18:58:54 +08:00
youpaishidifu f3cdb142b8 OCR行过滤加*开头和*配对残片丢弃,修复*如有错误、*x但不衢...x*漏网 2026-07-28 18:42:10 +08:00
youpaishidifu 06ead20a6d 增强md语法过滤:全面拦截**加粗/###数字标题/编号列表/引用块/分隔线/表格行;提取函数过滤**残片;OCR行过滤兜底md语法;轻量化前台操作避免截图卡顿 2026-07-28 18:23:46 +08:00
youpaishidifu d3d35ceb55 修复OCR自我回环:无中文乱码过滤、微信唤前台截图、SequenceMatcher阈值10
1. 无中文乱码过滤:非中文且长度>10且非/开头的行一律丢弃。
   解决URL-only因OCR吃掉https://前缀漏网(如hpsllimgypshidifu...)

2. 微信OCR加唤前台:在截图前调用_ensure_foreground,
   避免终端窗口遮挡导致OCR读到自身日志文字。

3. SequenceMatcher阈值12→10:
   与已回复文本公共子串11字,旧阈值12差一字漏网。10字安全覆盖。
   OCR/Poll双重部署。正常用户消息公共子串≤1字,无影响。
2026-07-28 17:57:33 +08:00
youpaishidifu 30d2b497a8 Fix OCR self-feed loop: bold md detect, repeat-char garbage, SequenceMatcher reply fragment catch
- _is_markdown_document: add bold **text** detection before len<10 gate
- Garbage filter: 5+ consecutive same char detect (LLLLL/11111)
- OCR filter + Poll filter: SequenceMatcher longest common CJK substring >=12 chars
  vs replied_texts. Catches TTTT八X1r以...工单]、**使用**权 fragments
  that exact/substring/fuzzy match miss due to OCR noise prefix.
2026-07-28 17:42:07 +08:00
youpaishidifu ba139113b1 修复OCR md碎片漏网:短列表项/- 玩家义务/漏过、尾部#草残留
- _is_markdown_document: 行首列表项(- /*)、checkbox([V])、
  md链接缺括号([text]( )检查移到len<10之前,短碎片不漏
- 时间戳分割else分支: 新增尾部#标题清理(\s+#[\u4e00-\u9fff]...$)
- 提取后重检: extraction出的文本再走_is_markdown_document,
  纯md碎片丢弃
- 过滤循环兜底: line进入texts.append前再扫一次尾部#标题+
2026-07-28 16:48:56 +08:00
youpaishidifu 42db2ad5b8 新增三层OCR过滤: URL-only/UI子串黑名单/浏览状态去锚
- URL-only: 无中文+含https? → 拦截OCR面板图片URL碎片(含OCR乱码httpsLlimgypshidifu)
- UI子串黑名单: 启用监控/数据看板/债券总和/应用设置/php管理员 → 含任一即丢弃
- 浏览状态去锚: ^(浏览|...) → (?:浏览|...) 拦截"启用监控浏览243个文档"等混合碎片
- 黑名单补充: 手机(Smart-Dump漏网)
- FutureWarning修复: [[\d] → \[\d
- Poll级安全阀同步新增URL-only+UI子串过滤
2026-07-28 16:31:38 +08:00
youpaishidifu 4895379d6d 修:微信UI元素过滤 + 发送失败冷却防卡死
问题1:微信OCR读左侧会话列表按钮(游戏中心/视频号/通讯录等),
触发KB匹配→尝试回复→窗口切换→Ctrl+C都响应很久。

修复1:
- 微信截图左边界从32%移到40%(跳过左侧UI按钮列)
- 新增微信UI元素黑名单正则:游戏中心|视频号|直播|看一看|搜一搜|朋友圈|通讯录|收藏|设置|发现|我|摇一摇|小程序|支付|卡包|表情|公众号|服务

问题2:UI文本触发回复→发送失败→下一轮OCR又读到相同文本→
又触发→又失败→无限循环卡死。

修复2:
- 新增_failed_send_cooldown字典(msg_hash→失败时间)
- 失败后60秒内不重试同一条消息
- 失败文本立即加入seen_messages防止OCR重新触发
- 清理过期冷却条目(TTL 60秒)
2026-07-28 13:11:43 +08:00
youpaishidifu f5bfcb56eb 修:OCR随机字符垃圾(如544UUJ1W H V=YJ~JL:e)漏过过滤
问题:EasyOCR对头像/表情/特殊UI区域输出无意义字母数字符号组合,
_is_ocr_console_garbage对无中文文本阈值>20,刚好漏过20字符的乱码。

修复:
1. 无中文阈值从>20降到>15
2. 新增随机字符检测:无中文+特殊字符>15%+字母数字混杂→垃圾
3. _process_ocr_output逐行过滤同步添加该检测
2026-07-28 12:30:08 +08:00
youpaishidifu ababfc88ad 修:PostMessage键盘导致QQ NT发送乱码字符 2026-07-28 11:30:28 +08:00
youpaishidifu 3a7a05f973 修:OCR全角括号md碎片导致KB死循环
问题:OCR将英文括号识别为全角(()形式,[官方下载](?https...
此类碎片漏过 _is_markdown_document 检测,进入KB匹配触发回复。

修复:
1. _is_markdown_document: 新增 ]( 和 [text]( 检测(全角括号md链接)
2. OCR行级过滤: 新增 ]( 碎片丢弃
3. _extract_user_text_from_md_fragment: 新增全角括号md标记分割
4. KB scoring: 短查询(≤3分词)降权,防碎片得分反超真实消息
2026-07-27 21:48:44 +08:00
youpaishidifu 8d5e9b7e17 修:OCR md 残留死循环 - checkbox/[V]残片 + 断链检测
问题:bot md回复被OCR识别后再次进入自动回复管道,形成死循环。
[V] GitHu [V] gitee... 等checkbox碎片和 [text](url 断链碎片
未触发现有 md 检测,导致自言自语。

修复:
1. 行级OCR过滤:含2+个 [V] 标记的行直接丢弃
2. _is_markdown_document 加两条:
   - checkbox 标记 [V]/[v]/[x]/[V ] 等 → md 残留
   - 断链 [text]( → QQ群聊不用此语法
2026-07-27 21:22:35 +08:00
youpaishidifu 25073c35f1 requirements.txt: 添加 easyocr/torch/torchvision 依赖 2026-07-27 20:52:09 +08:00
youpaishidifu 79b739f59d md表格细胞值提取加固+replied子串包含过滤 CUDA Torch 安装 2>&1 2026-07-27 19:47:39 +08:00
youpaishidifu 17bfe35520 _poll: qq找窗去子线程,纯Win32直接跑在_run_loop线程 2026-07-27 19:27:22 +08:00
youpaishidifu e723ce582e OCR checkbox残片过滤 + EasyOCR GPU自动检测 2026-07-27 19:02:58 +08:00
youpaishidifu dc2e1f4105 EasyOCR:主线程预加载+torch.set_num_threads(1)防段错误 2026-07-27 18:52:31 +08:00
youpaishidifu 906c89f2f9 加faulthandler+OCR阶段心跳日志排查崩溃 2026-07-27 18:28:31 +08:00
youpaishidifu 5ecfa09017 窗口查找改纯PID+OCR垃圾过滤+md短标题修复 2026-07-27 18:18:36 +08:00
youpaishidifu a0e932276a 替换:文本指纹→截图像素签名(8x8感知hash),屏幕不变整轮跳过+跳过fallback+不计空读 2026-07-27 17:06:56 +08:00
youpaishidifu e90cea7343 修复:OCR环路五个靶点—①##中文(md检测)②位置0##不提取③跨轮指纹去重④引擎标签⑤回复标题去##追踪 2026-07-27 16:30:37 +08:00
youpaishidifu 24146f34d9 重大:新增微信OCR读取 + 提取_process_ocr_output共用方法 + 导航噪声过滤 + 垃圾计数改为dict 2026-07-27 15:55:55 +08:00
youpaishidifu ec06e48926 修复:KB同义词(权力→权利) + 微信"关闭"按钮过滤(NFKC标准化+行尾跳过) 2026-07-27 15:36:14 +08:00
youpaishidifu 12759cabfc 修复:OCR md片段中提取用户消息(_extract_user_text_from_md_fragment) 2026-07-27 14:50:47 +08:00