Conversation
…的问题, 新增通过托盘图标唤醒隐藏的微信窗口 - 新增 _try_wake_and_retry_uia 方法,通过托盘图标点击激活微信窗口 - 解决微信隐藏到托盘时 Qt 辅助功能树不可访问问题 - 引入 activate_wechat_via_tray_icon 方法,使用 UIA 访问系统通知区域托盘图标 - 优化 bring_window_to_front 逻辑,支持窗口隐藏状态恢复显示 - 在 UIA 健康检查中调用唤醒方法,减少重启微信频率 - 保持兼容隐藏任务栏工具,提升无障碍辅助功能的稳定性
- 确保窗口在Win32层面隐藏以正确处理托盘图标toggle行为 - 增加托盘图标唤醒尝试次数和异常捕获,提升唤醒稳定性 - 唤醒后重新查找微信窗口句柄以处理新窗口创建情况 - 延长UIA健康检查重试次数和间隔,支持Qt恢复辅助功能树 - 防止窗口被错误激活到前台,避免干扰托盘唤醒流程 - 改进登录界面判定逻辑,确保自动点击“进入微信”按钮完成登录
- 新增 _purge_ghost_tray_icons 方法,模拟鼠标移动触发系统自动清理 - 在唤醒微信托盘图标前先调用幽灵图标清理,避免点击失效图标 - 优化 activate_wechat_via_tray_icon 函数,增加托盘图标触发的多种尝试方式 - 精确限制微信图标查找范围,避免匹配到任务栏按钮 - 清理主通知区域和溢出区的失效图标,提升托盘交互的稳定性
# Conflicts: # src/core/window.py
- 新增 MemberRegistry 类,实现群成员昵称与微信ID的注册表管理 - 支持从文件加载和保存群成员信息,支持模糊匹配昵称查找微信ID - WeChatGroupListener 监听器新增 member_registry 参数,支持发送者识别关联 - 新增解析消息Name属性的parse_message_name,提取发送者昵称和消息内容 - 实现消息事件MessageEvent增加sender_name和sender_wxid属性 - 增加多个示例脚本:群聊消息监听与发送者信息识别、群成员自动管理、OCR使用示例及OCR发送者识别测试 - 添加截图相关功能支持包括窗口区域截屏和PrintWindow全窗口静默截图 - 优化微信窗口查找逻辑,支持独立聊天窗口标题模糊匹配和排除主窗口干扰 - 整体提升微信群消息发送者识别准确度,解决UI自动化无法直接获取发送者微信ID问题
|
辛苦啦!我也尝试着写了一个方案来着,发现识别不够精准,然后想改用OCR,但是考虑到监听多个群的时候,OCR可能会成为识别的瓶颈,我先测试看看,感谢感谢 |
|
我测试了下确实是的,@的消息不回复了,我昨天光顾着测试识别这一块去了。 然后现在还有个问题就是如果搞个多群聊监听的情况下,在打开第一个群聊的独立窗口并且把该群的所有成员都注册到json中去之后,再开第二个群聊时会一直报“尝试通过原生托盘消息恢复微信窗口” 这个错(也不算是错,但是它会一直反复弹这个日志,其实主界面是弹出来了),也就是说只要有独立窗口存在时,再运行群聊监听程序去打开微信主窗口时现在会反复报这个日志。 |
是的,不过你说的第二种情况,我主分支上测试过三个群同时监听,没出现过这样的情况。 |
是的,主分支没有问题,可能是我这边改出问题了,留了BUG。 2333 |
|
了解了,可别熬夜了,身体是革命的本钱 |
嗯嗯,谢谢关心, 今天好好休息下。 |
- 启用自动回复及@判断,改善消息响应能力 - 修复窗口管理,避免操作主窗口时频繁触发托盘恢复循环 - 启动阶段先关闭所有独立窗口,确保主窗口操作稳定 - 统一读取群昵称,提升@消息识别准确性 - 优化群成员自动注册逻辑,校验成员数量一致性以防数据过期 - 新增确保主窗口可见方法,最小化所有独立窗口避免窗口隐藏问题 - 改进OCR发送者昵称识别算法,增加多种匹配与过滤策略 - 通过窗口坐标及OCR结果判断消息发送者,区分自己与他人消息 - OCR完成后若窗口原本最小化,恢复最小化状态防止界面异常 - 增强@消息内容归一化处理,提高@自身判断准确度 - 添加详细日志记录,便于调试发送者识别及窗口管理过程
- 将监听群聊从单个改为多个,支持同时监听多个群聊 - 优化群成员加载统计,显示所有群成员总数 - 调整窗口优先级评分,区分主窗口和独立窗口 - 关闭独立窗口后确保主窗口可见,避免界面隐藏问题 - 启动阶段批量注册所有群成员,提升初始化效率 - 批量打开多个独立窗口进行监听,改进多群处理逻辑 - 主窗口不可见时主动激活并等待UI完全加载,保证操作稳定 - 在打开新聊天窗口前确保主窗口可见,解决微信隐藏主窗口问题
- 采用 OCR 识别消息发送者昵称,结合 MemberRegistry 映射微信ID - 修正消息匹配算法,优先选择左侧候选,避免误判自己消息 - 修改昵称查找逻辑,按消息左右位置匹配昵称区域 - 发送者判定时延后“自己”判断,增强识别准确率 - 添加群聊监听示例,配置多个监听群组支持 - 调整监听器参数,默认关闭自动回复示例更清晰 - 新增使用说明,展示发送者识别和 AI 自动回复整合方法 - 更新 README 和技能文档,增加发送者识别的使用和注意事项详细说明
- 始终加载群昵称,确保 is_at_me 函数中能正确使用昵称判断@ - 去除群昵称两端空白,防止因空格导致匹配失败 - 支持识别半角 @ 和全角 @ 两种@符号形式 - 归一化消息内容中的不可见空格字符,提升匹配准确率 - 添加详细日志用于调试@消息匹配过程及字符编码情况
|
以上问题修复完毕。 |
- 为查找会话项添加滚动到顶部选项,确保置顶群聊可见 - 在打开独立窗口时增加异常捕获,避免部分群聊失败导致整体中断 - 增加群聊窗口间等待时间,减少微信资源竞争 - 扩展 _ensure_subwindow 方法,新增最大重试次数参数以支持多次尝试 - 提升refactor(messaging): 优化独立聊天窗口打开逻辑和会话列表滚动 - 新增_find_session_item函数中滚动到顶部的功能,确保置顶群聊可见 - 为独立窗口打开过程添加异常捕获,打开失败时继续尝试其他群 - 在打开独立窗口时增加窗口间等待时间,减少微信资源竞争 - _ensure_subwindow函数支持最大重试机制,增强打开独立窗口的健壮性 - 重试时关闭可能的残留窗口,避免冲突 - 延长等待独立窗口打开的超时时间,提高成功率 - 优化日志输出,增强调试信息的详细程度


啊~ 好累, 思考了很久,实现了很久,也测试了很久。
给群聊监听功能添加上识别发送者的昵称和微信id,以便能否区分不同的消息是谁发送的。
初衷是这样的,今天我把微信群聊监听机制接入自己的龙虾,那么问题来了,虽然可以自动回复群聊,但是其实就是单纯的使用配置的大模型的。然后呢,我就把每个微信群的聊天记录接入我的记忆系统,让微信监听到某位群友进行自动回复的时候可以先扫描之前的记忆,特别是他自己说过的话,这样可以更好的更有针对性的回复他(调侃他),会觉得很好玩,而且呢,这套系统也能够越用越让我的智能体更懂我的每个群,乃至于每一位群友,让它更像是我的数字分身,让它更了解我身边的人。
但是,问题来了,目前微信4.x在当前机制下,收到消息时无法获取到发送者是谁,那还谈何分类记忆,如何记忆哪句话是谁说的? 如何让它下次回复这位群友的时候搜索这位群友以前说过的话?所以就有了这次的提交。
效果实图:(初步实现肯定还有没发现的BUG,希望这一步能够抛砖引玉吧)

本次运行需要把requirements.txt新增的包安装上。 环境问题解决后直接运行listen_with_sender_info.py就可以测试。
用小号发消息:
用当前登录的账号发消息(会声明是 “自己”,且不需要记录自己的微信id):

啊,好困~ 晚安了。