from __future__ import annotations from yuxi.channel.extensions.bilibili.types import BilibiliAccountConfig class BilibiliSecurity: def __init__(self, account: BilibiliAccountConfig | None = None): self._account = account or BilibiliAccountConfig() def check_dm_policy(self, sender_uid: str) -> bool: policy = self._account.dm_policy if policy == "disabled": return False if policy == "open": return True if policy == "allowlist": return sender_uid in self._account.dm_allow_from if policy == "pairing": from yuxi.channel.extensions.bilibili.pairing import check_pairing return check_pairing(sender_uid, self._account) return False def check_danmaku_policy(self, room_id: int) -> bool: return room_id in self._account.room_ids def resolve_dm_policy(self) -> str: return self._account.dm_policy.value def collect_warnings(self, config: dict, account_id: str | None = None, account: dict | None = None) -> list[str]: warnings = [] acct = account or {} if acct.get("dm_enabled") and acct.get("dm_policy") in ("open", "allowlist"): warnings.append("私信功能已启用,使用非官方 API,存在账号风险") if not acct.get("room_ids"): warnings.append("未配置直播间 ID,弹幕功能不会启动") return warnings