from __future__ import annotations from typing import Protocol, runtime_checkable @runtime_checkable class ChannelRegistration(Protocol): """注册到 ``ChannelRegistry`` 的渠道配置需至少提供 ``enabled``。""" enabled: bool class ChannelRegistry: """渠道注册、启停、状态查询(与具体 IM 无关)。""" def __init__(self) -> None: self._registry: dict[str, ChannelRegistration] = {} self._running: dict[str, bool] = {} def register_channel(self, channel_id: str, cfg: ChannelRegistration) -> None: self._registry[channel_id] = cfg if channel_id not in self._running: self._running[channel_id] = cfg.enabled def start_channel(self, channel_id: str) -> None: self._running[channel_id] = True def stop_channel(self, channel_id: str) -> None: self._running[channel_id] = False def get_channel_status(self, channel_id: str) -> dict[str, str | bool]: cfg = self._registry.get(channel_id) return { "channel_id": channel_id, "registered": cfg is not None, "running": bool(self._running.get(channel_id)), "enabled": bool(cfg and cfg.enabled), }