From c7bcc72b9821df3b9ad132d7a903a19adeda2d14 Mon Sep 17 00:00:00 2001 From: zhinianboke <115088296+zhinianboke@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:29:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Start.py | 16 ++++++++++++++-- XianyuAutoAsync.py | 24 ++++++++++++++++++++++++ cookie_manager.py | 12 +++++++++++- utils/xianyu_utils.py | 1 + 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/Start.py b/Start.py index f5021b2..fb29ce4 100644 --- a/Start.py +++ b/Start.py @@ -93,10 +93,22 @@ async def main(): continue try: - await manager._add_cookie_async(cid, val) - logger.info(f"启动数据库中的 Cookie 任务: {cid}") + # 直接启动任务,不重新保存到数据库 + from db_manager import db_manager + logger.info(f"正在获取Cookie详细信息: {cid}") + cookie_info = db_manager.get_cookie_details(cid) + user_id = cookie_info.get('user_id') if cookie_info else None + logger.info(f"Cookie详细信息获取成功: {cid}, user_id: {user_id}") + + logger.info(f"正在创建异步任务: {cid}") + task = loop.create_task(manager._run_xianyu(cid, val, user_id)) + manager.tasks[cid] = task + logger.info(f"启动数据库中的 Cookie 任务: {cid} (用户ID: {user_id})") + logger.info(f"任务已添加到管理器,当前任务数: {len(manager.tasks)}") except Exception as e: logger.error(f"启动 Cookie 任务失败: {cid}, {e}") + import traceback + logger.error(f"详细错误信息: {traceback.format_exc()}") # 2) 如果配置文件中有新的 Cookie,也加载它们 for entry in COOKIES_LIST: diff --git a/XianyuAutoAsync.py b/XianyuAutoAsync.py index 7ccc65c..109e3ca 100644 --- a/XianyuAutoAsync.py +++ b/XianyuAutoAsync.py @@ -55,17 +55,27 @@ class XianyuLive: def __init__(self, cookies_str=None, cookie_id: str = "default", user_id: int = None): """初始化闲鱼直播类""" + logger.info(f"【{cookie_id}】开始初始化XianyuLive...") + if not cookies_str: cookies_str = COOKIES_STR if not cookies_str: raise ValueError("未提供cookies,请在global_config.yml中配置COOKIES_STR或通过参数传入") + logger.info(f"【{cookie_id}】解析cookies...") self.cookies = trans_cookies(cookies_str) + logger.info(f"【{cookie_id}】cookies解析完成,包含字段: {list(self.cookies.keys())}") + self.cookie_id = cookie_id # 唯一账号标识 self.cookies_str = cookies_str # 保存原始cookie字符串 self.user_id = user_id # 保存用户ID,用于token刷新时保持正确的所有者关系 self.base_url = WEBSOCKET_URL + + if 'unb' not in self.cookies: + raise ValueError(f"【{cookie_id}】Cookie中缺少必需的'unb'字段,当前字段: {list(self.cookies.keys())}") + self.myid = self.cookies['unb'] + logger.info(f"【{cookie_id}】用户ID: {self.myid}") self.device_id = generate_device_id(self.myid) # 心跳相关配置 @@ -2161,7 +2171,10 @@ class XianyuLive: async def main(self): """主程序入口""" try: + logger.info(f"【{self.cookie_id}】开始启动XianyuLive主程序...") await self.create_session() # 创建session + logger.info(f"【{self.cookie_id}】Session创建完成,开始WebSocket连接循环...") + while True: try: # 检查账号是否启用 @@ -2173,17 +2186,28 @@ class XianyuLive: headers = WEBSOCKET_HEADERS.copy() headers['Cookie'] = self.cookies_str + logger.info(f"【{self.cookie_id}】准备建立WebSocket连接到: {self.base_url}") + logger.debug(f"【{self.cookie_id}】WebSocket headers: {headers}") + # 兼容不同版本的websockets库 async with await self._create_websocket_connection(headers) as websocket: + logger.info(f"【{self.cookie_id}】WebSocket连接建立成功!") self.ws = websocket + + logger.info(f"【{self.cookie_id}】开始初始化WebSocket连接...") await self.init(websocket) + logger.info(f"【{self.cookie_id}】WebSocket初始化完成!") # 启动心跳任务 + logger.info(f"【{self.cookie_id}】启动心跳任务...") self.heartbeat_task = asyncio.create_task(self.heartbeat_loop(websocket)) # 启动token刷新任务 + logger.info(f"【{self.cookie_id}】启动token刷新任务...") self.token_refresh_task = asyncio.create_task(self.token_refresh_loop()) + logger.info(f"【{self.cookie_id}】开始监听WebSocket消息...") + async for message in websocket: try: message_data = json.loads(message) diff --git a/cookie_manager.py b/cookie_manager.py index 32e3f4e..be721fb 100644 --- a/cookie_manager.py +++ b/cookie_manager.py @@ -53,14 +53,24 @@ class CookieManager: # ------------------------ 内部协程 ------------------------ async def _run_xianyu(self, cookie_id: str, cookie_value: str, user_id: int = None): """在事件循环中启动 XianyuLive.main""" - from XianyuAutoAsync import XianyuLive # 延迟导入,避免循环 + logger.info(f"【{cookie_id}】_run_xianyu方法开始执行...") + try: + logger.info(f"【{cookie_id}】正在导入XianyuLive...") + from XianyuAutoAsync import XianyuLive # 延迟导入,避免循环 + logger.info(f"【{cookie_id}】XianyuLive导入成功") + + logger.info(f"【{cookie_id}】开始创建XianyuLive实例...") + logger.info(f"【{cookie_id}】Cookie值长度: {len(cookie_value)}") live = XianyuLive(cookie_value, cookie_id=cookie_id, user_id=user_id) + logger.info(f"【{cookie_id}】XianyuLive实例创建成功,开始调用main()...") await live.main() except asyncio.CancelledError: logger.info(f"XianyuLive 任务已取消: {cookie_id}") except Exception as e: logger.error(f"XianyuLive 任务异常({cookie_id}): {e}") + import traceback + logger.error(f"详细错误信息: {traceback.format_exc()}") async def _add_cookie_async(self, cookie_id: str, cookie_value: str, user_id: int = None): if cookie_id in self.tasks: diff --git a/utils/xianyu_utils.py b/utils/xianyu_utils.py index e4fd075..7c971ed 100644 --- a/utils/xianyu_utils.py +++ b/utils/xianyu_utils.py @@ -9,6 +9,7 @@ import os from typing import Any, Dict, List import blackboxprotobuf +from loguru import logger subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") import execjs