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
youpaishidifu
8894124b0a
fix(kb): section级搜索+意图排序+分词级匹配修复短查询与跨section排序
...
1. knowledge_base.py:
- 文档按 ## 标题切分为独立 section 后索引,每个 section 独立 TF-IDF
- 分词级匹配(避免"定义"子串匹配"自定义"的假阳性)
- 文档级优先排序:先按文档聚合,取最高 section 分决定最佳文档
- 定义类查询(版号/版本号/定义):自动降权无定义类 section 的文档
- 动作类查询(怎么/如何/用法):按优先级找"参数/指令/使用"→"方法"→"安装" heading
- 预计算 heading/body 分词集合,避免每次搜索重复 jieba
- 修复 SYNONYMS 重复 key
2. auto_reply.py:
- 精简答案提取:section 级搜索后 doc['content'] 即最相关片段
- 移除冗余的 _extract_relevant_snippet(重复 jieba 分词+section 切分)
3. monitor.py:
- 增加微信/QQ UI 噪声过滤(通讯录、发现、朋友圈等)
2026-07-27 14:17:51 +08:00
youpaishidifu
1441278082
fix(kb): 混合评分策略修复短查询匹配失败
...
TF-IDF 余弦相似度单独使用对短中文查询过于严格(3-5 个词 vs 数百个词的长文档)。
改为混合评分:0.4×TF-IDF + 0.6×关键词命中率,让短查询只要命中关键词就能返回结果。
同时降低 auto_reply_min_score 从 0.35→0.30,适配混合评分的数值范围。
2026-07-27 12:30:31 +08:00
youpaishidifu
81419b82fd
fix: QQ消息末尾O~/C~/0~状态标记清理更宽松正则
...
旧正则 \s*O~O~\s*$ 只匹配 O~O~,漏掉 O~、C~、0~ 等变体。
新正则 \s*(?:[A-Za-z0-9]~)+\s*$ 覆盖所有单/多字符+波浪线组合。
三处同步更新归一化函数:
1. _normalize_ocr_text (全局字符清理)
2. OCR原始行分割前 (split前整行清理)
3. 剪贴板行过滤 (clipboard路径清理)
4. 时间戳分割后逐片段清理 (关键修复:之前只清了分割前行,分割后片段漏了)
2026-07-27 11:38:59 +08:00
youpaishidifu
135da38760
fix: 清理 QQ 消息末尾 O~O~ 状态标记 + md 检测移到分割后
...
1. 剪贴板/OCR 行末尾 '0~O~' 状态标记污染 KB 匹配 → 用正则清理
2. md 文档检测从分割前移到分割后逐片段执行,避免 bot md 片段误杀同条 OCR 行里的用户消息
3. easyocr 导入移到 COM 模块之前,避免 c10.dll 初始化冲突
2026-07-27 10:33:29 +08:00
youpaishidifu
0d375ab230
chore: gitignore 屏蔽 nul 文件(Shell 重定向产物)
2026-07-26 23:26:11 +08:00
youpaishidifu
d6b2f21dcd
fix: easyocr 导入 OSError 改为捕获降级
2026-07-26 23:25:04 +08:00
youpaishidifu
948af558ea
新增: 双 OCR 引擎(Windows OCR + EasyOCR 备用)+ 对比选择机制
...
Windows OCR 保持主力,EasyOCR 作为备用对比引擎:
1. 条件导入:easyocr/numpy 可选,缺省时优雅降级到纯 Windows OCR
2. 引擎对比:_score_ocr_text 打分(CJK 量、垃圾字符、空格率、时间戳)
_pick_ocr_text 选高分者,日志记录引擎胜负统计
3. 每轮 OCR 两张多跑一次 EasyOCR(CPU 模式),结果对比后选优
4. _pick_ocr_text 引入后,日志格式变化:
[ocr] 引擎对比: win=xx.x vs easy=xx.x → 选 XX (胜率XX%, N轮)
2026-07-26 22:19:04 +08:00
youpaishidifu
20cdeeb15c
修复: OCR 图像预处理 2x 放大+锐化+对比度 + 增强 normalize 纠错
...
1. 图像预处理(截图保存后、OCR 前):
- 2x LANCZOS 放大:Windows OCR 对高 DPI 输入识别更好
- 锐化 1.8x + 对比度 1.4x:字符边缘更清晰,减少 CJK 空格/字符混淆
预期:减少《→<错误、减少 CJK 间空格残留、减少字符分裂(什→亻牛)
2. 增强 _normalize_ocr_text:
- 《》→ <> 修复:Minecraft 聊天 <player> 被 OCR 误读为中文书名号
- l→| 管道分隔符修复:|quiz| 误读为 lquizl,使用 (?<=\s)l(...)l(?=\s) 模式
- .→ . 全角点→半角数字小数点(0.45 → 0.45)
这些修复只在非 md 文本上运行(md 被 pre-split check 提前过滤)
2026-07-26 21:55:55 +08:00
youpaishidifu
5d0cedcab4
修复: OCR cap_top 跳过群名头栏 + 行级群名头栏过滤
...
1. cap_top 从 max(40, 4%)→max(80, 6%):跳过 TIM 聊天面板
顶部群名+角色标签头栏(~70px),之前只跳过了 Windows 标题栏
2. 行级内容过滤:行首匹配 '名称(角色〕' / 【名称】等 header 模式
(闭合括号为 〕」】 等非日常聊天用符号)—— cap_top 残余的二次防御
3. 防止 OCR 将群名头栏+消息预览混成一条无时间戳的乱码”新消息
2026-07-26 20:46:31 +08:00
youpaishidifu
643619453d
chore: gitignore 屏蔽 ocr_debug_*.png 并移除跟踪
2026-07-26 20:17:03 +08:00
youpaishidifu
953f1da797
修复: OCR 右裁剪边界 95%→78% 排除群成员侧栏 + 内容过滤二次防御
...
1. cap_right 从 win_w*0.95 收窄到 win_w*0.78,排除右栏群成员列表(~80%+ 区域)
防止群成员列表混入聊天消息 OCR 导致"新消息"乱码触发 bot 回复
2. 加 "群成员"/"索群成员"/"搜索成员" 行级内容过滤,裁剪残余的二次防御
2026-07-26 20:16:06 +08:00
youpaishidifu
fd077e343c
修复: OCR md文档预检 + 日志显示完整文本
...
1. 分割前 md 预检:在时间戳分割前用 _is_markdown_document 检查整行,
避免分割打断 md 链接/标题语法导致碎片漏过_BqDgv_过滤
2. 强化 _is_markdown_document:新增 .md) 文件引用模式
(如 gin.md) 分割后残缺链接)+ 内联 # # 标题标记
3. 调试日志不再截断:normalize/clean 显示前120字符+长度,
split parts 显示前60字符,定位问题不靠猜
2026-07-26 20:04:54 +08:00
youpaishidifu
2ccb677abf
OCR截屏前点击消息面板设焦点(TIM默认焦点在会话列表,VK_END只滚滚会话列表)+加详细OCR处理日志(stage normalize/clean/split)
2026-07-26 19:35:54 +08:00
youpaishidifu
54d474a6c5
裁剪退回c9acd7e版: cap_left=0.25, cap_top=0.04, cap_bottom=0.10. 42%+45%只截到bot自身消息右侧, 对方消息被切; md过滤+滚底保留负责拦截md内容和避旧堆
2026-07-26 19:24:44 +08:00
youpaishidifu
59e3657684
加_is_markdown_document过滤: bot回复是md格式(%23标题、[链接](url)、-列表、反引号代码、|表格), 用户聊天框不用md语法, 借此区分bot旧回复vs用户新消息
2026-07-26 19:19:37 +08:00
youpaishidifu
3602ad6ef3
OCR裁剪cap_top 62%->45%放宽避免切消息+PostMessage VK_END兜底滚底(怕keybd_event被TIM忽略)
2026-07-26 19:12:53 +08:00
youpaishidifu
8c71412600
OCR截屏前Ctrl+End滚底+cap_top改为底部38%: 避免历史堆积+bot旧回复混入OCR, 只截最新消息区域
2026-07-26 19:01:24 +08:00
youpaishidifu
4307d5743f
TIM裁剪左边界从25%调到42%: 25%截到会话列表的文档预览(混入OCR), 42%从消息面板左边缘开始, 避免文档预览混入, 保留对方消息
2026-07-26 18:54:26 +08:00
youpaishidifu
621d4c45b6
EnumWindows简化: _enum_callback已只加QQ/TIM相关窗口(for+TXGuiFoundation+Chrome+title), for循环直接取第一个可见+尺寸正常的, 不要求标题含QQ/TIM
2026-07-26 18:49:23 +08:00
youpaishidifu
efdc8b0a4c
QQ NT Electron主窗口标题是群名/昵称而非固定"QQ": Chrome_WidgetWin_1类名+可见+尺寸>200x100即可接受,不要求标题含QQ/TIM
2026-07-26 18:45:05 +08:00
youpaishidifu
3047a3ee82
OCR去重加强: _replied_texts加模糊匹配(0.85阈值)拦截OCR噪声版长回复; 超长文本(>200字符)跳过避免堆积历史冒充新消息触发回环
2026-07-26 18:38:27 +08:00
youpaishidifu
ff6b72d5f2
EnumWindows加IsWindowVisible检查+debug log看候选窗口: 之前不可见TXGuiFoundation辅助窗口被缓存, title空top=592874, 真实主窗口一直不被使用
2026-07-26 18:28:11 +08:00
youpaishidifu
8626130f0c
Fix QQ_FindWindow误缓存不可见托盘辅助窗口: TXGuiFoundation有不可见托盘辅助窗口(空标题IsWindowVisible=False), FindWindow返回它并缓存→_poll里IsWindowVisible检查静默跳过全轮。加IsWindowVisible检查后才缓存,不可见则fall through到EnumWindows找Chrome_WidgetWin_1可见主窗口
2026-07-26 18:23:57 +08:00
youpaishidifu
7aa3c9398e
修微信[S-A]读到侧栏文件列表而非聊天消息: _read_message_list加位置过滤>窗口45%右半侧才接受; 修QQ NT(Electron)新类名查找失败: EnumWindows加Chrome类名+标题含QQ搜索; config.py默认qq_enabled=True
2026-07-26 18:15:50 +08:00
youpaishidifu
0775ceaea7
QQ托盘隐藏时跳过poll不尝试恢复窗口: 任何ShowWindow(SW_SHOWNORMAL)在隐藏QQ NT窗口上都会触发托盘预览弹窗而非恢复主窗口
2026-07-26 17:57:15 +08:00
youpaishidifu
6bc8885eae
降级_validate_qq_window回c9acd7e版: 不做自动恢复->OCR空读->剪贴板兜底_ensure_foreground负责恢复主窗口
2026-07-26 17:46:55 +08:00
youpaishidifu
86686d0e22
修复Q窗口托盘恢复用SW_SHOWNORMAL替代SW_SHOWNA: SW_SHOWNA触发托盘预览弹窗而非主窗口
2026-07-26 17:38:11 +08:00
youpaishidifu
8f9433983f
QQ托盘隐藏时用SW_SHOWNA恢复窗口(不触发托盘弹窗)+poll结束后自动SW_HIDE缩回托盘+验证不通过不再直接报窗口不可用
2026-07-26 17:21:09 +08:00
youpaishidifu
e7f3adaa73
QQ窗口定位用Win32 FindWindow/EnumWindows替代UIA枚举,避免root.GetChildren()挂死
2026-07-26 16:59:03 +08:00
youpaishidifu
039b34179a
裁剪左边界退回25%(c9acd7e版),48%只截到自身消息右半边对方消息完全不可见
2026-07-26 16:54:23 +08:00
youpaishidifu
8963a34b6a
修复OCR乱码+KB全文返回: 裁剪48%+&提前清理+全角:转换+纯时间戳过滤+KB回复限200字
...
1. cap_left 38%→48%(完全避开会话列表~30-55%)
38%仍捕获到左侧KB预览文字(问题1/2…)混入OCR
48%只捕获消息面板正文,KB预览不再出现
2. &清理移到时间戳分割前+全角:→半角:
原来&在分割后才清理,"13:5&07"无法被时间戳正则捕获
分割前清理→"13:5 07"可匹配时间戳→分割出独立段
全角:统一半角,后续正则只匹配半角
3. 时间戳段用\d{1,2}(允许单数字分钟)
分割后"07""15"等纯数字段被^[\d:\s]+$过滤
之前"13:5 07 14:2 15"整段因含空格,^\d{1,2}[::]\d{2}不匹配
4. auto_reply非Q&A文档回复限200字(之前500仍过多)
子串匹配触发的全文返回只回复前200字符
5. KB行级预览过滤移除(与用户消息混行时误杀)
段级别^问题\d+过滤器已足够,配合新裁剪基本不会触发
2026-07-26 16:37:41 +08:00
youpaishidifu
0e02a4a44c
修复OCR文字乱码:裁剪38-97%+KB预览过滤+&碎片清理
...
1. cap_left 25%→38%(避开会话列表KB预览文字)
25%捕获联系人+会话列表双面板文字,KB预览"问题1:你叫什么名字"
及小字OCR误读"届亻牛"(插件)→混合乱码
38%从会话列表偏右开始,主要捕获消息面板大字号正文
2. cap_right 95%→97%(减少右侧时间戳裁剪)
95%裁到时间戳右边缘→"13:57:07"变"13:5&07"
97%多给2%宽度,大幅减少&碎片
3. KB预览行直接过滤:^问题\d+[::]
4. 循环中去掉&字符:line.replace('&', '')
2026-07-26 15:52:43 +08:00
youpaishidifu
7bdc7ad637
修复2问题: KB误匹配+返回全文 / Ctrl+C无法停止
...
1. KB匹配与返回全文
- _poll中过滤纯时间/日期格式文本(OCR时间戳分割残留)->不入KB搜索
- knowledge_base.py子串fallback要求query>=4字符,避免"19:15"等短时间戳误匹配
- auto_reply._get_answer: 非Q&A文档只返回content前500字符,不返回整篇文件
- 时间戳文本不进入KB + 短query不子串匹配 + 非Q&A截取 = 三层兜底
2. Ctrl+C无法停止
- ThreadPoolExecutor创建非daemon线程->进程无法退出->必须杀CMD
改用daemon thread + Event.wait(timeout): daemon线程不阻塞进程退出
- main.py注册signal.signal(SIGINT) handler: 收到Ctrl+C后stop监控+quit窗口
- 移除from concurrent.futures导入,替换为import signal
2026-07-26 15:30:55 +08:00
youpaishidifu
6d0974ea8f
修复_ensure_hwnd UIA挂死导致整条while循环卡住\n\n1. _ensure_hwnd 调用包装 ThreadPoolExecutor + 12s 超时\n 防止 QQ TXGuiFoundation 枚举或微信窗口检测无限阻塞\n 超时后日志警告 + 跳过本轮,while 循环继续跑\n\n2. _run_loop 首轮加 '进入 while 循环' 日志\n 快速确认循环启动\n\n3. 新增 concurrent.futures 导入\n\n根因:UIA COM 调用可挂死不返回(如遍历所有顶层窗口时\n某进程无响应),整个 _poll 卡住 → while 循环停转\n→ 无心跳 → 无任何输出
2026-07-26 15:13:09 +08:00
youpaishidifu
5492cdf81b
QQ OCR按时间戳分割恢复独立消息
...
- QQ NT OCR 输出所有可见消息合并为一段无换行文本
- 用re.split捕获组按时间戳(HH:MM或HH:MM:SS)切割
- 每段时间戳之间的文本作为独立消息处理
- 避免"7你好我叫12314:2&15你好我叫12314:42:45SDFI届亻牛有中文吗?"
整坨变成一条新消息
2026-07-26 14:54:21 +08:00
youpaishidifu
62f6277cf3
修复 stale UnboundLocalError:初始化stal变量在不同路径
...
- stale 变量仅在 signature-early-return 分支定义
- 正常路径(新消息处理)用到 stale 时报 UnboundLocalError
- 修复:在 signature 检查前初始化 stale=0,两个路径都能访问
2026-07-26 14:46:39 +08:00
youpaishidifu
f4c6243944
修复重复处理+新消息不处理:全签名跳过+_seen_messages上限+模糊阈值0.80
...
1. 全文本签名提前跳过(关键)
OCR输出与上轮完全一样→立即return,不跑去重循环
99%场景OCR内容不变,之前却每次都跑模糊匹配→噪声导致漏网
2. _seen_messages上限500条,超了裁到300
无限增长→新消息模糊匹配时被历史噪声误杀("新消息没处理")
上限后新消息只和最近300条比,大幅降低误杀率
3. 模糊匹配阈值0.72→0.80
短文本0.72太松,"你好"vs"你好啊"75%相似就被当成重复
0.80要求80%重复才跳过,放行真新消息
2026-07-26 14:11:37 +08:00
youpaishidifu
e9d9551e3d
修复2个问题:退回裁剪+知识库只回复匹配句\n\n1. 裁剪退回c9acd7e版(cap_left=0.25)\n 0.35只截到时间戳,用户消息被切;0.25覆盖消息文字区域\n\n2. 知识库返回全文→只返回匹配问答段\n 原问题:名字.txt含2个Q&A,TF-IDF整文件匹配后返回全文\n 该方案:knowledge_base._parse_qa_segments解析文件为独立问答段\n 每段作为独立doc,auto_reply._get_answer优先返回doc.answer\n 用户问一句话,只回复对应答句,不塞全部内容
2026-07-26 13:38:04 +08:00
youpaishidifu
af3b730106
修复过滤过宽+裁剪范围
...
1. _is_system_message 中系统模式匹配从 in 改为 startswith
否则 OCR 捕获的多行合一文本只要包含答:就被整行丢弃
用户消息你叫啥名字啊?混在文本里一起被杀
2. cap_left 从 25% → 35%
25% 覆盖到联系人列表,OCR 读出多面板混合文本
35% 从会话列表偏右到消息面板,减少噪声
3. 保留上轮加的前台切换和 debug 日志
2026-07-26 13:25:21 +08:00
youpaishidifu
c9acd7e039
加OCR原始行日志定位过滤空白原因
...
- filter前用logger.info输出ocr_lines原始内容
- 配合ocr_debug_*.png截图对比,立即知道OCR读到了什么但被哪个filter吃掉
2026-07-26 12:58:29 +08:00
youpaishidifu
6c22b0de5d
修复OCR两个过宽过滤导致真消息被丢弃
...
1. 纯中文1-15字符正则(第637行)→ 改为仅过滤单字符
原正则让"你好""你是谁"等真消息全被跳过
2. _is_system_message中"问题"和"回答"子串匹配
用户说"我有一个问题"也会误杀,删掉,"答:"已够用
2026-07-26 12:37:21 +08:00
youpaishidifu
5de25211a1
OCR左边界30%→25%加大跨度
2026-07-26 12:29:51 +08:00
youpaishidifu
3f14573758
OCR左边界33%→30%继续左移微调
2026-07-26 12:24:42 +08:00
youpaishidifu
3f76bcb7e1
OCR左边界40%→33%继续左移避开自身消息\n\n- cap_left 从 0.40 降到 0.33,幅度更大\n- 目标:只捕获左侧他人消息区域
2026-07-26 12:05:33 +08:00
youpaishidifu
ac833664ab
OCR截屏前切QQ前台+左边界调到40%
...
- 截屏前调用 _ensure_foreground 确保 QQ 在最前,避免 CMD 窗口遮挡截入 OCR
- cap_left 从 45% → 40%,进一步左移捕获消息正文
2026-07-26 11:58:49 +08:00
youpaishidifu
d07cb59cff
OCR裁剪左边界从55%调到45%捕获消息正文而非时间戳
...
- cap_left 从 55% → 45%,消息文字在消息面板左侧
- 右边界保持 95%,裁剪宽度从 40% 增至 50%
- 注释更新说明
2026-07-26 11:31:29 +08:00
youpaishidifu
f0b221f570
OCR截屏保存到根目录用于调试排错
...
- OCR截取后立即保存图片到程序根目录 (ocr_debug_时间戳.png)
- 自动清理旧文件,仅保留最近20张
- 防止截错区域无法肉眼核实
2026-07-26 11:21:20 +08:00
youpaishidifu
acbadb95a7
修复重复处理:加模糊匹配去重兜底
...
OCR输出每次微小差异(勖彐碎片/行首数字/尾部截断)导致精确去重永远命中不了。
新增 _fuzzy_duplicate 用 difflib.SequenceMatcher.quick_ratio 做相似度去重(阈值0.72),
长度差距>40%直接跳过(quick_ratio上界<阈值)。精确匹配+模糊匹配双重兜底。
2026-07-26 00:45:15 +08:00
youpaishidifu
3da156b916
修复: 删除已移除方法 _read_via_clipboard 的残留调用
2026-07-26 00:25:56 +08:00
youpaishidifu
bb85dbdfb1
修复重复处理:OCR去噪 + 剪贴板/读取前台唤醒增强
...
1. OCR去噪:去掉行首未读红点数字(0)和行尾删除按钮误识别(勖彐),
同一消息OCR输出稳定,精确去重得以命中,不再重复触发回复
2. 剪贴板垃圾过滤:复用_is_ocr_console_garbage丢弃终端/Python内容,
解决剪贴板误读控制台输出当消息的问题
3. _ensure_foreground新增AllowSetForegroundWindow(-1),
读取路径前台唤醒与发送路径一致,减少误复制
2026-07-26 00:12:25 +08:00
youpaishidifu
f90e3fbaaf
OCR 终极防御:进程验证+最小化检测+垃圾内容过滤
...
QQ 被杀/最小化后 OCR 截到终端窗口导致死循环回复。
三重防御:
1. _validate_qq_window() — IsWindowVisible+IsIconic+进程名(QT/TIM.exe)验证
2. _is_ocr_console_garbage() — 内容级检测:Python模块名/脚本路径/日志关键词/无中文长文本
3. 连续3次无效自动清缓存清PID防死循环
新增 _cached_pid 字典,与 _cached_hwnd 同步生命周期
2026-07-25 23:30:37 +08:00
youpaishidifu
85b790cb81
修QQ:raw_lines作用域bug+UIA优先生成窗口+剪贴板行数检测
2026-07-25 21:39:23 +08:00
youpaishidifu
3da88da267
补完QQ实时消息:修force_scroll_bottom传参+前台retries=5+UIA兜底前刷新
2026-07-25 20:09:24 +08:00
youpaishidifu
0a8c861603
修TIM剪贴板死循环:_replied_texts永久集+UIA优先+剪贴板行预过滤
2026-07-25 18:19:16 +08:00
youpaishidifu
a4b6f05a80
修QQ只读历史消息:剪贴板优先+安全键盘导航Enter+Ctrl+End+前景守卫
2026-07-25 17:38:28 +08:00
youpaishidifu
9cd1e607aa
修TIM全局keybd_event误杀:删Esc键盘导航+PostMessage替代+恢复UIA多层读取
2026-07-25 17:21:16 +08:00
youpaishidifu
7529825357
修QQ读不到消息:恢复键盘导航Esc→Esc→Enter不切会话
2026-07-25 17:09:19 +08:00
youpaishidifu
0927603fc3
修死循环:全局去重+取消QQ键盘导航切会话+过滤系统消息
2026-07-25 16:58:09 +08:00
youpaishidifu
6a96111db6
修复QQ读不到消息+微信前台判定失败(窗口在前台仍报错)\n\n问题1: QQ(TIM)读不到消息\n 根因: _focus_message_area在窗口未前置前SendKeys({Esc})发给错误窗口\n 然后_read_via_clipboard_once只用{Esc}未能聚焦消息显示区\n TIM中{Esc}只退出搜索到会话列表,非消息区域\n 修复: 删_focus_message_area(整个方法窗口未前置时无意义)\n _read_via_clipboard_once中TIM路径改为:\n {Esc}{Esc}退出搜索→{Down}选中对话→{Enter}打开(加载消息区)\n 此时Ctrl+A选中消息内容而非会话列表\n\n问题2: 微信已前置仍报目标窗口不在前台\n 根因: _cached_hwnd存储UIA NativeWindowHandle(可能是子窗口句柄)\n 而GetForegroundWindow()返回顶层窗口句柄→hwnd不匹配\n 修复: _ensure_hwnd存储时加GetAncestor(hwnd,GA_ROOT)确保存顶层句柄\n _ensure_foreground改用root_hwnd判断\n 加SwitchToThisWindow fallback(权限要求比SetForegroundWindow低)\n \n其他: .gitignore加tim_dump.txt
2026-07-25 15:02:26 +08:00
youpaishidifu
0322e2af64
修复QQ抓联系人列表+微信自动回复错发给QQ+重复处理\n\n问题1: QQ/TIM抓会话列表而非消息\n 根因: _click_message_area单次点击(width*0.88)落在联系人/群列表\n 而非消息显示区,导致Ctrl+A复制联系人名而非消息内容\n 修复: _focus_message_area两次SendMessage点击\n 先点会话列表(左15%)选对话→再点消息区(中右60%)聚焦消息\n + Esc前导键退出搜索模式\n\n问题2: 微信自动回复发给QQ\n 根因: _attach_set_foreground静默失败不返回结果\n SendKeys输入到当前前台窗口(QQ)\n 修复: _ensure_foreground使用GetForegroundWindow验证\n 确认目标窗口真正在前台,失败则return False放弃发送\n + 处理托盘/最小化窗口(ShowWindow SW_SHOWNORMAL)\n\n问题3: 重复处理同1条消息\n 根因: QQ每次读到不同联系人名=不同新消息=反复触发\n 修复: ①聚焦消息区后读到稳定消息内容 ②_sending_event锁\n 自动回复发送期间阻止监控轮询,避免焦点被抢\n\n其他: _ensure_hwnd检测QQ NT vs TIM变体\n 用于选择UIA优先或剪贴板优先策略
2026-07-25 14:37:54 +08:00
youpaishidifu
cb170d1160
修复知识库短查询不匹配+QQ消息抓不到
...
问题1: 你叫啥名字→分词["你","叫","啥","名字"]
→ len(t)>=2过滤只剩["名字"]→len(tokens)<=1直接返回空
修复: 放宽过滤 len(tokens)<=1→len(tokens)==0且len>=2
添加子串匹配回退: TF-IDF无结果时检查查询是否包含在文档中
问题2: QQ消息抓不到
_read_via_clipboard 加重试机制(首次空自动重试1次)
_read_win32_texts 降低文本长度过滤 4→2 字
QQ路径加 _click_message_area 确保焦点在消息区
2026-07-25 13:56:09 +08:00
youpaishidifu
95b4c8a136
修复PeekMessage找不到+线程未启动就join导致程序崩溃\n\n问题1: ctypes.windll.user32.PeekMessage 在64位Windows上\n 函数名为PeekMessageW(A/W后缀必须带),PeekMessage找不到\n 且消息队列应在daemon线程(调用SetForegroundWindow的线程)创建\n 而非主线程. 移到_run_loop内+改PeekMessageW\n\n问题2: start()在PeekMessage崩溃,self._thread未.start()\n stop()调join()→RuntimeError: cannot join thread before started\n 窗口无法关闭,必须Ctrl+C强杀\n 修复: stop()加is_alive()判断再join
2026-07-25 13:21:23 +08:00