From 19d2aaed52b057069bbd5e5703c15d066ab5b343 Mon Sep 17 00:00:00 2001 From: tcmofashi Date: Sat, 29 Mar 2025 00:45:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=97=B6=E5=8D=A0=E7=94=A8=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 1 + src/plugins/message/api.py | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main.py b/src/main.py index b5338d94e..22cd22e15 100644 --- a/src/main.py +++ b/src/main.py @@ -109,6 +109,7 @@ class MainSystem: self.remove_recalled_message_task(), emoji_manager.start_periodic_check(), self.app.run(), + self.app.message_process(), ] await asyncio.gather(*tasks) diff --git a/src/plugins/message/api.py b/src/plugins/message/api.py index 03b6cee4f..988ec99c2 100644 --- a/src/plugins/message/api.py +++ b/src/plugins/message/api.py @@ -12,6 +12,7 @@ class BaseMessageAPI: self.host = host self.port = port self.message_handlers: List[Callable] = [] + self.cache = [] self._setup_routes() self._running = False @@ -20,12 +21,11 @@ class BaseMessageAPI: @self.app.post("/api/message") async def handle_message(message: Dict[str, Any]): - # try: - for handler in self.message_handlers: - await handler(message) - return {"status": "success"} - # except Exception as e: - # raise HTTPException(status_code=500, detail=str(e)) from e + try: + self.cache.append(message) + return {"status": "success"} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e def register_message_handler(self, handler: Callable): """注册消息处理函数""" @@ -41,6 +41,20 @@ class BaseMessageAPI: # logger.error(f"发送消息失败: {str(e)}") pass + async def message_process( + self, + ): + """启动消息处理""" + while True: + if len(self.cache) > 0: + for handler in self.message_handlers: + await handler(self.cache[0]) + self.cache.pop(0) + if len(self.cache) > 0: + await asyncio.sleep(0.1 / len(self.cache)) + else: + await asyncio.sleep(0.2) + def run_sync(self): """同步方式运行服务器""" uvicorn.run(self.app, host=self.host, port=self.port)