B站订阅插件,动态、视频、直播订阅 @全体成员
-
BiliBili Helper
基于 Mirai Console 的 哔哩哔哩 订阅插件
使用前应该查阅的相关文档或项目
从 1.2.5 版本开始 将截图部分功能的转移至 mirai-selenium-plugin
截图功能的启用需要其作为前置插件
关于截图支持的环境请浏览 运行平台支持
直播 @全体成员 详见配置此设置 1.5.0 废除, 改用指令配置
自动触发URL解析 详见 信息解析 指令
消息 模板 详见配置(自 1.4.0 起截图功能由模板内容来配置)指令
注意: 使用前请确保可以 在聊天环境执行指令
带括号的/前缀是可选的
<...>中的是指令名,由空格隔开表示或,选择其中任一名称都可执行例如/B视频 添加 11783021
[...]表示参数,当[...]后面带?时表示参数可选
{...}表示连续的多个参数本插件指令权限ID 格式为
xyz.cssxsh.mirai.plugin.bilibili-helper:command.*,*是指令的第一指令名
例如/B动态 添加 496371957的权限ID为xyz.cssxsh.mirai.plugin.bilibili-helper:command.bili-dynamic参数
uid例如https://space.bilibili.com/508963009/的数字508963009
参数contact为QQ号或者群号,可以省略,会从当前聊天环境获取,
比如群聊中会自动填充为当前群号, 但控制台中必须填充子指令
sleep/at的target是 被许可人 ID
处于休眠时间的订阅将不会推送
举例:/bili-dynamic sleep g12345 00:00 06:00,00:00~06:00时间段内将不会推送
处于艾特时间的订阅将会添加艾特
举例:/bili-live at g12345 19:00 23:00,19:00 23:00时间段内将会艾特全体/bili-live at u456789 19:00 23:00,19:00 23:00时间段内将会艾特用户456789
子指令
cron的cron参数是 CRON 表达式, 由秒 分钟 小时 日 月 周组成
举例:/bili-dynamic time 508963009 "0 0 14 * * ?",0 0 14 * * ?表示每天 14:00 都执行一次/bili-video time 508963009 "0 0 18 ? * 2-6",0 0 18 ? * 2-6表示星期一至星期五 每天 18:00 执行一次
可以使用在线编辑器生成 https://www.bejson.com/othertools/cron/
为防止被 空格 分成多个参数,请使用"包裹参数
动态订阅指令
指令 描述 /<bili-dynamic B动态> <add 添加> [uid] [contact]?添加一个b站动态订阅 /<bili-dynamic B动态> <stop 停止> [uid] [contact]?停止一个b站动态订阅 /<bili-dynamic B动态> <time 定时> [uid] [cron]?设置任务的定时信息 /<bili-dynamic B动态> <list 列表> [contact]?列出当前联系人的动态订阅 /<bili-dynamic B动态> <forbid 屏蔽> [pattern] [add]?添加一个动态正则屏蔽 /<bili-dynamic B动态> <sleep 休眠> [target] [start] [end]添加一个休眠时间 /<bili-dynamic B动态> <at 艾特> [target] [start] [end]添加一个艾特时间 /bili-dynamic forbid 转发抽奖添加一个正则屏蔽
/bili-dynamic forbid 转发抽奖 false取消一个正则屏蔽
/bili-dynamic filter 视频添加一个动态类型过滤
/bili-dynamic filter 视频 false取消一个动态类型过滤
type取值回复, 图片, 文本, 视频, 专栏, 音乐, 剧集, 删除, 番剧, 电视, 直播直播订阅指令
指令 描述 /<bili-live B直播> <add 添加> [uid] [contact]?添加一个b站直播订阅 /<bili-live B直播> <stop 停止> [uid] [contact]?停止一个b站直播订阅 /<bili-live B直播> <time 定时> [uid] [cron]?设置任务的定时信息 /<bili-live B直播> <list 列表> [contact]?列出当前联系人的直播订阅 /<bili-live B直播> <sleep 休眠> [target] [start] [end]添加一个休眠时间 /<bili-live B直播> <at 艾特> [target] [start] [end]添加一个艾特时间 视频订阅指令
指令 描述 /<bili-video B视频> <add 添加> [uid] [contact]?添加一个b站视频订阅 /<bili-video B视频> <stop 停止> [uid] [contact]?停止一个b站视频订阅 /<bili-video B视频> <time 定时> [uid] [cron]?设置任务的定时信息 /<bili-video B视频> <list 列表> [contact]?列出当前联系人的视频订阅 /<bili-video B视频> <forbid 屏蔽> [type] [add]?添加一个视频类型屏蔽 /<bili-video B视频> <filter 过滤> [tid] [add]?添加一个视频分区过滤 /<bili-video B视频> <sleep 休眠> [target] [start] [end]添加一个休眠时间 /<bili-video B视频> <at 艾特> [target] [start] [end]添加一个艾特时间 /bili-video forbid 付费添加一个类型屏蔽
/bili-video forbid 付费 false取消一个类型屏蔽
/bili-video filter 1添加一个分区过滤过滤
/bili-video filter 1 false取消一个分区过滤过滤
type取值付费, 联合, 回放
tid取值请参考 https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/video/video_zone.md视频订阅不宜过多,否则会触发b站反爬策略,导致IP被锁定 动态订阅一般会包含视频内容,推荐以此代替
剧集订阅指令
指令 描述 /<bili-season B剧集> <add 添加> [sid] [contact]?添加一个b站剧集订阅 /<bili-season B剧集> <stop 停止> [sid] [contact]?停止一个b站剧集频订阅 /<bili-season B剧集> <time 定时> [uid] [cron]?设置任务的定时信息 /<bili-season B剧集> <list 列表> [contact]?列出当前联系人的剧集订阅 /<bili-season B剧集> <sleep 休眠> [target] [start] [end]添加一个休眠时间 /<bili-season B剧集> <at 艾特> [target] [start] [end]添加一个艾特时间 剧集订阅需要 Season ID 例如 https://www.bilibili.com/bangumi/play/ss38353 的
38353
可以通过 搜索指令 搜索番剧 获得链接信息解析指令
指令 描述 /<bili-info B信息> <aid> [id]根据 avid 获取视频信息 /<bili-info B信息> <bvid> [id]根据 bvid 获取视频信息 /<bili-info B信息> <dynamic> [id]根据 id 获取动态信息 /<bili-info B信息> <live> [id]根据 id 获取直播信息 /<bili-info B信息> <user> [id]根据 id 获取用户信息 返回结果包含图片,需要在聊天环境执行指令
消息中包含BV12v411G7dPav2等等 id 信息时会自动触发解析
目前会触发的正则表达式// Video """(?i)(?<!\w)(?:av(\d+)|(BV[0-9A-z]{10}))""" // Dynamic """(?<=t\.bilibili\.com/(?:h5/dynamic/detail/)?)(\d+)""" // Live Room """(?<=live\.bilibili\.com/)(\d+)""" // User Space """(?<=space\.bilibili\.com/|bilibili\.com/space/)(\d+)""" // Season """(?i)(?<!\w)ss(\d{4,10})""" // Episode """(?i)(?<!\w)eq(\d{4,10})""" // Media """(?i)(?<!\w)md(\d{4,10})""" // Article """(?i)(?<!\w)cv(\d{4,10})""" """(?<=bilibili\.com/read/mobile\?id=)(\d+)""" // Short Link """(?<=b23\.tv\\?/)[0-9A-z]+"""搜索指令
指令 描述 /<bili-search B搜索> <user 用户> [keyword]搜索用户 /<bili-search B搜索> <bangumi 番剧> [keyword]搜索番剧 /<bili-search B搜索> <ft 影视> [keyword]搜索影视 返回结果包含图片,需要在聊天环境执行指令
任务列表指令
指令 描述 /<bili-task B任务> <all>全部任务 /<bili-task B任务> <dynamic>动态任务 /<bili-task B任务> <live>直播任务 /<bili-task B任务> <season>剧集任务 /<bili-task B任务> <video>视频任务 /<bili-task B任务> <config>屏蔽设置 模板配置指令
指令 描述 /<bili-template B模板> <datetime> [pattern]日期格式 /<bili-template B模板> <reload>重新加载 pattern的 取值为 DateTimeFormatter
举例:/B模板 datetime ISO_LOCAL_DATE_TIME/B模板 datetime yyyy-MM-dd
设置
位于
Mirai-Console运行目录下的config/xyz.cssxsh.mirai.plugin.bilibili-helper文件夹下BiliHelperSettings.yml
cache图片缓存位置, 默认为ImageCachelimit动态 订阅 输出图片数量上限, 默认为16apiAPI 访问间隔时间,单位秒, 默认为10video视频 订阅 访问间隔时间,单位分钟, 默认为10dynamic动态 订阅 访问间隔时间,单位分钟, 默认为10live直播 订阅 访问间隔时间,单位分钟, 默认为30season番剧 订阅 访问间隔时间,单位分钟, 默认为30refresh启动时刷新 last,订阅最后推送将会重新开始记录,未推送内容将会因此丢弃selenium是否启用截图此配置项废弃,通过 Template 文件内容来确定是否启用截图ban排除的自动解析内容,可以放一些不希望被解析的AV号之类的forward转发自动解析, 使用转发的形式发送自动解析结果max一次性推送的订阅内容上限, 超过这个上限将会尝试合并为转发消息
BiliCleanerConfig.yml
interval图片清理的间隔时间,单位 小时expires图片缓存过期时间,单位 小时
SeleniumConfig.yml
user_agent截图设备UA 网页识别设备类型,进而影响截图的效果
iPadMozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1 MicroMessenger
iPhoneMozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 MicroMessenger
MacMozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50 MicroMessengerwidth截图宽度height截图高度pixel_ratio截图像素比此配置废除headless无头模式(后台模式)home浏览器会保持打开主页,以加快其他页面加载速度此配置废除hide隐藏的web组件(jQ选择器)
添加".international-header", ".top-bar", ".m-navbar"可以屏蔽顶边栏
LiveAtAll此设置 1.5.0 废除
此配置通过权限设置,权限ID为xyz.cssxsh.mirai.plugin.bilibili-helper:live.atall
配置对象为群,即g*,g12345
举例,perm add g12345 xyz.cssxsh.mirai.plugin.bilibili-helper:live.atallTemplate
位于
config/xyz.cssxsh.mirai.plugin.bilibili-helper/Template目录下的template文件
文件名为对应的配置对象(类名),文件内容的#...是替换标记,将会替换为对应的值
值的名称请参考 bilibili/data 中的数据定义
#images,#detail,#screenshot为特殊的替换标记,将会替换为特殊的处理结果
#images将会替换为内容图片
在BiliRoomInfo中#detail将会替换为对应的Live
在DynamicCard中#detail将会替换为对应的card解析结果
在DynamicInfo中#screenshot将会替换为截图(需要安装mirai-selenium-plugin)
在Article中#screenshot将会替换为截图(需要安装mirai-selenium-plugin)
例如可以将VideoStatus.template改为👍 #like 💰 #coin ⭐ #favorite ▶️ #view 💬 #reply 🔄 #shareCookies
位于
data/xyz.cssxsh.mirai.plugin.bilibili-helper/cookies.json
导入 cookies文件 不是必须的,这是实验性功能,主要是防止b站反爬IP锁定
从 浏览器插件 EditThisCookie 导出Json 填入文件
EditThisCookie 安装地址
Chrome
Firefox
Edge安装
MCL 指令安装
./mcl --update-package xyz.cssxsh:bilibili-helper --channel stable --type plugin手动安装
- 运行 Mirai Console 生成
plugins文件夹 - 从 Releases 下载
jar并将其放入plugins文件夹中
截图前置
./mcl --update-package xyz.cssxsh.mirai:mirai-selenium-plugin --channel stable --type pluginTODO
- 完善剧集订阅
- 自动清理图片缓存
-
终于有大佬做b站推送的插件了,好耶(我做的太辣鸡了
-
@colter23 别说了,我太菜了,推送动态用的方法是截图
-
@cssxsh 这个可以在群里推送吗?
-
@orisland
可以的,使用指令所在的聊天环境就是推送的目标 -
-
@cssxsh ……这个动态的更新的频率是多久啊?我发现我发了一个动态几分钟过去了群里也没推。。
-
-
@orisland
订阅成功之后,机器人会回复
@xxx监听设置成功的消息
视频和动态轮询时间都是10分钟
暂时还不考虑用户设置,因为b站有反爬锁ip的机制,爬取极限是多少还不清楚 -
@cssxsh okk
-
此回复已被删除! -
@cssxsh 访问b站api的间隔10s左右没问题,我的bot一直是10s,没有问题。再低的话,就有可能出问题
建议在每次访问api时,都加个10秒左右的延迟,就问题不大 -
@colter23
以后考虑加个原子锁 -
其实用代理池更直接更好用(
-
后续有考虑过能够修改解析视频时的格式吗,另外直接在群里复制bv号的时候貌似会根据前一次的解析结果里的链接再解析一次,造成刷屏
-
@viviananifa
如果说因为输出的视频属性过多的话,可以考虑加个开关关闭多余的属性
第二点有些没弄懂你的意思,你是想说最近已经解析的链接不希望再次被解析吗 -
@viviananifa
去github开个 issue 吧 -
@cssxsh 可能是我没有表示清楚,我使用时发现复制链接或者bv号之后,第一次插件发送了解析信息之后不知为何在1-2秒的间隔之后还会再发送一次不知道是我设置还是其他原因。
附一张图例子。

(最下面的消息@的是机器人自己) -
@viviananifa
这个情况经常出现吗 -
@viviananifa
话说你是不是安装了两套不同bilibili的插件