From f19f93931a9b4d00c4c8ff176a2d867f345724d0 Mon Sep 17 00:00:00 2001 From: hmo Date: Wed, 12 Aug 2026 16:14:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20wechat=20login=20status=20=E2=80=94=20lo?= =?UTF-8?q?gged=20in=20/=20message=20activity=20takes=20priority=20over=20?= =?UTF-8?q?stale=20QR=20text=20in=20docker=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gateway/scripts/dashboard.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gateway/scripts/dashboard.py b/gateway/scripts/dashboard.py index 2240861..7a04000 100644 --- a/gateway/scripts/dashboard.py +++ b/gateway/scripts/dashboard.py @@ -663,20 +663,32 @@ def _augment_wechat_status(entry): if last_logout: logout_dt = datetime.strptime(last_logout, "%Y-%m-%d %H:%M:%S") - # ═══ 新增: 检测"正在等待扫码"状态 ═══ - # 如果 docker 日志最近显示二维码, 说明未登录等待扫码, 优先判定 + # ═══ 检测"正在等待扫码"状态 ═══ + # 如果 docker 日志最近显示二维码, 说明可能未登录等待扫码。 + # 注意: docker 日志是追加的 — 登录成功后旧二维码文本仍在 5min 窗口内, + # 因此必须先确认"没有登录成功"再判定为等待扫码(登录成功是最高优先级)。 try: _dr = subprocess.run( ["docker", "logs", "wxBotWebhook", "--since", "5m"], capture_output=True, text=True, timeout=5 ) _dlogs = _dr.stdout + _dr.stderr + _logged_in = "logged in" in _dlogs + _has_msg = "Message:" in _dlogs _showing_qr = ("扫描以下二维码" in _dlogs) or ("Access the URL to login" in _dlogs) _login_err = _dlogs.count("loginCheck") >= 2 except Exception: + _logged_in = False + _has_msg = False _showing_qr = False _login_err = False - if _showing_qr or _login_err: + if _logged_in or _has_msg: + # 登录成功 / 正在收发消息 = 已登录(覆盖二维码残留文本的误判) + entry["login_ok"] = True + entry["status"] = "running" + entry["message"] = "已登录" + _done_flag = True + elif _showing_qr or _login_err: entry["login_ok"] = False entry["status"] = "logged_out" entry["message"] = "等待扫码登录" if _showing_qr else "会话失效(loginCheck错误)"