38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
|
|
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
|