该提交实现了完整的B站渠道插件,包含以下核心功能: 1. 支持B站直播弹幕监听与处理,包含弹幕、SC、礼物等多种直播间事件 2. 支持B站私信的轮询接收与发送 3. 内置WBI签名算法,适配B站API鉴权要求 4. 提供账号配对、黑白名单等弹幕私信权限控制 5. 集成速率限制与防风险机制,降低账号封禁风险 6. 完善的配置管理与状态监控能力
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
import random
|
|
import string
|
|
import time
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_pairing_codes: dict[str, tuple[str, float]] = {}
|
|
_pairing_verified: set[str] = set()
|
|
CODE_TTL = 600
|
|
|
|
|
|
def generate_code(peer_id: str) -> str:
|
|
code = "".join(random.choices(string.digits, k=6))
|
|
_pairing_codes[peer_id] = (code, time.time())
|
|
logger.info("为 %s 生成配对码: %s", peer_id, code)
|
|
return code
|
|
|
|
|
|
def verify_code(peer_id: str, code: str) -> bool:
|
|
entry = _pairing_codes.get(peer_id)
|
|
if entry is None:
|
|
return False
|
|
stored_code, created_at = entry
|
|
if time.time() - created_at > CODE_TTL:
|
|
del _pairing_codes[peer_id]
|
|
return False
|
|
if stored_code == code:
|
|
del _pairing_codes[peer_id]
|
|
_pairing_verified.add(peer_id)
|
|
return True
|
|
return False
|
|
|
|
|
|
def check_pairing(sender_uid: str, account) -> bool:
|
|
if hasattr(account, "dm_allow_from"):
|
|
allow_from = account.dm_allow_from or []
|
|
if str(sender_uid) in allow_from:
|
|
return True
|
|
return sender_uid in _pairing_verified
|
|
|
|
|
|
def normalize_allow_entry(entry: str) -> str:
|
|
return entry.strip()
|