ForcePilot/backend/package/yuxi/channel/extensions/bilibili/security.py

38 lines
1.4 KiB
Python
Raw Normal View History

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