bilibili 直播弹幕机
golang go version go1.15 linux/amd64
目录释义
目录 |
说明 |
./ |
项目根 |
CV/ |
全局变常量 |
F/ |
项目小工具(ws消息生成、api、整数字节转换) |
Replay/ |
接收的数据处理区 |
Json/ |
json的golang struct表述 |
Send/ |
发送数据区 |
_Screenshot/ |
截图保存目录 |
_msg_sample/ |
ws接收数据示例 |
_source/ |
bilijs文件示例 |
demo/ |
运行目录 |
.gitignore |
项目忽略文件 |
7za.exe |
githubAction的windows打包程序 |
LICENSE |
许可 |
VERSION |
项目版本 |
bili_danmu.go |
主运行文件 |
go.mod |
goMod文件 |
LICENSE
使用了下述的项目,十分感谢
当前支持显示/功能
当前支持显示
以下内容可能过时,点击查看当前支持显示
- 人气
- 天选之人开始
- 天选之人获奖
- 直播间关注提示
- 大航海购买
- 节奏风暴
- 大航海进入
- 弹幕
- 房间信息分区改变
- 禁言
- 礼物
- 封禁
- 下播
- 开播
- SC
- 排行榜
当前支持功能
以下内容可能过时,点击查看当前支持功能(旧),功能配置(新)
- 每天自动发送将要过期的银瓜子礼物(默认发送3天内过期的)
- 保持当前已点亮的粉丝牌总是点亮
- 银瓜子自动兑换硬币
- 发进房弹幕(可选有无粉丝牌(可选每日首次发送后不发))
- 每日签到
- 每日有粉丝牌获取小心心
- 自定义私信
- 自动切换粉丝牌
- 扫码登录
- 自定义语音提醒
- GTK弹幕窗
- GTK信息窗
- 营收统计
- 舰长数统计
- 直播流保存
- ASS字幕生成
- OBS调用
- 节奏提示
- 反射型弹幕机
- 自动型弹幕机
- 相同弹幕合并
- 重复度高弹幕屏蔽
- 弹幕开头字符相同缩减
其他特性
- cookie加密
- 弹幕自动重连(30s)
- 直播流开播自动下载
- 直播流断流再保存
- 命令行支持房间切换、弹幕发送、启停录制
- GTK信息窗支持房间切换、弹幕格式化发送、时长统计
- GTK弹幕窗支持自定义人/事件消息停留
说明
本项目使用github action自动构建,构建过程详见yml
命令行操作
在准备动作完成(T: 2021/03/06 16:22:39 命令行操作 [回车查看帮助]
)后,输入回车将显示帮助
I: 2021/04/01 11:36:46 命令行操作 [切换房间->输入数字回车]
I: 2021/04/01 11:36:46 命令行操作 [发送弹幕->输入' 字符串'回车]
I: 2021/04/01 11:36:46 命令行操作 [房间信息->输入' room'回车]
I: 2021/04/01 11:36:46 命令行操作 [开始结束录制->输入' rec'回车]
I: 2021/04/01 11:36:46 命令行操作 [查看直播中主播->输入' live'回车]
I: 2021/04/01 11:36:46 命令行操作 [其他输出隔断不影响]
用例:
live
T: 2021/03/06 16:18:48 api 正在直播主播 [获取中]
T: 2021/03/06 16:18:48 api 正在直播主播 [完成]
I: 2021/03/06 16:18:48 命令行操作 [0 奈さま B站第一坑老公]
I: 2021/03/06 16:18:48 命令行操作 [1 古守血遊official 【B】Apex on]
I: 2021/03/06 16:18:48 命令行操作 [2 一米八的坤儿 午饭直播]
I: 2021/03/06 16:18:48 命令行操作 [3 哔哩哔哩英雄联盟赛事 【直播】 LNG vs LGD]
I: 2021/03/06 16:18:48 命令行操作 [回复' live(序号)'进入直播间]
live1
I: 2021/03/06 16:19:12 命令行操作 [进入房间 8725120]
120
I: 2021/03/06 16:21:35 命令行操作 [进入 120]
1
I: 2021/03/06 16:21:17 弹幕发送 [发送 1 至 7734200]
room
I: 2021/03/08 01:06:53 命令行操作 [当前直播间信息]
I: 2021/03/08 01:06:53 命令行操作 [C酱です 213电竞俱乐部开业了! 直播中]
I: 2021/03/08 01:06:53 命令行操作 [已直播时长: 07:56:53]
I: 2021/03/08 01:06:53 命令行操作 [营收: ¥0.00]
I: 2021/03/08 01:06:53 命令行操作 [舰长数: 1427]
I: 2021/03/08 01:06:53 命令行操作 [分区排行: 单机游戏 19 人气: 1321956]
cookie加密
保护cookie.txt
在demo/config/config_K_v.json
中可找到配置项
"cookie加密公钥":"public.pem",
"cookie解密私钥":"private.pem"
- 当配置了公钥路径后,cookie将被加密(若公钥无效,将会导致cookie无法储存)。若未配置私钥路径,则每次启动都会要求输入私钥路径。(若私钥无效,将会导致cookie被清除)
- 当未配置公钥路径(空字符串),cookie将明文储存。
- 默认使用了
demo/
下的(public.pem)(private.pem)进行加密,使用时注意自行生成公私钥并按照上述说明使用
注意,每次更换设置(设置或未设置公钥),cookie会失效。
附:创建公(public.pem)私(private.pem)钥
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
小心心
在登录后,可以自动获取小心心
需要支持webassembly的浏览器(通常可以在bili直播间获得小心心的浏览器均可)
golang通过websocket与浏览器js进行通讯,在浏览器js调用bilibili的webassembly组件,对信息进行加密。最后返回加密字符串,并由golang进行获取请求。因此需要保持浏览器的相关标签页不被关闭。
私信
在登录后,可以使用私信
私信配置在demo/config/config_K_v.json
有说明
语音
调用tts默认使用ffplay,安装ffmpeg
或使用其他程序:可在demo/config/config_K_v.json
中编辑调用的程序及附加选项
config_K_v.json
默认
"TTS_使用程序路径":"ffplay",
"TTS_使用程序参数":"-autoexit -nodisp"
使用mpv
"TTS_使用程序路径":"mpv",
"TTS_使用程序参数":"--no-video"
使用potplayer(例程序位置D:\potplayer\PotPlayerMini64.exe)
"TTS_使用程序路径":"D:\\potplayer\\PotPlayerMini64.exe",
"TTS_使用程序参数":"/current /autoplay"
release默认编译tts
总开关,自定义响应的事件可在demo/config/config_tts.json
中编辑
{D}:为tts内容
key为demo/face下的文件名
{
"0multi": "观众:{D}",
"29183321":"{D}"
}
弹幕窗
构建gtk需要gtk3,先行安装gtk
release Linux默认编译gtk界面 Windows默认不编译
编译命令
cd demo
go build -v -tags `gtk` -o demo.exe -i main.go
弹幕处理/响应
默认开启了
启动时加载,当弹幕内容与demo/config_auto_reply.json
中所设键名相同时,在登录的情况下,会自动发送对应值的弹幕
当短时间存在大量完全相同的弹幕时,他们将合并显示。
过滤掉自身重复度及最近弹幕重复度高的弹幕
当与上条弹幕具有相同开头的开头时,重复的部分会用...替代
仅对显示效果进行处理,而不处理输出到日志。更多设置见demo/config/config_F.json
运行
方法
- 前往releases页下载对应系统版本。解压后进入
demo
目录(文件夹),运行demo.run
(demo.exe
)。
./demo.run [-r 房间ID]
- clone本项目。进入
demo
目录(文件夹),运行:
go run [-tags "gtk"] main.go [-r 房间ID]
注意事项
- 其中[]内的内容为可选项
- 法2的golang需1.15并建议使用最新提交
- 弹幕及礼物会记录于danmu.log中
- 部分功能(如获取小心心、签到、发送弹幕、获取原画等)需要在
demo
目录(文件夹)下放置cookie.txt
才可用 或 运行时按提示使用扫码登录成功后才可用(登录信息会保存在demo/cookie.txt
中)
效果展示
以下内容可能过时,以实际运行为准
命令窗口(以下为截取)
//启动
qydysky@DESKTOP-5CV1EFA:~/程序/git/go/src/github.com/qydysky/bili_danmu/demo$ go run -tags "gtk" main.go -r 21320551
I: 2021/02/18 20:33:09 api 小心心加密 [如需加密,会自动打开 http://127.0.0.1:33673]
I: 2021/02/18 20:33:09 api 小心心加密 [启动]
PID:14544
房间号: 21320551
T: 2021/02/18 20:33:09 api 新建 [ok]
T: 2021/02/18 20:33:09 api 获取房号 [获取房号]
T: 2021/02/18 20:33:10 api LIVE_BUVID [获取LIVE_BUVID]
I: 2021/02/18 20:33:10 api LIVE_BUVID [存在]
T: 2021/02/18 20:33:11 api 获取Token [ok]
I: 2021/02/18 20:33:13 api 获取直播流 [轮播中]
T: 2021/02/18 20:33:13 api 银瓜子=>硬币 [银瓜子=>硬币]
I: 2021/02/18 20:33:15 api 银瓜子=>硬币 [现在有银瓜子 540 个]
W: 2021/02/18 20:33:15 api 银瓜子=>硬币 [当前银瓜子数量不足]
T: 2021/02/18 20:33:15 api 签到 [签到]
I: 2021/02/18 20:33:19 api 获取客户版本 [api version 2.6.25]
I: 2021/02/18 20:33:21 api 获取热门榜 [热门榜: 虚拟主播 50+]
I: 2021/02/18 20:33:23 bilidanmu Demo [连接到房间 21320551]
I: 2021/02/18 20:33:23 bilidanmu Demo [连接 wss://tx-bj-live-comet-02.chat.bilibili.com/sub]
T: 2021/02/18 20:33:23 api 小心心 [获取小心心]
I: 2021/02/18 20:33:23 bilidanmu Demo [已连接到房间 乙女音Official ( 21320551 )]
I: 2021/02/18 20:33:23 bilidanmu Demo [【b限】学《巴啦啦小魔仙》]
I: 2021/02/18 20:33:24 bilidanmu Demo [获取人气]
T: 2021/02/18 20:33:25 api 礼物列表 [获取礼物列表]
I: 2021/02/18 20:33:27 api 获取舰长数 [舰长数获取成功 471]
I: 2021/02/18 20:33:27 弹幕发送 [发送 至 21320551]
I: 2021/02/18 20:33:27 功能 [营收 ¥0.00]
I: 2021/02/18 20:33:29 api 礼物列表 [成功]
I: 2021/02/18 20:33:29 api 小心心 [今天小心心已满!]
//普通弹幕
老鸡捉小鹰
你快扒拉他
你这好像是补刀
吓人
//大航海
>>> 欢迎舰长 Mana_单推... 进入直播间
//礼物
====
超级角击 投喂 1 个 摩天轮
====
//同字符串合并
7 x 原神公测B服冲冲冲
//同字符忽略
原神公测B站冲冲冲
...B服冲冲冲
//SC
====
SC: 凪穗
有了OTO能量,我们才能够坚强,prprpr
OTOエネルギーがあれば、私たちは強くなれる。prprprpr
====
//gtk的弹幕格式化发送
2020/11/20 15:39:57 弹幕格式已设置为 [{D}]
INFO: 2020/11/20 15:40:05 [弹幕发送] [发送 [就是这样] 至 394988]
[就是这样]
INFO: 2020/11/20 15:40:15 [弹幕发送] [发送 [你知道么] 至 394988]
[你知道么]
2020/11/20 15:42:38 弹幕长度大于20,不做格式处理
INFO: 2020/11/20 15:42:38 [弹幕发送] [发送 11111111111111111111 至 394988]
11111111111111111111
//其他会出现在命令行的信息
//热门榜
I: 2021/02/18 14:59:00 Msg 房 [热门榜 虚拟 4]
//人气
I: 2021/02/18 14:58:51 Reply 人气 [当前人气 450869]
//营收
I: 2021/02/18 14:58:24 功能 [营收 ¥247.80]
//语音
I: 2021/02/18 14:59:00 TTS [0superchat SC: 三得笠·阿克曼茶 8888888 天才oto天才 ]
ctrl+c退出,会同时追加记录到文件danmu.log中(文件记录完整信息,不会减少附加功能作用的弹幕)
danmu.log
基本同命令行显示,不同下列:
//弹幕 上述合并、忽略都不会起作用
I: 2021/02/18 07:24:55 Msg [从天上掉下来的骚年 : 秀才]
//礼物 超过设定限额的将会在命令行中显示,级别为I
T: 2021/02/18 07:30:30 Msg 礼 [正道的光博航同志 投喂 1 个 上上签 ¥1.0]
I: 2021/02/18 14:52:31 Msg 礼 [三千千千千千千 投喂 1 个 爱之魔力 ¥28.0]
//sc
I: 2021/02/18 14:40:54 Msg 礼 [SC: 加拉入我心 ¥ 30 关注了乙女音,我才能够得到快乐 乙女音符に注目してこそ、私は幸せになれるのです。]
I: 2021/02/18 21:48:49 Msg 房 [欢迎舰长 Mana_单推... 进入直播间]
流保存以及弹幕ass
结束后会保存为
房间号_时间.mkv
房间号_时间.ass
结束后的文件播放效果(显于左上)
截图地址
Gtk弹幕窗(Linux Only)
截图地址
截图地址
更多内容详见注释,如有疑问请发issues,欢迎pr