问题概述
微信前端在已保存的 iLink bot token 过期后,可能会进入异常状态。
当前 frontends/wechatapp.py 在 getupdates 返回 errcode == -14、errmsg == session timeout 时,只清空 updates_buf,然后继续使用同一个已经失效的 bot_token 轮询。
如果该进程由启动脚本或守护进程拉起,还可能在缺少有效凭据时进入二维码登录流程,从后台进程反复打开二维码或图片窗口。
观察到的现象
- temp/wechatapp.log 持续输出:[getUpdates] err: -14 session timeout
- 进程仍然存活,守护进程会认为微信前端在线,但实际已经无法收发消息
- 后台启动缺少有效 token 时,可能触发 login_qr() 并打开二维码窗口
期望行为
- errcode == -14 应被视为认证失效,而不是普通 updates_buf/session 游标问题
- 认证失效时应清空 bot_token、ilink_bot_id、updates_buf,并让进程以非 0 状态退出
- run_loop 不应把认证失效吞进通用异常重试逻辑
- 二维码登录应只在交互式启动或显式参数下触发,例如 --login / --relogin
- 后台启动缺少凭据时应只写日志并退出,不应弹出 UI 窗口
建议修复
- 增加专门的 AuthExpired 异常路径
- getupdates 返回 -14 时清理本地 token 并抛出认证失效异常
- run_loop 对认证失效直接向外抛出
- main 入口中区分交互式登录和后台启动
- 缺少 token 的后台进程直接退出,并提示用户手动重新扫码
影响文件
问题概述
微信前端在已保存的 iLink bot token 过期后,可能会进入异常状态。
当前 frontends/wechatapp.py 在 getupdates 返回 errcode == -14、errmsg == session timeout 时,只清空 updates_buf,然后继续使用同一个已经失效的 bot_token 轮询。
如果该进程由启动脚本或守护进程拉起,还可能在缺少有效凭据时进入二维码登录流程,从后台进程反复打开二维码或图片窗口。
观察到的现象
期望行为
建议修复
影响文件