From 7988e1bf95ffe99fcc817ba870abbb3a1b0344d3 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 15 Jan 2026 22:11:08 +0800 Subject: [PATCH 1/3] fix: unique session not working --- astrbot/core/pipeline/waking_check/stage.py | 2 +- astrbot/core/platform/astr_message_event.py | 32 +++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/astrbot/core/pipeline/waking_check/stage.py b/astrbot/core/pipeline/waking_check/stage.py index 50599e818..e6716b37f 100644 --- a/astrbot/core/pipeline/waking_check/stage.py +++ b/astrbot/core/pipeline/waking_check/stage.py @@ -81,7 +81,7 @@ async def process( if self.unique_session and event.message_obj.type == MessageType.GROUP_MESSAGE: sid = build_unique_session_id(event) if sid: - event.session_id = sid + event.session.session_id = sid # ignore bot self message if ( diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index f6eda07a9..7c450ccad 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -42,8 +42,6 @@ def __init__( """消息对象, AstrBotMessage。带有完整的消息结构。""" self.platform_meta = platform_meta """消息平台的信息, 其中 name 是平台的类型,如 aiocqhttp""" - self.session_id = session_id - """用户的会话 ID。可以直接使用下面的 unified_msg_origin""" self.role = "member" """用户是否是管理员。如果是管理员,这里是 admin""" self.is_wake = False @@ -56,7 +54,7 @@ def __init__( message_type=message_obj.type, session_id=session_id, ) - self.unified_msg_origin = str(self.session) + # self.unified_msg_origin = str(self.session) """统一的消息来源字符串。格式为 platform_name:message_type:session_id""" self._result: MessageEventResult | None = None """消息事件的结果""" @@ -72,6 +70,34 @@ def __init__( # back_compability self.platform = platform_meta + @property + def unified_msg_origin(self) -> str: + """统一的消息来源字符串。格式为 platform_name:message_type:session_id""" + return str(self.session) + + @unified_msg_origin.setter + def unified_msg_origin(self, value: str): + """设置统一的消息来源字符串。格式为 platform_name:message_type:session_id""" + parts = value.split(":") + if len(parts) != 3: + raise ValueError( + "unified_msg_origin 格式错误,应该为 platform_name:message_type:session_id", + ) + platform_name, message_type_str, session_id = parts + self.session.platform_name = platform_name + self.session.message_type = MessageType(message_type_str) + self.session.session_id = session_id + + @property + def session_id(self) -> str: + """用户的会话 ID。可以直接使用下面的 unified_msg_origin""" + return self.session.session_id + + @session_id.setter + def session_id(self, value: str): + """设置用户的会话 ID。可以直接使用下面的 unified_msg_origin""" + self.session.session_id = value + def get_platform_name(self): """获取这个事件所属的平台的类型(如 aiocqhttp, slack, discord 等)。 From 548be49cc5c7f267a4b446454b70900dd6a80760 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 15 Jan 2026 22:13:48 +0800 Subject: [PATCH 2/3] fix: correct session initialization and update unified_msg_origin setter --- astrbot/core/platform/astr_message_event.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 7c450ccad..9c0418be8 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -49,7 +49,7 @@ def __init__( self.is_at_or_wake_command = False """是否是 At 机器人或者带有唤醒词或者是私聊(插件注册的事件监听器会让 is_wake 设为 True, 但是不会让这个属性置为 True)""" self._extras: dict[str, Any] = {} - self.session = MessageSesion( + self.session = MessageSession( platform_name=platform_meta.id, message_type=message_obj.type, session_id=session_id, @@ -78,15 +78,8 @@ def unified_msg_origin(self) -> str: @unified_msg_origin.setter def unified_msg_origin(self, value: str): """设置统一的消息来源字符串。格式为 platform_name:message_type:session_id""" - parts = value.split(":") - if len(parts) != 3: - raise ValueError( - "unified_msg_origin 格式错误,应该为 platform_name:message_type:session_id", - ) - platform_name, message_type_str, session_id = parts - self.session.platform_name = platform_name - self.session.message_type = MessageType(message_type_str) - self.session.session_id = session_id + self.new_session = MessageSession.from_str(value) + self.session = self.new_session @property def session_id(self) -> str: From 18ae522dc8798f347ffb408f19148aae8e25f86a Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 15 Jan 2026 22:15:54 +0800 Subject: [PATCH 3/3] fix: update session ID assignment in WakingCheckStage --- astrbot/core/pipeline/waking_check/stage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astrbot/core/pipeline/waking_check/stage.py b/astrbot/core/pipeline/waking_check/stage.py index e6716b37f..50599e818 100644 --- a/astrbot/core/pipeline/waking_check/stage.py +++ b/astrbot/core/pipeline/waking_check/stage.py @@ -81,7 +81,7 @@ async def process( if self.unique_session and event.message_obj.type == MessageType.GROUP_MESSAGE: sid = build_unique_session_id(event) if sid: - event.session.session_id = sid + event.session_id = sid # ignore bot self message if (