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 获取用户信息 返回结果包含图片,需要在聊天环境执行指令
消息中包含BV12v411G7dP
av2
等等 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
图片缓存位置, 默认为ImageCache
limit
动态 订阅 输出图片数量上限, 默认为16
api
API 访问间隔时间,单位秒, 默认为10
video
视频 订阅 访问间隔时间,单位分钟, 默认为10
dynamic
动态 订阅 访问间隔时间,单位分钟, 默认为10
live
直播 订阅 访问间隔时间,单位分钟, 默认为30
season
番剧 订阅 访问间隔时间,单位分钟, 默认为30
refresh
启动时刷新 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 MicroMessenger
width
截图宽度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.atall
Template
位于
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 🔄 #share
Cookies
位于
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 plugin
TODO
- 完善剧集订阅
- 自动清理图片缓存
-
终于有大佬做b站推送的插件了,好耶(我做的太辣鸡了
-
@colter23 别说了,我太菜了,推送动态用的方法是截图
-
@cssxsh 这个可以在群里推送吗?
-
@orisland
可以的,使用指令所在的聊天环境就是推送的目标 -
-
@cssxsh ……这个动态的更新的频率是多久啊?我发现我发了一个动态几分钟过去了群里也没推。。
-
-
@orisland
订阅成功之后,机器人会回复
@xxx监听设置成功的消息
视频和动态轮询时间都是10分钟
暂时还不考虑用户设置,因为b站有反爬锁ip的机制,爬取极限是多少还不清楚 -
@cssxsh okk
-
This post is deleted! -
@cssxsh 访问b站api的间隔10s左右没问题,我的bot一直是10s,没有问题。再低的话,就有可能出问题
建议在每次访问api时,都加个10秒左右的延迟,就问题不大 -
@colter23
以后考虑加个原子锁 -
其实用代理池更直接更好用(
-
后续有考虑过能够修改解析视频时的格式吗,另外直接在群里复制bv号的时候貌似会根据前一次的解析结果里的链接再解析一次,造成刷屏
-
@viviananifa
如果说因为输出的视频属性过多的话,可以考虑加个开关关闭多余的属性
第二点有些没弄懂你的意思,你是想说最近已经解析的链接不希望再次被解析吗 -
@viviananifa
去github开个 issue 吧 -
@cssxsh 可能是我没有表示清楚,我使用时发现复制链接或者bv号之后,第一次插件发送了解析信息之后不知为何在1-2秒的间隔之后还会再发送一次不知道是我设置还是其他原因。
附一张图例子。
(最下面的消息@的是机器人自己) -
@viviananifa
这个情况经常出现吗 -
@viviananifa
话说你是不是安装了两套不同bilibili的插件