/bili_danmu

bili直播弹幕机(golang1.15) 弹幕(礼物...)信息保存语音提醒、直播流保存,obs调用,生成ass,gtk弹幕窗,发送弹幕

Primary LanguageGoMIT LicenseMIT

bilibili 直播弹幕机

golang go version go1.15 linux/amd64


目录释义

目录 说明
./ 项目根
CV/ 全局变常量
F/ 项目小工具(ws消息生成、api、整数字节转换)
Replay/ 接收的数据处理区
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/03/08 12:57:09 命令行操作 [切换房间->输入数字回车]
I: 2021/03/08 12:57:09 命令行操作 [发送弹幕->输入' 字符串'回车]
I: 2021/03/08 12:57:09 命令行操作 [房间信息->输入' room'回车]
I: 2021/03/08 12:57:09 命令行操作 [查看直播中主播->输入' live'回车]
I: 2021/03/08 12:57:09 命令行操作 [其他输出隔断不影响]

用例:

  • 直播间切换
 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

运行

方法

  1. 前往releases页下载对应系统版本。解压后进入demo目录(文件夹),运行demo.run(demo.exe)。
./demo.run [-q 清晰度 -r 房间ID]
  1. clone本项目。进入demo目录(文件夹),运行:
go run [-tags "gtk"] main.go [-q 清晰度 -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