From d1fc743af92453007743531ceaf1446c627d0fd4 Mon Sep 17 00:00:00 2001 From: liuwei Date: Mon, 2 Feb 2026 10:43:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/gscore_client.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/utils/gscore_client.py b/utils/gscore_client.py index 082a39f..099cacc 100644 --- a/utils/gscore_client.py +++ b/utils/gscore_client.py @@ -27,18 +27,19 @@ class GsCoreClient: if self._ws is not None: return True try: - logger.info(f"[GsCoreClient] 正在连接早柚核心: {self._url}") + # 兼容性方案:如果 Header 传参报错,尝试将 token 附加在 URL 参数中 + # 格式变为: ws://ip:port/ws/abot?token=liuwei + connector_url = self._url + if "?" in connector_url: + connector_url += f"&token={self._token}" + else: + connector_url += f"?token={self._token}" - # 构造 Header - headers = { - "Authorization": f"Bearer {self._token}", - "Token": self._token - } + logger.info(f"[GsCoreClient] 正在尝试连接 (兼容模式): {connector_url}") - # 修复点:确保 extra_headers 正确传递 + # 去掉 extra_headers,避免触发底层 create_connection 的参数检查 self._ws = await websockets.connect( - self._url, - extra_headers=headers, + connector_url, max_size=10 ** 7 ) @@ -49,11 +50,10 @@ class GsCoreClient: loop = asyncio.get_running_loop() self._recv_task = loop.create_task(self._recv_loop()) - logger.success("[GsCoreClient] 连接成功且鉴权通过") + logger.success("[GsCoreClient] 连接成功") return True except Exception as e: - # 如果依然报错,可能是 websockets 版本过旧,建议升级: pip install --upgrade websockets - logger.error(f"[GsCoreClient] 连接或鉴权失败: {e}") + logger.error(f"[GsCoreClient] 连接失败: {e}") self._ws = None return False @@ -62,25 +62,22 @@ class GsCoreClient: try: if not self._ws: break - msg = await self._ws.recv() msg_str = msg.decode("utf-8") if isinstance(msg, bytes) else msg - try: payload = json.loads(msg_str) if self._message_handler: await self._message_handler(payload) except Exception as e: - logger.exception(f"[GsCoreClient] 解析核心返回失败: {e}") - + logger.exception(f"[GsCoreClient] 解析返回失败: {e}") except websockets.exceptions.ConnectionClosed as e: if not self._is_closing: - logger.warning(f"[GsCoreClient] WebSocket连接断开 ({e.code}),5秒后重连...") + logger.warning(f"[GsCoreClient] 连接断开 ({e.code}),5秒后重连...") break else: break except Exception as e: - logger.exception(f"[GsCoreClient] 接收消息异常: {e}") + logger.exception(f"[GsCoreClient] 接收异常: {e}") break await asyncio.sleep(0.1) @@ -94,6 +91,7 @@ class GsCoreClient: if not await self.connect(): return False try: + # 显式检查连接状态 await self._ws.send(message.encode("utf-8")) return True except (websockets.exceptions.ConnectionClosed, Exception) as e: