From 3bddce6118f7e3a3e1459eeca963a98e214b5fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E7=A8=8B?= Date: Mon, 23 Mar 2026 22:07:18 +0800 Subject: [PATCH] fix: preserve inbound qqofficial msg anchor for proactive sends --- .../qqofficial/qqofficial_platform_adapter.py | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py b/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py index 7e31536a16..28661e85b4 100644 --- a/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +++ b/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py @@ -131,7 +131,8 @@ def __init__( self.client.set_platform(self) - self._session_last_message_id: dict[str, str] = {} + self._session_last_inbound_message_id: dict[str, str] = {} + self._session_last_outbound_message_id: dict[str, str] = {} self._session_scene: dict[str, str] = {} self.test_mode = os.environ.get("TEST_MODE", "off") == "on" @@ -167,10 +168,10 @@ async def _send_by_session_common( ): return - msg_id = self._session_last_message_id.get(session.session_id) + msg_id = self._session_last_inbound_message_id.get(session.session_id) if not msg_id: logger.warning( - "[QQOfficial] No cached msg_id for session: %s, skip send_by_session", + "[QQOfficial] No cached inbound msg_id for session: %s, skip send_by_session", session.session_id, ) return @@ -298,13 +299,25 @@ async def _send_by_session_common( sent_message_id = self._extract_message_id(ret) if sent_message_id: - self.remember_session_message_id(session.session_id, sent_message_id) + self.remember_session_sent_message_id(session.session_id, sent_message_id) await super().send_by_session(session, message_chain) + def remember_session_inbound_message_id( + self, session_id: str, message_id: str + ) -> None: + if not session_id or not message_id: + return + self._session_last_inbound_message_id[session_id] = message_id + def remember_session_message_id(self, session_id: str, message_id: str) -> None: + self.remember_session_inbound_message_id(session_id, message_id) + + def remember_session_sent_message_id( + self, session_id: str, message_id: str + ) -> None: if not session_id or not message_id: return - self._session_last_message_id[session_id] = message_id + self._session_last_outbound_message_id[session_id] = message_id def remember_session_scene(self, session_id: str, scene: str) -> None: if not session_id or not scene: