MaiBot-Napcat-Adapter/src/message_queue.py

44 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import asyncio
import time
from typing import Dict
from .config import global_config
from .logger import logger
response_dict: Dict = {}
response_time_dict: Dict = {}
message_queue = asyncio.Queue()
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)
_ = response_time_dict.pop(request_id)
return response
async def put_response(response: dict):
echo_id = response.get("echo")
now_time = time.time()
response_dict[echo_id] = response
response_time_dict[echo_id] = now_time
async def check_timeout_response() -> None:
while True:
cleaned_message_count: int = 0
now_time = time.time()
for echo_id, response_time in list(response_time_dict.items()):
if now_time - response_time > global_config.napcat_heartbeat_interval:
cleaned_message_count += 1
response_dict.pop(echo_id)
response_time_dict.pop(echo_id)
logger.warning(f"响应消息 {echo_id} 超时,已删除")
logger.info(f"已删除 {cleaned_message_count} 条超时响应消息")
await asyncio.sleep(global_config.napcat_heartbeat_interval)