fix: wechat login status — logged in / message activity takes priority over stale QR text in docker logs
This commit is contained in:
@@ -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错误)"
|
||||
|
||||
Reference in New Issue
Block a user