diff --git a/gateway/platforms/base.py b/gateway/platforms/base.py index db76034989..cfbe9b1b26 100644 --- a/gateway/platforms/base.py +++ b/gateway/platforms/base.py @@ -2440,6 +2440,9 @@ class BasePlatformAdapter(ABC): user_id_alt: Optional[str] = None, chat_id_alt: Optional[str] = None, is_bot: bool = False, + guild_id: Optional[str] = None, + parent_chat_id: Optional[str] = None, + message_id: Optional[str] = None, ) -> SessionSource: """Helper to build a SessionSource for this platform.""" # Normalize empty topic to None @@ -2457,6 +2460,9 @@ class BasePlatformAdapter(ABC): user_id_alt=user_id_alt, chat_id_alt=chat_id_alt, is_bot=is_bot, + guild_id=str(guild_id) if guild_id else None, + parent_chat_id=str(parent_chat_id) if parent_chat_id else None, + message_id=str(message_id) if message_id else None, ) @abstractmethod diff --git a/gateway/session.py b/gateway/session.py index db90d31217..7353785272 100644 --- a/gateway/session.py +++ b/gateway/session.py @@ -83,6 +83,9 @@ class SessionSource: user_id_alt: Optional[str] = None # Platform-specific stable alt ID (Signal UUID, Feishu union_id) chat_id_alt: Optional[str] = None # Signal group internal ID is_bot: bool = False # True when the message author is a bot/webhook (Discord) + guild_id: Optional[str] = None # Discord guild / Slack workspace / Matrix server scope + parent_chat_id: Optional[str] = None # Parent channel when chat_id refers to a thread + message_id: Optional[str] = None # ID of the triggering message (for pin/reply/react) @property def description(self) -> str: @@ -120,8 +123,14 @@ class SessionSource: d["user_id_alt"] = self.user_id_alt if self.chat_id_alt: d["chat_id_alt"] = self.chat_id_alt + if self.guild_id: + d["guild_id"] = self.guild_id + if self.parent_chat_id: + d["parent_chat_id"] = self.parent_chat_id + if self.message_id: + d["message_id"] = self.message_id return d - + @classmethod def from_dict(cls, data: Dict[str, Any]) -> "SessionSource": return cls( @@ -135,6 +144,9 @@ class SessionSource: chat_topic=data.get("chat_topic"), user_id_alt=data.get("user_id_alt"), chat_id_alt=data.get("chat_id_alt"), + guild_id=data.get("guild_id"), + parent_chat_id=data.get("parent_chat_id"), + message_id=data.get("message_id"), )