From 991115814b31d7d84414bd0ad1cb271361bc67f5 Mon Sep 17 00:00:00 2001 From: UnCLAS-Prommer Date: Thu, 31 Jul 2025 19:14:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=A7=E5=B0=8F=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E6=96=87=E4=BB=B6=E8=BF=87=E5=A4=A7=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=B6=85=E6=97=B6=E6=97=B6=E9=95=BF=E9=98=B2=E7=82=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- pyproject.toml | 2 +- src/response_pool.py | 18 +++++++++--------- src/utils.py | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/main.py b/main.py index 07b3002..64d8c32 100644 --- a/main.py +++ b/main.py @@ -52,7 +52,7 @@ async def main(): async def napcat_server(): logger.info("正在启动adapter...") - async with Server.serve(message_recv, global_config.napcat_server.host, global_config.napcat_server.port) as server: + async with Server.serve(message_recv, global_config.napcat_server.host, global_config.napcat_server.port, max_size=2**26) as server: logger.info( f"Adapter已启动,监听地址: ws://{global_config.napcat_server.host}:{global_config.napcat_server.port}" ) diff --git a/pyproject.toml b/pyproject.toml index e4abfd0..42e56eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "MaiBotNapcatAdapter" -version = "0.4.6" +version = "0.4.7" description = "A MaiBot adapter for Napcat" [tool.ruff] diff --git a/src/response_pool.py b/src/response_pool.py index c41ed7f..41feb9e 100644 --- a/src/response_pool.py +++ b/src/response_pool.py @@ -8,19 +8,19 @@ response_dict: Dict = {} response_time_dict: Dict = {} -async def get_response(request_id: str) -> dict: - retry_count = 0 - max_retries = 50 # 10秒超时 - while request_id not in response_dict: - retry_count += 1 - if retry_count >= max_retries: - raise TimeoutError(f"请求超时,未收到响应,request_id: {request_id}") - await asyncio.sleep(0.2) - response = response_dict.pop(request_id) +async def get_response(request_id: str, timeout: int = 10) -> dict: + response = await asyncio.wait_for(_get_response(request_id), timeout) _ = response_time_dict.pop(request_id) logger.trace(f"响应信息id: {request_id} 已从响应字典中取出") return response +async def _get_response(request_id: str) -> dict: + """ + 内部使用的获取响应函数,主要用于在需要时获取响应 + """ + while request_id not in response_dict: + await asyncio.sleep(0.2) + return response_dict.pop(request_id) async def put_response(response: dict): echo_id = response.get("echo") diff --git a/src/utils.py b/src/utils.py index 6e07da4..78b0d0c 100644 --- a/src/utils.py +++ b/src/utils.py @@ -208,7 +208,7 @@ async def get_message_detail(websocket: Server.ServerConnection, message_id: Uni payload = json.dumps({"action": "get_msg", "params": {"message_id": message_id}, "echo": request_uuid}) try: await websocket.send(payload) - response: dict = await get_response(request_uuid) + response: dict = await get_response(request_uuid, 30) # 增加超时时间到30秒 except TimeoutError: logger.error(f"获取消息详情超时,消息ID: {message_id}") return None @@ -242,7 +242,7 @@ async def get_record_detail( ) try: await websocket.send(payload) - response: dict = await get_response(request_uuid) + response: dict = await get_response(request_uuid, 30) # 增加超时时间到30秒 except TimeoutError: logger.error(f"获取语音消息详情超时,文件: {file}, 文件ID: {file_id}") return None