From 3d532b2945c6ffb48889a1d939ecfee67e0e50fd Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Sat, 11 Oct 2025 23:13:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(napcat):=20=E4=BF=AE=E5=A4=8D=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E5=92=8C=E4=BA=8B=E4=BB=B6=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加对字节类型消息的解码处理,增强了与不同 WebSocket 实现的兼容性。 - 修复了在 `register_events` 中使用 `Enum` 成员而非其 `value` 进行注册的错误。 - 将 `_start_maibot_connection` 重命名为 `_start_mofox_bot_connection` 以匹配项目重命名。 - 使用 `setattr` 动态设置 `mofox_bot_router`,提高代码的灵活性。 --- .../built_in/napcat_adapter_plugin/plugin.py | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/plugins/built_in/napcat_adapter_plugin/plugin.py b/src/plugins/built_in/napcat_adapter_plugin/plugin.py index 88afc4e26..21013aa69 100644 --- a/src/plugins/built_in/napcat_adapter_plugin/plugin.py +++ b/src/plugins/built_in/napcat_adapter_plugin/plugin.py @@ -40,13 +40,23 @@ async def message_recv(server_connection: Server.ServerConnection): asyncio.create_task(notice_handler.set_server_connection(server_connection)) await send_handler.set_server_connection(server_connection) async for raw_message in server_connection: - # 只在debug模式下记录原始消息 - if logger.level <= 10: # DEBUG level - logger.debug(f"{raw_message[:1500]}..." if (len(raw_message) > 1500) else raw_message) - decoded_raw_message: dict = json.loads(raw_message) + message_str = "" try: - # 首先尝试解析原始消息 - decoded_raw_message: dict = json.loads(raw_message) + # 确保消息是字符串 + if isinstance(raw_message, bytes): + message_str = raw_message.decode('utf-8', errors='ignore') + elif isinstance(raw_message, str): + message_str = raw_message + else: + logger.warning(f"接收到未知类型的消息: {type(raw_message)}") + continue + + # 只在debug模式下记录原始消息 + if logger.level <= 10: # DEBUG level + logger.debug(f"{message_str[:1500]}..." if (len(message_str) > 1500) else message_str) + + # 解析消息 + decoded_raw_message: dict = json.loads(message_str) # 检查是否是切片消息 (来自 MMC) if chunker.is_chunk_message(decoded_raw_message): @@ -71,10 +81,10 @@ async def message_recv(server_connection: Server.ServerConnection): except json.JSONDecodeError as e: logger.error(f"消息解析失败: {e}") - logger.debug(f"原始消息: {raw_message[:500]}...") + logger.debug(f"原始消息: {message_str[:500]}...") except Exception as e: logger.error(f"处理消息时出错: {e}") - logger.debug(f"原始消息: {raw_message[:500]}...") + logger.debug(f"原始消息: {message_str[:500]}...") async def message_process(): @@ -229,7 +239,7 @@ class LauchNapcatAdapterHandler(BaseEventHandler): logger.info("开始启动Napcat Adapter") # 创建单独的异步任务,防止阻塞主线程 - asyncio.create_task(self._start_maibot_connection()) + asyncio.create_task(self._start_mofox_bot_connection()) asyncio.create_task(napcat_server(self.plugin_config)) asyncio.create_task(message_process()) asyncio.create_task(check_timeout_response()) @@ -246,7 +256,7 @@ class LauchNapcatAdapterHandler(BaseEventHandler): try: logger.info(f"尝试连接MoFox-Bot (第{attempt + 1}次)") await mmc_start_com(self.plugin_config) - message_send_instance.mofox_bot_router = router + setattr(message_send_instance, 'mofox_bot_router', router) logger.info("MoFox-Bot router连接已建立") return except Exception as e: @@ -404,16 +414,16 @@ class NapcatAdapterPlugin(BasePlugin): def register_events(self): # 注册事件 for e in event_types.NapcatEvent.ON_RECEIVED: - event_manager.register_event(e, allowed_triggers=[self.plugin_name]) + event_manager.register_event(e.value, allowed_triggers=[self.plugin_name]) for e in event_types.NapcatEvent.ACCOUNT: - event_manager.register_event(e, allowed_subscribers=[f"{e.value}_handler"]) + event_manager.register_event(e.value, allowed_subscribers=[f"{e.value}_handler"]) for e in event_types.NapcatEvent.GROUP: - event_manager.register_event(e, allowed_subscribers=[f"{e.value}_handler"]) + event_manager.register_event(e.value, allowed_subscribers=[f"{e.value}_handler"]) for e in event_types.NapcatEvent.MESSAGE: - event_manager.register_event(e, allowed_subscribers=[f"{e.value}_handler"]) + event_manager.register_event(e.value, allowed_subscribers=[f"{e.value}_handler"]) def get_plugin_components(self): self.register_events()