ForcePilot/backend/package/yuxi/channel/extensions/bilibili/wbi.py
Kris 415d66d1c6 feat(bilibili): 新增B站渠道插件,支持直播弹幕和私信交互
该提交实现了完整的B站渠道插件,包含以下核心功能:
1.  支持B站直播弹幕监听与处理,包含弹幕、SC、礼物等多种直播间事件
2.  支持B站私信的轮询接收与发送
3.  内置WBI签名算法,适配B站API鉴权要求
4.  提供账号配对、黑白名单等弹幕私信权限控制
5.  集成速率限制与防风险机制,降低账号封禁风险
6.  完善的配置管理与状态监控能力
2026-05-21 10:40:04 +08:00

27 lines
849 B
Python

from __future__ import annotations
import hashlib
import time
import urllib.parse
_MIXIN_KEY_ENC_TAB = [
46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35,
27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13,
37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4,
22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52,
]
def get_mixin_key(raw_key: str) -> str:
return "".join(raw_key[i] for i in _MIXIN_KEY_ENC_TAB if i < len(raw_key))
def sign_params(params: dict, img_key: str, sub_key: str) -> dict:
mixin_key = get_mixin_key(img_key + sub_key)[:32]
params["wts"] = int(time.time())
params = dict(sorted(params.items()))
query = urllib.parse.urlencode(params)
w_rid = hashlib.md5((query + mixin_key).encode()).hexdigest()
params["w_rid"] = w_rid
return params