BiliBiliToolPro Documentation

B 站(bilibili)自动任务工具,支持docker、青龙、k8s等多种部署方式。全面拥抱AI。敏感肌也能用。

8,576 stars C# C# 1 file · ~14,365 tokens #bilibili#blazor#netcore#quartz-net#serilog
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy BiliBiliToolPro on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name bilibilitoolpro -p 8080:8080 --restart always raywangqvq/bilibilitoolpro:latest

File: README.md

BiliTool 是一个自动执行任务的工具,当我们忘记做某项任务时,它会像一个贴心小助手,按照我们预先吩咐它的命令,在指定频率、时间范围内帮助我们完成计划的任务。

BiliTool is an automated task execution tool that acts as a helpful assistant, following pre-configured commands to complete planned tasks within specified frequencies and timeframes when we forget to do them.

主要功能如下:

  • 扫码登录,自动更新cookie
  • 每日获取满额升级经验(登录、投币、点赞、分享视频)(支持指定up主)
  • 直播间挂机
  • 每天漫画签到
  • 每天直播签到
  • 直播中心银瓜子兑换为硬币
  • 每月领取大会员赠送的 5 张 B 币券和福利(忘记或者不领就浪费了哦)
  • 每月领取大会员漫画福利
  • 月底在 B 币券过期前进行充电(支持指定想要支持的up主,如果没有喜欢的up,也可以为自己充个电啊,做个用爱为自己发电的人~)
  • 直播中心天选时刻自动参与抽奖
  • 批量取关
  • 大会员大积分任务
  • 支持多账号
  • 理论上支持所有远端的日志推送(默认支持推送到Telegram、企业微信、钉钉、PushPlus、Server酱、酷推,另外也支持自定义推送到任意api)

[目录]


Github 仓库地址:RayWangQvQ/BiliBiliToolPro

注意:

  • 本应用仅用于学习和测试,作者本人并不对其负责,请于运行测试完成后自行删除,请勿滥用!
  • 所有代码都是开源且透明的,任何人均可查看,程序不会保存或滥用任何用户的个人信息
  • 应用内几乎所有功能都开放了配置(如任务开关、日期、id等),详细信息可阅读配置文档

运行图示:

1. 如何使用

BiliTool 实现自动完成任务的原理,是通过调用一系列开放的api实现的。

要使用 BiliTool,很简单,按照下面教程部署完成,运行后扫码登录即可。

1.1. 部署 BiliTool

支持多种部署方式,以下选择任一适合自己的方式即可。

1.1.1. 方案一:免费在线容器

有很多平台会提供一定免费额度的在线容器,基于官方镜像,部署 BiliTool 很容易。

以下以 ClawCloud 为例,其他平台操作类似:

>>ClawCloud 部署教程

1.1.2. 方式二:青龙

>>青龙部署教程

1.1.3. 方式三:Docker 或 Podman 运行

>>Docker 部署说明

>>Podman 部署说明

1.1.4. 方式四:下载程序包到本地或服务器运行

>>本地部署说明

1.1.5. 方式五:Chart部署

>>Chart部署说明

1.2. 消息推送(可选)

如果配置了推送,执行成功后,指定的接收端会收到推送消息,推送效果如下所示:

目前默认支持Telegram推送、PushPlus推送、企业微信应用推送、企业微信推送、钉钉推送、Microsoft Teams推送、Server酱推送和酷推QQ推送(以上顺序即为个人推荐的排序),如果需要推送到其他端,也可以配置为任意的可以接受消息的Api地址,关于如何配置推送请详见下面的个性化自定义配置章节。

推送配置见:confifuration

2. 功能任务说明

这里的任务是指一组功能的集合,是工具每次运行的最小单位。

任务列表如下:

任务名 Code 功能 推荐运行频率
扫码登录 Login 使用app扫码登录,用于第一次运行时初始化cookie,或cookie过期时的更新。不同平台会将cookie存储到不同地方 手动
每日任务 Daily 完成每日任务获取满额65点经验(登录、观看视频、分享视频、投币),快速升级Lv6 每天一次
天选时刻抽奖 LiveLottery 直播中心天选时刻抽奖,大部分抽奖都需要关注主播,介意的不要开启 每天0-4次
批量取关 UnfollowBatched 批量取关指定分组下的所有关注(主要用于清理天选抽奖而产生的关注) 手动运行
大会员大积分 VipBigPoint 大会员大积分任务(签到、浏览、观看) 每天一次,建议凌晨
直播间挂机 LiveFansMedal 直播间挂机 每天一次
漫画任务 Manga 漫画签到、阅读 每天一次
领取大会员漫画权益 MangaPrivilege 领取大会员的漫画权益 每天一次
银瓜子兑换硬币 Silver2Coin 使用银瓜子换取硬币 每天一次
免费B币券充电 Charge 大会员每31天可免费领取一张5B币券,可用于给除自己以外的UP充电 每天一次
领取大会员福利 VipPrivilege 领取大会员福利 每天一次
测试Cookie Test 测试Cookie是否正常 手动运行

3. 个性化自定义配置

>>点击查看配置说明文档

4. 多账号支持

部署成功后,直接去运行扫码登录任务,扫码成功后,应用会自动更新或添加cookie。

青龙平台会添加环境变量里,Key 为 Ray_BiliBiliCookies__0、Ray_BiliBiliCookies__1、Ray_BiliBiliCookies__2...

其他平台默认会添加到名为cookies.json的账号配置文件中:

text
{
  "BiliBiliCookies": [
    "cookie1",
    "cookie2",
    "...",
  ],
}

5. 常见问题

>>点击查看常见问题文档

Issues(议题)板块可以用来提交Bug和建议;

Discussions(讨论)板块可以用来提问和讨论。

大部分问题其实都可以在文档、议题和讨论中找到答案。

所以如果你有疑问,

  • 请先确认是否可以通过升级到最新版本解决
  • 然后搜索文档(特别是配置说明文档和常见问题文档)、议题和讨论,查看是否已有其他人遇到相同问题、是否已有解决方案

如果确认还未解决,可以自己提交 Issue,或发布 Discussions 与大家一起探讨,我会尽快确认并解决。

(关于如何正确的提交Issue,请详见常见问题文档)。

6. 版本发布及更新

当前正处于稳定的迭代开发中,详细待更新和计划内容可参见 Projects 和 Issues 。

想要有重要更新时收到通知的话,可以把仓库右上角的Star按钮点亮。

7. 成为开源贡献成员

7.1. 贡献代码

如果你有好的想法,欢迎向仓库贡献你的代码,贡献步骤:

  • 搜索查看 Issue,确定是否已有人提过同类问题
  • 对于不确定的主题,为避免code结束后PR不被接受,可以先新建 Issue,描述问题或建议,讨论清楚后再动手编码
  • 如果确认自己可以解决,请 Fork 仓库后,在develop 分支进行编码开发,完成后提交 PR 到 develop 分支

我会尽快进行代码审核,测试成功后会合并入 main 主分支,提前感谢您的贡献。

7.2. 贡献文档

文档部分由于我个人精力有限(写文档比写代码累多了),所以有些地方写的很简略,甚至有遗漏和错别字,不能贡献代码的朋友也欢迎来一起维护文档,欢迎 PR 来纠正我,一样都算是对开源做贡献了。

8. 捐赠支持

个人维护开源不易

如果觉得我写的程序对你小有帮助

或者,就是单纯的想集资给我买瓶霸王增发液

那么下面的赞赏码可以扫一扫啦

(赞赏时记得留下【昵称】和【留言】~ 另外我发现很多留言想要进群或者加好友的,一定一定要记得留下微信号哈,微信赞赏页面是看不到微信号的)

☟☟☟ 扫码自动赞赏 1 元:☟☟☟

项目中的优先支持的UP主的配置项,默认是作者的 UpId (只是作为了 JSON 配置文件的默认值,代码是干净的),需要更改的话,直接修改相应配置即可(secrets或环境变量等各种方式都行)。
当然,不改的话,也算是另一种捐赠支持作者的方式啦。

感谢支持~

9. 其他

API参考:

❤️Thanks to JetBrains for the free certificate support:

❤️Thanks to YxVM & NodeSeekDev for sponsoring the server for testing support:

❤️Thanks to DartNode for sponsoring the server for testing support:

❤️Thank you for your star to this project:


File: docker/README.md

Docker 使用说明

1. 前期工作

text
apt-get update
apt-get install curl

2. 方式一:一键脚本(推荐)

text
bash <(curl -sSL https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/install.sh)

3. 方式二:手动 Docker Compose

3.1. 启动

text
# 创建目录
mkdir bili_tool_web && cd bili_tool_web

# 下载
wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sample/docker-compose.yml
mkdir -p config
cd ./config
wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sample/config/cookies.json
cd ..

# 启动
docker compose up -d

# 查看启动日志
docker logs -f bili_tool_web

最终文件结构如下:

text
bili_tool_web
├── Logs
├── config
├──── cookies.json
└── docker-compose.yml

3.2. 其他命令参考

text
# 启动 docker-compose
docker compose up -d

# 停止 docker-compose
docker compose stop

# 查看实时日志
docker logs -f bili_tool_web

# 进入容器
docker exec -it bili_tool_web /bin/bash

# 手动更新容器
docker compose pull && docker compose up -d

4. 方式三:手动Docker指令

4.1. Docker启动

text
# 创建目录
mkdir bili_tool_web && cd bili_tool_web

# 生成并运行容器
docker pull ghcr.io/raywangqvq/bili_tool_web
docker run -d --name="bili_tool_web" \
    -p 22330:8080 \
    -e TZ=Asia/Shanghai \
    -v ./Logs:/app/Logs \
    -v ./config:/app/config \
    ghcr.io/raywangqvq/bili_tool_web

# 查看实时日志
docker logs -f bili_tool_web

其中,cookie需要替换为自己真实的cookie字符串

4.2. 其他指令参考

text
# 启动容器
docker start bili_tool_web

# 停止容器
docker stop bili_tool_web

# 重启容器
docker restart bili_tool_web

# 删除容器
docker rm bili_tool_web

# 进入容器
docker exec -it bili_tool_web /bin/bash

4.3. 使用Watchtower更新容器

text
docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --run-once --cleanup \
    bili_tool_web

5. 登录

  • 默认用户:admin
  • 默认密码:BiliTool@2233

首次登陆后,请到Admin页面修改密码。

6. 添加 Bili 账号

扫码进行账号添加。

7. 自己构建镜像(非必须)

目前我提供和维护的镜像:

  • DockerHub: [zai7lou/bili_tool_web](https://hub.docker.com/repository/docker/zai7lou/bili_tool_web)
  • GitHub: [bili_tool_web](https://github.com/RayWangQvQ/BiliBiliToolPro/pkgs/container/bili_tool_web)

如果有需要(大部分都不需要),可以使用源码自己构建镜像,如下:

在有项目的Dockerfile的目录运行

docker build -t TARGET_NAME .

TARGET_NAME为镜像名称和版本,可以自己起个名字

8. 其他

代码编译和发布环境: mcr.microsoft.com/dotnet/sdk:8.0

代码运行环境: mcr.microsoft.com/dotnet/aspnet:8.0

如果下载github资源有问题,可以尝试添加加速器。


File: docs/claw-cloud.md

Claw免费容器部署

教程

点击 https://console.run.claw.cloud/signin 注册账号,选择使用 GitHub 账号注册并登录。

成功后,每个月会赠送 $5 额度,跑 BiliTool 绰绰有余。

左上角可以选择一个区域,然后点击 App Store。

搜索BiliTool并点击如下搜索结果。

点击Deploy App按钮一键部署。

等待半分钟左右,进入容器 Detail 页面,点击如下链接即可访问站点:

消息推送

建议使用环境变量配置:

配置值见:confifuration

费用

官方模板默认配置为 0.25C 512M,每天 $0.06,一个月 30 * 0.06 = $1.8,每月赠送是 $5,还很富裕。

其他

账号

  • 默认用户名:admin
  • 默认密码:BiliTool@2233

首次登陆后,请立即修改账号和密码!

速度

不同区域速度可能有差异,可自己切换尝试。

如果速度慢可能会导致页面短时无响应,可稍作等待,或手动刷新。

更新

右上角Update进行版本更新,如果更新后启动异常,请尝试Pause然后再Restart。


File: docs/configuration.md

配置说明

[目录]

1. 配置方式

1.1. 方式一:修改配置文件

推荐使用Release包在本地运行的朋友使用,直接打开文件,将对应的配置值填入,保存即可生效。

默认有3个配置文件:appsettings.json、appsettings.Development.json、appsettings.Production.json,分别对应默认、开发与生产环境。

对于不是开发人员的大部分人来说,只需要关注appsettings.Production.json即可。

1.2. 方式二:命令启动时通过命令行参数配置

在使用命令行启动时,可使用-key=value的形式附加配置,所有可用的命令行参数均在 命令行参数映射表 中。

  • 使用跨平台的依赖包

各个系统只要安装了net5环境,均可使用dotnet命令启动,命令样例:

text
dotnet Ray.BiliBiliTool.Console.dll -cookieStr=abc -numberOfCoins=5
  • Windows系统

使用自包含包(win-x86-x64.zip),命令样例:

text
Ray.BiliBiliTool.Console.exe -cookieStr=abc -numberOfCoins=5
  • Linux系统

使用自包含包(linux.zip),命令样例:

text
Ray.BiliBiliTool.Console -cookieStr=abc -numberOfCoins=5

如映射文件所展示,支持使用命令行配置的配置项并不多,也不建议大量地使用该种方式进行配置。使用包运行的朋友,除了改配置文件和命令行参数配置外,还可以使用环境变量进行配置,这也是推荐的做法,如下。

1.3. 方式三:添加环境变量(推荐)

所有的配置项均可以通过添加环境变量来进行配置。如:

Linux下运行Web:

bash
# 添加环境变量作为配置:
export RunTasks="Daily"
export BiliBiliCookies__1="abc"
export BiliBiliCookies__2="efg"
export DailyTaskConfig__NumberOfCoins="3"

# 开始运行程序:
dotnet BiliBiliTool.Web.dll

Linux下运行Console:

bash
# 添加环境变量作为配置:
export Ray_RunTasks="Daily"
export Ray_BiliBiliCookies__1="abc"
export Ray_BiliBiliCookies__2="efg"
export Ray_DailyTaskConfig__NumberOfCoins="3"

# 开始运行程序:
dotnet Ray.BiliBiliTool.Console.dll

注意Console需要添加Ray_前缀,win系统使用set关键字代替export。

1.4. 方式四:托管在青龙面板上,使用面板的环境变量页或配置文件页进行配置

青龙面板配置,其本质还是通过环境变量进行配置,有如下两种方式。

  • 环境变量页[推荐]

例如:

名称:Ray_BiliBiliCookies__1

值:abcde

  • 配置文件页

例如,配置Cookie和推送:

text
export Ray_BiliBiliCookies__1="_uuid=abc..."
export Ray_Serilog__WriteTo__9__Args__token="abcde"

配置文件页添加、修改配置,需要重启青龙容器使之生效,环境变量页则可以立即生效,所以推荐使用环境变量页配置。

2. 优先级

以上 4 种配置源,其优先级由低到高依次是:json文件 < 环境变量 < 命令行。

高优先级的配置会覆盖低优先级的配置。

3. 详细配置说明

Console项目(青龙)的环境变量需要添加Ray_前缀,其他不用。
比如,原始配置Key为BiliBiliCookies__1,Console则为Ray_BiliBiliCookies__1。

必填,数组,可以多个。

TITLE CONTENT 示例
配置Key BiliBiliCookies__1
值域 字符串,英文分号分隔,来自浏览器抓取 export BiliBiliCookies__1=abc=123;def=456;
默认值 空
TITLE CONTENT 示例
配置Key BiliBiliCookies__2
值域 字符串,英文分号分隔,来自浏览器抓取 export BiliBiliCookies__1=abc=123;def=456;
默认值 空

3.2. 安全相关的配置

3.2.1. 是否跳过执行任务

用于特殊情况下,通过配置灵活的开启和关闭整个应用。

配置为关闭后,程序会跳过所有任务,不会调用B站任何接口。

TITLE CONTENT 示例
配置Key Security__IsSkipDailyTask
值域 [true,false] export Security__IsSkipDailyTask=true
默认值 false

3.2.2. 随机睡眠的最大时长

用于设置程序启动后,随机睡眠时间的最大上限值,单位为分钟。

这样可以避免程序每天准点地在同一时间运行太像机器。

配置为0则不进行睡眠。

TITLE CONTENT
配置Key Security__RandomSleepMaxMin
值域 数字
默认值 20

3.2.3. 两次调用B站Api之间的间隔秒数

用于设置两次Api请求之间的最短时间间隔,避免程序在1到2秒内连续调用B站的Api过快。

TITLE CONTENT
配置Key Security__IntervalSecondsBetweenRequestApi
值域 [0,+]
默认值 20

3.2.4. 间隔秒数所针对的HttpMethod

间隔秒数所针对的HttpMethod类型,服务于上一个配置。服务器一般对GET请求不是很敏感,建议只针对POST请求做间隔就可以了。

TITLE CONTENT
配置Key Security__IntervalMethodTypes
值域 [GET,POST],多个以英文逗号分隔
默认值 POST

3.2.5. 请求B站接口时头部传递的User-Agent

TITLE CONTENT
配置Key Security__UserAgent
值域 字符串,可以F12从自己的浏览器获取
默认值 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41

获取浏览器中自己的UA的方法见下图:

3.2.6. App请求B站接口时头部传递的User-Agent

TITLE CONTENT
配置Key Security__UserAgentApp
值域 字符串,可以F12从自己的浏览器获取
默认值 Mozilla/5.0 (Linux; Android 12; SM-S9080 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36 os/android model/SM-S9080 build/7760700 osVer/12 sdkInt/32 network/2 BiliApp/7760700 mobi_app/android channel/bili innerVer/7760710 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 7.76.0 os/android model/SM-S9080 mobi_app/android build/7760700 channel/bili innerVer/7760710 osVer/12 network/2

获取浏览器中自己的UA的方法见下图:

3.2.7. WebProxy(代理)

支持需要账户密码的代理。

TITLE CONTENT
配置Key Security__WebProxy
值域 字符串,形如:user:password@host:port
默认值 无

3.3. 每日任务相关

3.3.1. 是否开启观看视频任务

当该配置被设置为false时会导致大积分任务中的签到领额外10点经验的任务不能自动完成。

TITLE CONTENT
配置Key DailyTaskConfig__IsWatchVideo
值域 [true,false]
默认值 true

3.3.2. 是否开启分享视频任务

TITLE CONTENT
配置Key DailyTaskConfig__IsShareVideo
值域 [true,false]
默认值 true

3.3.3. 每日投币数量

每天投币的总目标数量,因为投币获取经验只与次数有关,所以程序每次投币只会投1个,也就是说该配置也表示每日投币次数。

TITLE CONTENT
配置Key DailyTaskConfig__NumberOfCoins
值域 [0,5],为安全考虑,程序内部还会做验证,最大不能超过5
默认值 5

3.3.4. 投币时是否同时点赞

TITLE CONTENT
配置Key DailyTaskConfig__SelectLike
值域 [true,false]
默认值 false

3.3.5. 优先选择支持的up主Id集合

通过填入自己选择的up主ID,以后观看、分享和投币,都会优先从配置的up主下面挑选视频,如果没有找到,则会去你的特别关注列表中随机再获取,再然后会去普通关注列表中随机获取,最后会去排行榜中随机获取。

注意:该配置的默认值是作者的upId,如需换掉的话,直接更改即可。

TITLE CONTENT
配置Key DailyTaskConfig__SupportUpIds
值域 up主ID,多个用英文逗号分隔,默认是作者本人的UpId,如需删除可以配置为空格字符串或"-1",也可以配置为其他人的UpId
默认值 作者的upId

获取UP主的Id方法:打开bilibili,进入欲要选择的UP主主页,在url中和简介中,都可获得该UP主的Id,如下图所示:

3.3.6. 每月几号自动领取会员权益

TITLE CONTENT
配置Key DailyTaskConfig__DayOfReceiveVipPrivilege
值域 [-1,31],-1表示不指定,默认每月1号;0表示不领取
默认值 1

3.3.7. 每月几号进行直播中心银瓜子兑换硬币

TITLE CONTENT
配置Key DailyTaskConfig__DayOfExchangeSilver2Coin
值域 [-1,31],-1表示不指定,默认每月最后一天;-2表示每天;0表示不进行兑换
默认值 -1

3.3.8. Lv6后开启硬币白嫖模式

TITLE CONTENT
配置Key DailyTaskConfig__SaveCoinsWhenLv6
值域 [true,false],true表示开启,Lv6的账号不会投币
默认值 false

3.3.9. 是否开启专栏投币

TITLE CONTENT
配置Key DailyTaskConfig__IsDonateCoinForArticle
值域 [true,false]
默认值 false

3.4. 天选时刻抽奖相关

3.4.1. 根据关键字排除奖品

TITLE CONTENT
配置Key LiveLotteryTaskConfig__ExcludeAwardNames
值域 一串字符串,多个关键字使用|符号隔开
默认值 舰|船|航海|代金券|自拍|照|写真|图

3.4.2. 根据关键字指定奖品

TITLE CONTENT
配置Key LiveLotteryTaskConfig__IncludeAwardNames
值域 一串字符串,多个关键字使用|符号隔开
默认值 空

3.4.3. 天选抽奖后是否自动分组关注的主播

TITLE CONTENT
配置Key LiveLotteryTaskConfig__AutoGroupFollowings
值域 [true,false]
默认值 true

3.4.4. 天选筹抽奖主播Uid黑名单

不想参与抽奖的主播Upid集合,多个用英文逗号分隔,配置后不会参加黑名单中的主播的抽奖活动。默认值是目前已知的中奖后拒绝发奖的Up,后期还会继续补充,也反映反馈。

TITLE CONTENT
配置Key LiveLotteryTaskConfig__DenyUids
值域 字符串,如"65566781,1277481241"
默认值 "65566781,1277481241,1643654862,603676925"

3.5. 批量取关相关

3.5.1. 想要批量取关的分组名称

TITLE CONTENT
配置Key UnfollowBatchedTaskConfig__GroupName
值域 字符串
默认值 天选时刻

3.5.2. 批量取关的人数

TITLE CONTENT
配置Key UnfollowBatchedTaskConfig__Count
值域 数字,[-1,+],-1表示全部
默认值 5

3.5.3. 取关白名单

TITLE CONTENT
配置Key UnfollowBatchedTaskConfig__RetainUids
值域 字符串,多个使用英文逗号分隔
默认值 108569350

3.6. 大积分相关

3.6.1. 自定义观看番剧

TITLE CONTENT
配置Key VipBigPointConfig__ViewBangumis
值域 番剧的ssid(season_id)
默认值 33378(名侦探柯南)

3.7. 免费B币券充电

3.7.1. 充电对象

充电对象的upId,-1表示不指定,默认为自己充电;其他Id则会尝试为配置的UpId充电。

注意:之前可以不配置,默认为自己充电,但后来阿B改了规则,不再允许自己冲自己。。。

建议配置为自己小号(小号需要认证为作者并开启充电),或者也可以配置为 -1,以支持作者~

TITLE CONTENT
配置Key ChargeTaskConfig__AutoChargeUpId
值域 up的Id字符串
默认值 无

3.8. 推送相关

v1.0.x仅支持推送到Server酱,v1.1.x之后重新定义了推送地概念,将推送仅看作不同地日志输出端,与Console、File没有本质区别。

配置多个,多个端均会收到日志消息。推荐Telegram、企业微信、Server酱。

3.8.1. 是否开启每个账号单独推送消息

TITLE CONTENT
配置Key Notification__IsSingleAccountSingleNotify
意义 开启后,每个账号会单独推送消息。否则多账号合并只推送一条消息
值域 [true,false]
默认值 true

3.8.2. Telegram机器人

3.8.2.1. botToken

点击 https://core.telegram.org/api#bot-api 查看如何创建机器人并获取到机器人的botToken。

TITLE CONTENT
配置Key Serilog__WriteTo__3__Args__botToken
意义 用于将日志输出到Telegram机器人
值域 一串字符串
默认值 空

3.8.2.2. chatId

点击 https://api.telegram.org/bot{TOKEN}/getUpdates 获取到与机器人的chatId(需要用上面获取到的Token替换进链接里的{TOKEN}后访问)

P.S.访问链接需要能访问"外网",有vpn的挂vpn。

TITLE CONTENT
配置Key Serilog__WriteTo__3__Args__chatId
值域 一串字符串
默认值 空
命令行示范 无

3.8.2.3. proxy

使用代理

TITLE CONTENT
配置Key Serilog__WriteTo__3__Args__proxy
值域 一串字符串,格式为user:password@host:port
默认值 空
命令行示范 无

3.8.3. 企业微信机器人

在群内添加机器人,获取到机器人的WebHook地址,添加到配置中。

3.8.3.1. webHookUrl

TITLE CONTENT
配置Key Serilog__WriteTo__4__Args__webHookUrl
值域 一串字符串
默认值 空
命令行示范 无

3.8.4. 钉钉机器人

在群内添加机器人,获取到机器人的WebHook地址,添加到配置中。

机器人的安全策略,当前不支持加签,请使用关键字策略,推荐关键字:Ray 或 BiliBili

3.8.4.1. webHookUrl

TITLE CONTENT
配置Key Serilog__WriteTo__5__Args__webHookUrl
值域 一串字符串
默认值 空

3.8.5. Server酱

官网: http://sc.ftqq.com/9.version

3.8.5.1. TurboScKey(Server酱SCKEY)

获取方式请参考官网。

TITLE CONTENT
配置Key Serilog__WriteTo__6__Args__turboScKey
值域 一串字符串
默认值 空

3.8.6. 酷推

https://cp.xuthus.cc/

3.8.6.1. sKey

该平台可能还在完善当中,对接时我发现其接口定义不规范,且机器人容易被封,所以不推荐使用,且不接受提酷推推送相关bug。

TITLE CONTENT
配置Key Serilog__WriteTo__7__Args__sKey
值域 一串字符串
默认值 空

3.8.7. 推送到自定义Api

这是我简单封装了一个通用的推送接口,可以推送到任意的api地址,如果有自己的机器人或自己的用于接受日志的api,可以根据需要自定义配置。

3.8.7.1. api

TITLE CONTENT
配置Key Serilog__WriteTo__8__Args__api
值域 一串字符串
默认值 空

3.8.7.2. placeholder

TITLE CONTENT
配置Key Serilog__WriteTo__8__Args__placeholder
值域 一串字符串
默认值 空

3.8.7.3. bodyJsonTemplate

TITLE CONTENT
配置Key Serilog__WriteTo__8__Args__bodyJsonTemplate
值域 一串字符串
默认值 空

3.8.8. PushPlus[推荐]

官网: http://www.pushplus.plus/doc/

3.8.8.1. PushPlus的Token

获取方式请参考官网。

TITLE CONTENT
配置Key Serilog__WriteTo__9__Args__token
值域 一串字符串
默认值 空

3.8.8.2. PushPlus的Topic

获取方式请参考官网。

TITLE CONTENT
配置Key Serilog__WriteTo__9__Args__topic
值域 一串字符串
默认值 空

3.8.8.3. PushPlus的Channel

获取方式请参考官网。

TITLE CONTENT
配置Key Serilog__WriteTo__9__Args__channel
值域 一串字符串,[wechat,webhook,cp,sms,mail]
默认值 空

3.8.8.4. PushPlus的Webhook

获取方式请参考官网。

webhook编码(不是地址),在官网平台设定,仅在channel使用webhook渠道和CP渠道时需要填写

TITLE CONTENT
配置Key Serilog__WriteTo__9__Args__webhook
值域 一串字符串
默认值 空
命令行示范

3.8.9. Microsoft Teams

官网: https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook

3.8.9.1. Microsoft Teams的Webhook

webhook的完整地址,在Teams的Channel中获取,详细获取方式请参考官网。

TITLE CONTENT
配置Key Serilog__WriteTo__10__Args__webhook
值域 一串字符串
默认值 空
命令行示范

3.8.10. 企业微信应用推送

官网: https://developer.work.weixin.qq.com/tutorial/application-message

当corpId、agentId、secret均不为空时,自动开启推送,否则关闭。

toUser、toParty、toTag3个配置非必填,但不可同时为空,默认toUser为@all,向所有用户推送。

3.8.10.1. 企业微信应用推送的corpId

TITLE CONTENT
配置Key Serilog__WriteTo__11__Args__corpId
值域 一串字符串
默认值 空
命令行示范

3.8.10.2. 企业微信应用推送的agentId

TITLE CONTENT
配置Key Serilog__WriteTo__11__Args__agentId
值域 一串字符串
默认值 空
命令行示范

3.8.10.3. 企业微信应用推送的secret

TITLE CONTENT
配置Key Serilog__WriteTo__11__Args__secret
值域 一串字符串
默认值 空
命令行示范

3.9. 日志相关

3.9.1. 日志输出等级

为了美观, BiliBiliTool 默认只输出最低等级为 Information 的日志,保证只展示最精简的信息。

通过更改等级,可以指定日志输出的详细程度。

BiliBiliTool 使用 Serilog 作为日志组件,所以其值域与 Serilog 的日志等级选项相同,这里只建议在需要调试时改为Debug,应用会输出详细的调试日志信息,包括每次调用B站Api的请求参数与返回数据。

TITLE CONTENT
配置Key Serilog__WriteTo__0__Args__restrictedToMinimumLevel
值域 [Information,Debug]
默认值 1

3.9.2. 日志输出样式

这里的日志样式指的是 Console 的等级,即 GitHub Actions 里和微信推送里看到的日志。

通过更改模板样式,可以指定日志输出的样式,比如不输出时间和等级,做到最精简的样式。

BiliBiliTool 使用 Serilog 作为日志组件,所以可以参考 Serilog 的日志样式模板。

TITLE CONTENT
配置Key Serilog__WriteTo__0__Args__outputTemplate
值域 字符串
默认值 [{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}

3.9.3. 定时任务相关

适用于 方式四:docker容器化运行(推荐),用于配置定时任务。

3.9.4. 定时任务

以下环境变量的值应为有效的 cron 表达式。

当被设置时,对应定时任务将开启。

环境变量 定时任务
DailyTaskConfig__Cron 每日任务
LiveLotteryTaskConfig__Cron 天选时刻抽奖
UnfollowBatchedTaskConfig__Cron 批量取关
VipBigPointConfig__Cron 大会员大积分

File: docs/donate-list.md

赞赏

赞赏人 时间 金额 方式 留言 回复
Jonty 2020-11-04 ¥5 微信 不知可否加个联系方式,讨论一下b站小公举 你没有留微信号啊大兄弟
春歌 2020-11-06 ¥5 微信 赞赏一下~
雅南 2020-11-08 ¥1 微信 赞赏一下~
RainMeter 2020-11-09 ¥1 微信 大佬牛逼
1998 2020-11-10 ¥1 微信 谢谢大佬,但是投币总是失败 有问题可以加群讨论
Andy 2020-11-10 ¥1 微信 赞赏一下~
不若艳阳 2020-11-11 ¥10 微信 赞赏一下~
努力努力再努力 2020-11-11 ¥1 微信 赞赏一下~
Wandering Ghost 2020-11-12 ¥1 微信 好活,当赏
sadhu 2020-11-12 ¥1 支付宝 加油
浮蘭·鳥ドス 2020-11-12 ¥1 微信 加油!在一个微信公众号看到这个
Ⅶ 2020-11-12 ¥1 微信 太棒啦!支持您!
舞飞扬 2020-11-12 ¥1 支付宝 多谢bilibilitool
王雨桐 2020-11-13 ¥1 微信 感谢ps借用作者项目完成我开源选修作业——分析一款开源软件
郁宁 2020-11-13 ¥5 微信 Godd Job
半岛 2020-11-13 ¥1 支付宝 赞赏一下~
Wenson 2020-11-19 ¥10 微信 搞的不错👍
xingxing 2020-11-20 ¥1 支付宝 这东西太好用了,点个
2020-11-21 ¥10 微信 单纯问下,有做成云函数的可行性吗 目前没了解过云函数相关,有懂的朋友欢迎PR~
Gaogao 2020-11-21 ¥1 支付宝 老哥加油加油^0^
老狗 2020-11-23 ¥10 微信 好活当赏吗
2020-11-23 ¥10 微信
还输给回忆不成 2020-11-23 ¥1 微信
Winfor 2020-11-23 ¥5 微信 感谢分享
那个冰 2020-11-23 ¥1 微信 如果一开始努力的方向就是错误的,那么只会越来越忙。感谢
Luv(sic) part 2 2020-11-24 ¥1 微信 牛逼嗷,上班划水新技能get
刘小明 2020-11-24 ¥3 微信 大佬喝冰阔落
青翘 2020-11-25 ¥1 支付宝 赞赏一下~
CT 2020-11-25 ¥1 微信 感谢
Panda 2020-11-25 ¥1 微信 很好用的工具
Che 2020-11-25 ¥1 微信 微信推送的配置方法能不能说的再详细一点,没用过有点懵
张浩 2020-11-25 ¥1 微信 集资给你买霸王 真棒
骷髅刀皇 2020-11-26 ¥1 支付宝 外行人第一个再GitHub跑成功的源码
2020-11-26 ¥1 微信 项目有意思
ohh 2020-11-27 ¥1 微信 集资买霸王 duang😏 😏
夏风 2020-11-28 ¥1 支付宝 赞赏一下~
征服神的眼睛 2020-11-27 ¥1 微信 头发+1
长空X 2020-11-30 ¥1 支付宝 加油!我是hjkl950217 贡献的代码很棒,欢迎加入
旧城空梦 2020-11-30 ¥5 微信 拉我进下微信群,谢谢,我微信*** 已拉
Mr.华 2020-12-01 ¥1 微信 白嫖党 今天给你投币来了
暮雨 2020-12-01 ¥1 微信 不多说,好用412还没有解决 大于等于1.0.14版本解决啦
闪电 2020-12-01 ¥1 微信 欧拉拉
山水之间 2020-12-01 ¥1 微信 加油💪 💪
八八九九 2020-12-02 ¥1 微信 cool
。 2020-12-02 ¥1 微信 支持
Carnina 2020-12-06 ¥5 微信 谢谢大大的bili工具
大疼 2020-12-07 ¥1 支付宝 教程很细致,谢谢
2020-12-07 ¥1 微信 谢谢大佬B站的项目
Nirvana 2020-12-08 ¥1 微信 求进群我的微信*** 已拉
2020-12-17 ¥1 微信 微信昵称时空白的 是的
aiyΑ 2020-12-23 ¥1 微信
就这样被作业征服 2021-01-02 ¥1 微信 太棒了,十分感谢
けっこ 2021-01-03 ¥1 微信 bilibilitools加油! 加油~
Ruo 2021-01-05 ¥1 微信 加油加油 加油~
2021-01-06 ¥1 微信
199863nothing 2021-01-06 ¥1 支付宝 等俺五级给你买霸王洗发水 棒
小伊 2021-01-06 ¥1 支付宝 赞赏一下~
多喝热水吧你 2021-01-07 ¥10 微信 感谢作者,支持一下,太辛苦了 感谢
YNight-FZQ 2021-01-08 ¥5 微信 2021,要加油哦!感谢作者分享 一起加油~
外比巴卜 2021-01-09 ¥3 微信 加油^o^~,做的很棒 支持开源的你们更棒~
199863nothing 2021-01-09 ¥1 微信 求拉进群(ง •_•)ง 你没有留微信号啊大兄弟
黑影 2021-01-10 ¥5 微信 Mreblack7感谢7楼大大可以加微信群嘛qwq 你没有留微信号啊大兄弟
199863nothing 2021-01-11 ¥1 微信 微信号:***,大佬捞一捞我 已拉~
. 2021-01-12 ¥5 微信 进群进群,冲冲冲 你没有留微信号啊大兄弟

个人维护开源不易

如果你觉得我写的东西对你确实有帮助

或者,你就是单纯的想集资给我买瓶霸王增发液

那么下面的赞赏码可以扫一扫啦

(赞赏时记得留下【昵称】和【留言】,上面这么多留言要想要进群或者加好友的,一定一定要记得留微信号哈,微信赞赏页面是看不到微信号的~)

  • 微信扫码自动赞赏1元

  • 支付宝扫码自动赞赏1元


File: docs/questions.md

常见问题

[目录]

1. 运行出现异常怎么办?

第一步:根据异常信息,请先仔细阅读文档(特别是 常见问题文档 和 配置说明文档 ),查找相关信息

第二步:如果文档没有找到,请到 issues 下面查找相关问题,看是否有人其他人也遇到类似问题,并确认issue下是否已经有解决方案

第三步:如果仍没有解决,请将日志输出等级配置为Debug,该等级会输出详细的日志信息,修改后请再次运行,并查看详细的日志信息。如何配置请详见 配置说明文档

第四步:拿到详细日志后,如果自己无法根据日志信息确定问题,请将日志信息贴到讨论群里,群里会有大佬及时帮忙解答

第五步:如果根据详细日志信息可以确认是 Bug(缺陷),可以到 issues 下新建一条 issue 。如何新建issue请见下面的常见问题中的如何提交issue,如果是不符合要求的issue,会被关闭,严重的会被删除。

2. 如何提交issue(如何提交Bug或建议)

issues 被 GitHub 译为议题,用来为开源项目反馈 Bug、提出建议、讨论设计与需求等。

首先先提前感谢所有提交议题的朋友们,你们的反馈和建议会让开源程序优化的越来越好。

但为了使 issues 下面的议题便于维护,便于其他人搜索查找历史议题,避免淹没在一堆无用或重复的 issues 里,请大家自觉遵守下面的提交规范:

Ⅰ. 提交前请先确认自己的议题是否是新的议题(是否在文档中已有说明、是否已经有其他人提过类似的议题),重复议题会被标记为重复并关闭,严重的会被删除

Ⅱ. issue标题请填写完整,语义需清晰,以便在不点击进入详情时,仅根据标题就可以定位到该 issue 所反应的问题

Ⅲ. 如果是提交 bug ,请描述清楚问题,标明版本号、环境,并贴上详细日志信息(Debug等级的日志信息)。如果获取Debug等级的日志信息请参见配置说明文档,如果没有日志信息,或日志信息不是Debug等级的日志信息,或在没有日志的情况下描述也不清晰,导致无法复现或无法定位问题,该 issue 会被标记为不清晰的议题,且会被忽略或关闭,严重的会被删除。

3. Actions定时任务没有每天自动运行

Fork的仓库,actions默认是关闭的,需要对仓库进行1次操作才会触发webhook。

可以通过在页面上点击创建wiki来触发,也可以通过任意一次提交推送代码来触发。

4. Actions修改定时任务的执行时间

每日任务执行的时间,由.github/workflows/bilibili-daily-task.yml 中的cron表达式指定,默认为每日的0点整:

yml
schedule:
    - cron: '0 16 * * *' 
    # cron表达式,时区是UTC时间,比我们早8小时,如上所表示的是每天0点0分(24点整)

若要修改为自己指定的时间执行,有如下两种方式:

4.1. 方法一:修改yaml文件中的cron表达式

我们可以直接修改上述该文件中的cron表达式,然后提交。

个人不建议这么做,因为以后更新要注意冲突与覆盖问题,建议使用下面的方法二。

4.2. 方法二:添加 GitHub Environments 并设置延时

v1.1.3及之后版本,支持通过添加GitHub Environments来设置延时运行,即在每日0点整触发 Actions 后,会再多执行一个延时操作,延时时长可由我们自己设置。

比如想设置为每天23点执行,只需要将这个延时时常设置为1380分钟(23个小时)即可。方法如下:

  • Ⅰ.找到 Production Environments

运行完 bilibili-daily-task.yml 之后,在 Settings ——> Environments 中会自动多出一个名为 Production 的环境,如下图所示:

如果没有,也可以自己手动点击添加。

  • Ⅱ.设置延时时长

勾选 Wait timer,并填写延时时长,单位为分钟,如下图所示:

下面给出一些常用的分钟数换算供参考:

时间 从0点开始计算的分钟数
6点整 360
8点整 480
9点整 540
12点整 720
14点整 840
18点整 1080
22点整 1320
23点整 1380

注意,Actions 目前本身是有20分钟左右的延时的,是 GitHub 暂未解决的缺陷,属于正常现象。

设置成功后,再次运行 Actions 会发现触发后会自动进入倒计时状态,等倒计时结束后才会真正运行之后的内容,如下图所示:

5. 我 Fork 之后怎么同步原作者的更新内容?

Fork 被 GitHub 译为复刻,相当于拷贝了一份源作者的代码到自己的 Repository (仓库)里,Fork 后,源作者更新自己的代码内容(比如发新的版本),一般情况下 Fork 的项目并不会自动更新源作者的修改。

BiliBiliTool内置了自动同步的 actions(即下面的方法二),默认情况下,Fork的仓库会在每周一会自动拉取更新源仓库内容,如想要更新请参考方法二。

这里共提供如下4种方法同步更新的方法:

5.1. 方法一:删掉自己的仓库再重新Fork

这是最最最保守的方法,删掉后重新Fork会导致之前配置过的GitHub Secrets和提交的代码更改全部丢掉,只能重新部署。
所以,请把该方法放到保底的位置,即如果你已经尝试了下面所有方法都还不能成功,再保底考虑使用该方法。

5.2. 方法二:使用提供的 Repo Sync 工作流脚本同步

BiliBiliTool提供了一个用于自动同步上游仓库的脚本 repo-sync.yml,执行后,会拉取源仓库最新内容直接覆盖掉自己的代码修改内容。该脚本默认开启,且每周一自动执行一次,如要关闭,可以将yml文件里的schedule使用#号注释掉。

脚本内部需要一个Token参数完成授权,我们要做的共两步:1.获取自己的 Token 并添加到 Secrets 中,2.运行脚本。

详细步骤如下:

Ⅰ. >>点击生成 Token ,将生成的 Token 复制下来。

Token 只显示一次,没复制只能重新生成。更多关于加密机密的说明可以查看 Github 官方文档:加密机密。

Ⅱ. 将上一步生成的 Token 添加到 Github Secrets 中。

GitHub Secrets CONTENT
Name PAT
Value 上一步生成的 Token

Ⅲ. 手动触发 workflow 工作流进行代码同步。

该脚本是在v1.0.12添加的,如果你的版本低于该版本,没有该yaml文件,也可以直接在自己的 Fork 的仓库下面新建一个,然后将我的文件内容拷贝过去,提交文件,剩下的再继续按照上面流程走就可以了。

5.3. 方法三:手动PR同步

由于大量不懂PR的人乱操作,导致每次更新版本,源仓库都收到大量辣鸡无效的PR请求,现删除了方法三。

5.4. 方法四:使用插件 Pull App 同步

需要安装 Pull app 插件。

安装过程中会让你选择要选择那一种方式;

All repositories表示同步已经 frok 的仓库以及未来 fork 的仓库;

Only select repositories表示仅选择要自己需要同步的仓库,其他 fork 的仓库不会被同步。

根据自己需求选择,实在不知道怎么选择,就选 All repositories。

点击 install,完成安装。

Pull App 可以指定是否保留自己已经修改的内容,分为下面两种方式,如果你不知道他们的区别,就请选择方式一;如果你知道他们的区别,并且懂得如何解决 git 冲突,可根据需求自由选择任一方式:

5.4.1. Pull App 方式一: 源作者内容直接覆盖自己内容

该方式会将源作者的内容直接强制覆盖到自己的仓库中,也就是不会保留自己已经修改过的内容。
步骤如下:

Ⅰ. 确认已安装 Pull app 插件。

Ⅱ. 编辑 pull.yml 文件,将第 5 行内容修改为 mergeMethod: hardreset,然后保存提交。

(默认就是hardreset,如果未修改过,可以不用再次提交)

完成后,上游代码更新后 pull 插件会自动发起 PR 更新覆盖自己仓库的代码!

当然也可以立即手动触发同步:https://pull.git.ci/process/${owner}/${repo}

5.4.2. Pull App 方式二: 保留自己内容

该方式会在上游代码更新后,判断上游更新内容和自己分支代码是否存在冲突,如果有冲突则需要自己手动合并解决(也就是不会直接强制直接覆盖)。如果上游代码更新涉及 workflow 里的文件内容改动,这时也需要自己手动合并解决。

步骤如下:

Ⅰ. 确认已安装 Pull app 插件。

Ⅱ. 编辑 pull.yml 文件,将第 5 行内容修改为 mergeMethod: merge,然后保存提交。

完成后,上游代码更新后 pull 插件就会自动发起 PR 更新自己分支代码!只是如果存在冲突,需要自己手动去合并解决冲突。

当然也可以立即手动触发同步:https://pull.git.ci/process/${owner}/${repo}

6. 本地或服务器如何安装.net环境

请见官方文档

7. 如何关停Actions运行

推荐做法有两种:一是使用配置关停应用的每日任务,二是关停Actions。

当然,直接删库也是可以的,但是不推荐,除非是已确认以后都不会再使用的情况。因为删库会让已有配置都丢失,且使自动更新版本的Actions失效。

7.1. 方法一:使用配置关停每日任务

详情见 配置说明文档。

该方法是在应用层面关闭每日任务,即Actions还是会每天运行,只是进入程序后,应用不会去执行每日任务,即不会调用任何接口。如果配置了推送,每天仍能收到推送消息。

7.2. 方法二:关停Actions

点击Actions进入Workflows列表,点击名称为bilibili-daily-task的Workflow,在搜索框右侧有一个三个点的设置按钮,点击按钮后,在弹出的下拉列表里选中Disable workflow项即可,如下图所示:

该方法是直接关闭了Actions,即不会触发每天定时的Actions。


File: docs/runInLocal.md

下载程序包到本地或服务器运行

如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,即可调式和运行。

跑什么任务,可以在Ray.BiliBiliTool.Console项目下的appsettings.json文件里的RunTasks指定。

对于不是开发者的朋友,可以通过下载 BiliBiliTool/release 到本地或任意服务器运行。

1. 任意系统,但已安装`.NET 8.0`

任何操作系统,不管是Win还是Linux还是mac,只要已安装了.NET 8.0 环境,均可通过下载net-dependent.zip运行。

下载解压后,进入应用目录,执行dotnet ./Ray.BiliBiliTool.Console.dll --runTasks=Login

会出现二维码,扫码登录后即可运行各个任务。

P.S.这里的运行环境指的是 .NET Runtime 8.0.0 ,安装方法可详见 常见问题 中的 本地或服务器如何安装.net环境

2. Win

请下载 win-x86-x64.zip,此文件已自包含(self-contained)运行环境。

解压后,在应用目录打开cmd或powershell,执行.\Ray.BiliBiliTool.Console.exe --runTasks=Login,扫码登录。
也可以直接双击Ray.BiliBiliTool.Console.exe来运行,建议使用windows自带的定时任务来执行它

3. Linux:

text
wget https://github.com/RayWangQvQ/BiliBiliToolPro/releases/download/0.3.1/bilibili-tool-pro-v0.3.1-linux-x64.zip
unzip bilibili-tool-pro-v0.3.1-linux-x64.zip
cd ./linux-x64/
./Ray.BiliBiliTool.Console --runTasks=Login

4. macOS

请下载 osx-x64.zip,解压后在应用目录运行./Ray.BiliBiliTool.Console --runTasks=Login

5. 配置

最简单的方式是直接修改应用目录下的appsettings.json,详细方法可参考下面的配置说明章节。


File: gitHubActions/README.md

GitHub Actions 部署

介绍

GA 是微软(巨硬)收购 G 站之后新增的内置 CI/CD 方案,其核心就是一个可以运行脚本的小型服务器。

有了它,我们就可以实现每天线上自动运行我们的应用程序,通过配置还可以实现版本的自动同步更新。

步骤

复刻项目

首先点击本页面右上角的 fork 按钮,复刻本项目到自己的仓库

添加 Secrets 配置

进入自己 fork 的仓库,点击 Settings-> Secrets-> New Secrets, 添加 1 个 Secrets,其名称为COOKIESTR,值为刚才我们保存的 cookie 字符串。它们将作为配置项,在应用启动时传入程序。

测试运行 Actions

刚 Fork 完,所有 Actions 都是默认关闭的,都配置好后,需要手动点击 Enable 开启 Actions。开启后请手动执行一次工作流,验证是否可以正常工作,操作步骤如下图所示:

运行结束后,请查看运行日志:

其他

Actions 的执行策略默认是每天 0 点整触发运行,如要设置为指定的运行时间,请详见下面常见问题章节中的《Actions 如何修改定时任务的执行时间?》

建议每个人都设置下每日执行时间!不要使用默认时间!最好也不要设定在整点,错开峰值,避免 G 站的同一个IP在相同时间去请求 B 站接口,导致 IP 被禁!

应用运行后,会进行0到30分钟的随机睡眠,是为了使每天定时运行时间在范围内波动。刚开始如果需要频繁调试,建议使用empty-task.yml来调试,或者参考下面的个性化自定义配置章节,将睡眠配置为1分钟,避免每次测试都需要等待半小时


File: helm/README.md

BiliBili Tool

BiliBiliTool 是一个自动执行任务的工具,当我们忘记做某项任务时,它会像一个贴心小助手,按照我们预先吩咐它的命令,在指定频率、时间范围内帮助我们完成计划的任务。

Overview of BiliBili Tool

TL;DR

在集群中通过chart部署

console
$ git clone https://github.com/RayWangQvQ/BiliBiliToolPro.git
$ cd ${local_code_repo}/helm/bilibili-tool
[optional]$ vim values.yaml # provides your own settings like cookies
$ helm install <my_release_name> .

如果没有在values.yaml中提供cookie,那么需要手动扫描日志中的二维码进行登录

console
$kubectl logs -f

如果在values.yaml中提供了cookie,那么可以不扫描也可以扫描进行登录,上面的步骤可以暂时不执行

Introduction

这个chart通过Helm在Kubernetes集群上拉起一个BiliBiliToolProdeployment

Prerequisites

  • Kubernetes
  • Helm

或者

  • Kind
  • Helm

安装Chart

安装Chart并命名为 my-release:

console
$helm repo add my-repo <my_chart_repo>
$helm install my-release my-repo/bilibili-tool(:1.0.1)

上述命令需要用户在values.yaml里提供cookie等必须信息
Parameters 部分列出了所有可供自定义的值

Tip: helm list 可以列出当前已经列出的所有的release

卸载 Chart

卸载 my-release deployment:

console
$helm delete my-release

上述命令卸载掉所有的release相关资源

Parameters

Name Description Value Required
replicaCount Deployment Relicas Count 1 true
namespace Deployment and ConfigMap deployed namespace default true
configmap.name ConfigMap name contains the entry files entry true
image.repository Global Dockevr registry zai7lou/bilibili_tool_pro true
image.tag Image Tag 1.0.1 true
image.pullPolicy Image Pull Policy IfNotPresent true
imagePullSecrets Image Pull Secrets [] false
nameOverride Deployment name in the Chart "" false
fullnameOverride Release name when set "" false
resources.limits The resources limits for the BiliBili Tool containers {} true
resources.limits.memory The limited memory for the BiliBili Tool containers 180Mi true
resources.limits.cpu The limited cpu for the BiliBili Tool containers 100m true
resources.requests The resources requests for the BiliBili Tool containers {} true
resources.requests.memory The requested memory for the BiliBili Tool containers 180Mi true
resources.requests.cpu The requested cpu for the BiliBili Tool containers 100m true
affinity Affinity for pod assignment {} false
nodeSelector Node labels for pod assignment {} false
tolerations Tolerations for pod assignment [] false
env Environment variables for the BiliBili Tool container, Ray_BiliBiliCookies__1 and Ray_DailyTaskConfig__Cron are required, others vars pls take a look at supported envvars [] true
volumes.log.enabled Enable persistent log volume for BiliBili Tool or not "false" true
volumes.log.path The host path mounted into pod "/tmp/Logs" false
volumes.log.name The volume name "bili-tool-vol" false
volumes.login.enabled Enable persistent log volume contains the entries for BiliBili Tool or not "false" true
volumes.login.name The volume name "entry" false
podAnnotations The annotations for the BiliBili Tool pod {} false

可以用指定helm install命令行参数 --set key=value[,key=value], 比如

console
$ helm install my-release \
  --set  \
    relicas=1

也可以通过指定一个YAML格式的values文件来配置以上参数,比如

console
$helm install my-release -f values.yaml my_chart_repo/bilibili-tool

Tip: 你可以使用默认的 values.yaml进行配置

当想更新一些变量时,可以通过指定参数或者直接修改YAML的values文件进行更新

console
$helm upgrade my-release my_chart_repo/bilibili-tool <-f values> or <--set-file ...>

Upgrade

建议重新装release

[Optional]本地Cluster运行

通过安装kind工具在本地运行一个Kubernetes Cluster

go 1.17+ and Docker installed

console
$ go install sigs.k8s.io/[email protected] && kind create cluster <--config kind_config_file>
$ cat <kind_config_file>
$ kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker 
$ EOF

at least one worker node otherwise you have to provides tolerations in the values.yaml to schedule on master node


File: krew/README.md

BiliBiliPro Kubectl Plugin

Prerequisites

  • Kubernetes >= v1.23.0.
  • go >= v1.18
  • kubectl installed on your local machine, configured to an existing healthy Kubernetes cluster.
  • krew plugin installed

Install Plugin

Command: cd ./krew && make deploy
The binary will be generated in cmd/ install it alonside the kubectl binary.

For example: the kubectl is installed under /usr/bin, then put the bilibilipro plugin under /usr/bin too.

Plugin Commands

Deployment && Update

Prerequsites: please make sure you have the right permission to at least manage namespaces/deployments

Command: kubectl bilipro init --config config.yaml

Creates Deployment with the needed environments.

Optional Options:

  • --image=zai7lou/bilibili_tool_pro:2.0.1
  • --namespace=bilipro
  • --image-pull-secret=<docker secrets>
  • --login to scan QR code to login

Required Options:

  • --config=<config.yaml>

The content of <config.yaml> is a yaml array, please refer to the example config yaml under the krew directory.

For example

yaml
- name: Ray_BiliBiliCookies__2
  value: "cookie"
  # DailyTrigger - required
- name: Ray_DailyTaskConfig__Cron
  value: "11 11 * * *"

Suggestions: Deploy this workload in namespace other than default or kube-* namespace, because the delete logic should be improved

Deletion

Command: kubectl bilipro delete [options]

Deletes Deployment.
v
Optional Options:

  • --namespace=<deploy-namespace>
  • --name=<deploy-name>

Version

Command: kubectl bilipro version

Output the plugin version.

Package

Pls refer to installation, you can package your own krew plugin