from __future__ import annotations from typing import Any from yuxi.utils.logging_config import logger class GroupGating: def __init__(self, config: dict[str, Any] | None = None): cfg = config or {} self._group_config: dict[str, dict[str, Any]] = {} self._build_from_config(cfg) def _build_from_config(self, config: dict) -> None: groups_cfg = config.get("groups", {}) if isinstance(groups_cfg, dict): self._group_config = {gid: gcfg if isinstance(gcfg, dict) else {} for gid, gcfg in groups_cfg.items()} def require_mention(self, group_jid: str) -> bool: jid_base = group_jid.split("@")[0] if "@" in group_jid else group_jid for key, cfg in self._group_config.items(): if key == jid_base or key == group_jid: return cfg.get("requireMention", False) return False def is_activated(self, group_jid: str) -> bool: jid_base = group_jid.split("@")[0] if "@" in group_jid else group_jid for key, cfg in self._group_config.items(): if key == jid_base or key == group_jid: return cfg.get("activated", True) return True def activate(self, group_jid: str) -> None: jid_base = group_jid.split("@")[0] if "@" in group_jid else group_jid if jid_base not in self._group_config: self._group_config[jid_base] = {} self._group_config[jid_base]["activated"] = True logger.info(f"GroupGating: activated {group_jid}") def deactivate(self, group_jid: str) -> None: jid_base = group_jid.split("@")[0] if "@" in group_jid else group_jid if jid_base not in self._group_config: self._group_config[jid_base] = {} self._group_config[jid_base]["activated"] = False logger.info(f"GroupGating: deactivated {group_jid}")