ForcePilot/backend/package/yuxi/channel/extensions/matrix/dm_tracker.py
Kris 4e9c6dd8ab feat(channel): 添加 Matrix 渠道扩展
新增 Matrix 渠道扩展,支持在 Yuxi 平台中集成 Matrix 去中心化通讯协议。

包含以下功能模块:
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- outbound: 外发消息管理
- streaming: 流式消息处理
- pairing: 用户配对与绑定
- security: 安全校验
- crypto: 端到端加密
- dedupe: 消息去重
- monitor: 渠道状态监控
- status: 会话状态管理
- session: 会话管理
- room_resolver: 房间解析
- dm_tracker: 私聊追踪
- rate_limiter: 速率限制
- actions: 动作处理
- constants: 常量定义
- utils: 工具函数
- types: 类型定义
2026-05-21 11:18:13 +08:00

47 lines
1.5 KiB
Python

from __future__ import annotations
import logging
logger = logging.getLogger(__name__)
class DmTracker:
def __init__(self):
self._direct_map: dict[str, str] = {}
self._dm_rooms: set[str] = set()
def is_direct_room(self, room_id: str) -> bool:
return room_id in self._dm_rooms
def get_dm_user(self, room_id: str) -> str | None:
return self._direct_map.get(room_id)
def add_direct_room(self, room_id: str, user_id: str) -> None:
self._dm_rooms.add(room_id)
self._direct_map[room_id] = user_id
def remove_direct_room(self, room_id: str) -> None:
self._dm_rooms.discard(room_id)
self._direct_map.pop(room_id, None)
def load_from_account_data(self, m_direct: dict[str, list[str]]) -> None:
for user_id, room_ids in m_direct.items():
for room_id in room_ids:
self._dm_rooms.add(room_id)
self._direct_map[room_id] = user_id
logger.debug("Loaded %d DM rooms from m.direct account data", len(self._dm_rooms))
def mark_candidate_dm(self, room_id: str, inviter_user_id: str) -> None:
self._dm_rooms.add(room_id)
self._direct_map[room_id] = inviter_user_id
logger.debug("Marked room %s as candidate DM with %s", room_id, inviter_user_id)
@property
def dm_rooms(self) -> frozenset[str]:
return frozenset(self._dm_rooms)
def clear(self) -> None:
self._dm_rooms.clear()
self._direct_map.clear()