diff --git a/astrbot/core/platform/sources/gewechat/client.py b/astrbot/core/platform/sources/gewechat/client.py index 1c3b8bd0b..a9b9ebe3d 100644 --- a/astrbot/core/platform/sources/gewechat/client.py +++ b/astrbot/core/platform/sources/gewechat/client.py @@ -309,32 +309,47 @@ class SimpleGewechatClient: ) if self.appid: - online = await self.check_online(self.appid) - if online: - logger.info(f"APPID: {self.appid} 已在线") - return + try: + online = await self.check_online(self.appid) + if online: + logger.info(f"APPID: {self.appid} 已在线") + return + except Exception as e: + logger.error(f"检查在线状态失败: {e}") + sp.put(f"gewechat-appid-{self.nickname}", "") + self.appid = None payload = {"appId": self.appid} if self.appid: logger.info(f"使用 APPID: {self.appid}, {self.nickname}") - async with aiohttp.ClientSession() as session: - async with session.post( - f"{self.base_url}/login/getLoginQrCode", - headers=self.headers, - json=payload, - ) as resp: - json_blob = await resp.json() - if json_blob["ret"] != 200: - raise Exception(f"获取二维码失败: {json_blob}") - qr_data = json_blob["data"]["qrData"] - qr_uuid = json_blob["data"]["uuid"] - appid = json_blob["data"]["appId"] - logger.info(f"APPID: {appid}") - logger.warning( - f"请打开该网址,然后使用微信扫描二维码登录: https://api.cl2wm.cn/api/qrcode/code?text={qr_data}" - ) + try: + async with aiohttp.ClientSession() as session: + async with session.post( + f"{self.base_url}/login/getLoginQrCode", + headers=self.headers, + json=payload, + ) as resp: + json_blob = await resp.json() + if json_blob["ret"] != 200: + error_msg = json_blob.get("data", {}).get("msg", "") + if "设备不存在" in error_msg: + logger.error(f"检测到无效的appid: {self.appid},将清除并重新登录。") + sp.put(f"gewechat-appid-{self.nickname}", "") + self.appid = None + return await self.login() + else: + raise Exception(f"获取二维码失败: {json_blob}") + qr_data = json_blob["data"]["qrData"] + qr_uuid = json_blob["data"]["uuid"] + appid = json_blob["data"]["appId"] + logger.info(f"APPID: {appid}") + logger.warning( + f"请打开该网址,然后使用微信扫描二维码登录: https://api.cl2wm.cn/api/qrcode/code?text={qr_data}" + ) + except Exception as e: + raise e # 执行登录 retry_cnt = 64