Files
2026-08-15 14:43:56 +08:00

6.7 KiB
Raw Permalink Blame History

BetterGI 直播联动

监听 B 站直播间弹幕,管理观众排队、积分、扫码上号、BetterGI 配置组执行、点歌和 TTS 播报。

环境

  • Python: conda 环境 Live-streamingE:\Programs\Anaconda3\envs\Live-streaming\python.exe
  • Node.js: 构建前端用
  • BetterGI: 自动化脚本引擎,路径在 config/config.json 中配置
# 安装 Python 依赖
E:\Programs\Anaconda3\envs\Live-streaming\python.exe -m pip install -r requirements.txt

# 下载 TTS 模型(约 1.2GB,仅需一次)
E:\Programs\Anaconda3\envs\Live-streaming\python.exe -c "from huggingface_hub import snapshot_download; snapshot_download('Qwen/Qwen3-TTS-12Hz-0.6B-Base')"

# 安装前端依赖并构建
cd frontend\admin
npm install
npm run build

启动

.venv\Scripts\python.exe app\main.py --role all --host 0.0.0.0 --port 5191
参数 默认值 说明
--role all queue 仅排队/Web / music 仅音乐监听 / tts TTS 状态窗口 / all 同时启动全部(推荐,否则音乐页面不会随 SMTC 更新)
--host 0.0.0.0 绑定地址
--port 8086 端口

启动后日志会打印本机和局域网访问地址,例如 http://192.168.31.80:5191/admin

配置文件

配置文件统一为 config/config.json,支持热加载,保存后无需重启。

bilibili — 直播间连接

字段 说明
room_id 直播间号(短号也可)
sessdata B 站 Cookie SESSDATA,用于监听弹幕和发送回复
bili_jct CSRF token,发弹幕必须。和 SESSDATA 配套获取

获取方式:浏览器登录 B 站 → F12 → Application → Cookies → bilibili.com → 复制 SESSDATAbili_jct

注意sessdatabili_jct 属于敏感登录凭证,不要分享本文件。缺少 bili_jct 时只能收弹幕不能回复。

queue — 排队积分

字段 默认值 说明
initial_points 10 新用户初始积分
signin_points 10 每日签到获得积分
max_points 30 积分上限
points_per_minute 1 队首每分钟扣除积分
admin_window_seconds 180 队首上号窗口(超时过号)
default_group 薄荷 队列空时默认运行的 BetterGI 配置组

global — 全局

字段 说明
admin_uids 管理员 UID 列表(一级用户,可用重置等特权指令)
log_level 日志级别:DEBUG / INFO / WARNING

broadcast — 弹幕播报与 TTS

字段 默认值 说明
enable_danmu_reply true 指令回复发到直播间
enable_system_danmu true 系统通知发到直播间
enable_tts false TTS 语音播报(需先下载模型)
danmu_interval_sec 5 弹幕发送间隔
tts_provider none none / faster-qwen3-tts / dots-tts

commands — 内置指令别名

11 个内置指令,每个可单独启用/禁用、自定义别名:

key 默认别名 功能
queue 排队 加入排队队列
signin 签到 每日签到
login 上号 队首触发扫码上号
confirm_yes 确认账号正确
confirm_no 不是 确认账号不正确,重新扫码
run 执行, 跑, 开始 执行配置组(需带参数)
leave 退出 退出队列
reset 重置 一级用户重启原神和 BGI
points 积分 查询积分
queue_list 队列 查看排队情况
help 帮助 显示帮助

rules — 弹幕触发规则

{
  "keyword": "开始",
  "match_type": "exact",
  "groups": ["子探测单元"],
  "cooldown": 60,
  "admin_only": false,
  "reply": "收到,开始执行子探测单元任务"
}
  • match_typecontains / exact / startswith / regex
  • 匹配后直接启动 groups 指定的 BetterGI 配置组

music_monitor — 音乐监听与点歌

监听 Windows 系统媒体会话(SMTC),观众可通过弹幕点歌。

request_player.commands:点歌触发词,默认 ["点歌", "dg"]

system — 系统定时任务

字段 说明
enable_startup_shortcut 开机自启
auto_reboot_time 每日自动重启时间
launch_bilibili_live_time 定时启动直播姬
launch_genshin_time 定时启动原神

后台管理

http://127.0.0.1:5191/admin
页面 功能
总览 运行状态、排队人数、服务健康、快捷操作
配置 B 站连接、BetterGI 路径、队列参数、前台视觉
规则 弹幕触发规则 + 内置指令别名管理
队列 当前排队列表,支持移出、加减分、清空
用户 所有用户积分管理,支持加减分、踢出、删除
媒体 弹幕播报开关、TTS 配置与测试、音乐监听
日志 系统日志 + BetterGI 日志
JSON 原始 JSON 编辑

后台每 3 秒自动刷新,数据实时同步。

开发

前端

cd frontend\admin
npm run build          # 构建到 web/admin/

源码:frontend/admin/src/main.jsVue3 单文件组件),styles.css

后端

# 编译检查
E:\Programs\Anaconda3\envs\Live-streaming\python.exe -m py_compile app/danmu_queue.py

核心文件:

文件 功能
app/main.py 入口,启动 Web 服务和子模块
app/danmu_queue.py 弹幕监听、指令处理、队列管理、BGI 控制、TTS、Web API
app/music_monitor.py SMTC 音乐监听与点歌调度
app/core/runtime_paths.py 运行时路径解析

打包

# 轻量包(不含 TTS
.\build.bat

# 完整包(含 TTS/GPU 依赖)
.\build.bat -FullTts

输出:dist/LiveStreaming/LiveStreaming.exe

数据文件

路径 内容
data/users.json 用户账号与积分
data/queue_state.json 排队状态(启动时清空)
data/ref_audio.wav TTS 参考音频
data/music_state.json 音乐播放状态
data/song_requests.json 点歌队列
logs/danmu_queue.log 主程序日志

弹幕链路排查

  1. 确认 config.jsonroom_id 正确(浏览器打开直播间,URL 中数字)
  2. 确认 sessdata 有效:看日志是否有 SESSDATA有效, 账号=xxx
  3. 确认 WebSocket 连接:看日志是否有 认证成功,开始监听弹幕
  4. 发弹幕测试:在直播间发 帮助,日志应出现 [弹幕] 用户(uid): 帮助
  5. 如连接断线(WinError 10013),用管理员权限启动程序
  6. DEBUG 统计:日志每 60 秒输出 [弹幕统计] 收到N个raw | 解析N个包 | OP_MESSAGE=N | 提取弹幕=N