From ca47144fd9d1361c396cbbbe90d16044cce59a79 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sun, 22 Jun 2025 16:39:21 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=B0=86=E4=BA=BA=E6=A0=BC?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=92=8Cremote=E8=AF=B7=E6=B1=82=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=BC=82=E6=AD=A5=EF=BC=8C=E4=B8=8D=E9=98=BB=E5=A1=9E?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E4=B8=BB=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/remote.py | 118 +++++++++++++++-------------- src/individuality/individuality.py | 3 +- 2 files changed, 64 insertions(+), 57 deletions(-) diff --git a/src/common/remote.py b/src/common/remote.py index 197f8d3fa..d6894ed14 100644 --- a/src/common/remote.py +++ b/src/common/remote.py @@ -1,9 +1,10 @@ import asyncio -import requests +import aiohttp import platform from src.common.logger import get_logger +from src.common.tcp_connector import get_tcp_connector from src.config.config import global_config from src.manager.async_task_manager import AsyncTask from src.manager.local_store_manager import local_storage @@ -64,34 +65,36 @@ class TelemetryHeartBeatTask(AsyncTask): logger.info("正在向遥测服务端请求UUID...") try: - response = requests.post( - f"{TELEMETRY_SERVER_URL}/stat/reg_client", - json={"deploy_time": local_storage["deploy_time"]}, - timeout=5, # 设置超时时间为5秒 - ) + async with aiohttp.ClientSession(connector=await get_tcp_connector()) as session: + async with session.post( + f"{TELEMETRY_SERVER_URL}/stat/reg_client", + json={"deploy_time": local_storage["deploy_time"]}, + timeout=aiohttp.ClientTimeout(total=5), # 设置超时时间为5秒 + ) as response: + logger.debug(f"{TELEMETRY_SERVER_URL}/stat/reg_client") + logger.debug(local_storage["deploy_time"]) + logger.debug(f"Response status: {response.status}") + + if response.status == 200: + data = await response.json() + if client_id := data.get("mmc_uuid"): + # 将UUID存储到本地 + local_storage["mmc_uuid"] = client_id + self.client_uuid = client_id + logger.info(f"成功获取UUID: {self.client_uuid}") + return True # 成功获取UUID,返回True + else: + logger.error("无效的服务端响应") + else: + response_text = await response.text() + logger.error( + f"请求UUID失败,不过你还是可以正常使用麦麦,状态码: {response.status}, 响应内容: {response_text}" + ) except Exception as e: - logger.warning(f"请求UUID出错,不过你还是可以正常使用麦麦: {e}") # 可能是网络问题 - - logger.debug(f"{TELEMETRY_SERVER_URL}/stat/reg_client") - - logger.debug(local_storage["deploy_time"]) - - logger.debug(response) - - if response.status_code == 200: - data = response.json() - if client_id := data.get("mmc_uuid"): - # 将UUID存储到本地 - local_storage["mmc_uuid"] = client_id - self.client_uuid = client_id - logger.info(f"成功获取UUID: {self.client_uuid}") - return True # 成功获取UUID,返回True - else: - logger.error("无效的服务端响应") - else: - logger.error( - f"请求UUID失败,不过你还是可以正常使用麦麦,状态码: {response.status_code}, 响应内容: {response.text}" - ) + import traceback + error_msg = str(e) if str(e) else "未知错误" + logger.warning(f"请求UUID出错,不过你还是可以正常使用麦麦: {type(e).__name__}: {error_msg}") # 可能是网络问题 + logger.debug(f"完整错误信息: {traceback.format_exc()}") # 请求失败,重试次数+1 try_count += 1 @@ -112,38 +115,41 @@ class TelemetryHeartBeatTask(AsyncTask): } logger.debug(f"正在发送心跳到服务器: {self.server_url}") - logger.debug(headers) try: - response = requests.post( - f"{self.server_url}/stat/client_heartbeat", - headers=headers, - json=self.info_dict, - timeout=5, # 设置超时时间为5秒 - ) + async with aiohttp.ClientSession(connector=await get_tcp_connector()) as session: + async with session.post( + f"{self.server_url}/stat/client_heartbeat", + headers=headers, + json=self.info_dict, + timeout=aiohttp.ClientTimeout(total=5), # 设置超时时间为5秒 + ) as response: + logger.debug(f"Response status: {response.status}") + + # 处理响应 + if 200 <= response.status < 300: + # 成功 + logger.debug(f"心跳发送成功,状态码: {response.status}") + elif response.status == 403: + # 403 Forbidden + logger.warning( + "(此消息不会影响正常使用)心跳发送失败,403 Forbidden: 可能是UUID无效或未注册。" + "处理措施:重置UUID,下次发送心跳时将尝试重新注册。" + ) + self.client_uuid = None + del local_storage["mmc_uuid"] # 删除本地存储的UUID + else: + # 其他错误 + response_text = await response.text() + logger.warning( + f"(此消息不会影响正常使用)状态未发送,状态码: {response.status}, 响应内容: {response_text}" + ) except Exception as e: - logger.warning(f"(此消息不会影响正常使用)状态未发生: {e}") - - logger.debug(response) - - # 处理响应 - if 200 <= response.status_code < 300: - # 成功 - logger.debug(f"心跳发送成功,状态码: {response.status_code}") - elif response.status_code == 403: - # 403 Forbidden - logger.warning( - "(此消息不会影响正常使用)心跳发送失败,403 Forbidden: 可能是UUID无效或未注册。" - "处理措施:重置UUID,下次发送心跳时将尝试重新注册。" - ) - self.client_uuid = None - del local_storage["mmc_uuid"] # 删除本地存储的UUID - else: - # 其他错误 - logger.warning( - f"(此消息不会影响正常使用)状态未发送,状态码: {response.status_code}, 响应内容: {response.text}" - ) + import traceback + error_msg = str(e) if str(e) else "未知错误" + logger.warning(f"(此消息不会影响正常使用)状态未发生: {type(e).__name__}: {error_msg}") + logger.debug(f"完整错误信息: {traceback.format_exc()}") async def run(self): # 发送心跳 diff --git a/src/individuality/individuality.py b/src/individuality/individuality.py index 843e9e591..a3174e76a 100644 --- a/src/individuality/individuality.py +++ b/src/individuality/individuality.py @@ -1,4 +1,5 @@ from typing import Optional +import asyncio from .personality import Personality from .identity import Identity from .expression_style import PersonalityExpression @@ -86,7 +87,7 @@ class Individuality: ) logger.info("已将完整人设更新到bot的impression中") - await self.express_style.extract_and_store_personality_expressions() + asyncio.create_task(self.express_style.extract_and_store_personality_expressions()) def to_dict(self) -> dict: """将个体特征转换为字典格式"""