From 8b076a1c848102e0df2ae316ab62ce46cffb7fbe Mon Sep 17 00:00:00 2001 From: denmouv <116938282+denmouv@users.noreply.github.com> Date: Thu, 11 Jun 2026 22:14:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(weixin=5Foffacc):=20=E4=BF=AE=E5=A4=8D=20ac?= =?UTF-8?q?tive=5Fsend=5Fmode=20=E4=B8=8B=20buffer=20=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=B6=88=E6=81=AF=E4=B8=A2=E5=BC=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当 active_send_mode=True 时,handle_callback 在 L160 提前 return, 跳过了 user_buffer 的创建(L256),但 handle_msg 无条件要求 buffer 存在,导致所有用户消息在适配器层被静默丢弃。 修复:在 handle_msg 中按 active_send_mode 分叉,主动模式下直接 提交事件(message_out={} 在 send() 中不被访问,完全安全)。 Closes #6182 Closes #7566 --- .../weixin_offacc_adapter.py | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py b/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py index 8b646e43f3..a078f2f3c7 100644 --- a/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +++ b/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py @@ -508,12 +508,20 @@ async def convert_message( await self.handle_msg(abm) async def handle_msg(self, message: AstrBotMessage) -> None: - buffer = self.user_buffer.get(message.sender.user_id, None) - if buffer is None: - logger.critical( - f"用户消息未找到缓冲状态,无法处理消息: user={message.sender.user_id} message_id={message.message_id}" - ) - return + # 主动发送模式下不依赖被动回复的缓冲机制, + # 回复通过微信客服 API (client.message.send_text) 直接推送。 + if self.active_send_mode: + buffer = {} + else: + # 被动回复模式必须有缓冲状态来暂存 LLM 的异步回复, + # 以应对微信 5 秒响应期限。 + buffer = self.user_buffer.get(message.sender.user_id, None) + if buffer is None: + logger.critical( + f"用户消息未找到缓冲状态,无法处理消息: user={message.sender.user_id} message_id={message.message_id}" + ) + return + message_event = WeixinOfficialAccountPlatformEvent( message_str=message.message_str, message_obj=message,