diff --git a/CHANGELOG.md b/CHANGELOG.md index 40f920e66..2bc05e509 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,3 +55,11 @@ - Feature(#240):新增gotify推送 - Feature(#259):大会员状态改为枚举类型,当非会员时自动跳过大积分任务 - Feature:更新、优化docker部署文档 +## 0.2.2 +- 新增`podman`部署教程 +- 合并PR(#264),腾讯云定时任务补充新增的大会员大积分任务,感谢@layui0320 +- 合并PR(#262),更新docker的entry.sh,感谢@syrinka +- 合并PR(#308 #312),新增Chart部署,感谢@chenliu1993 +- 合并PR(#309)新增lv6后开启白嫖模式的配置(多账号时可以实现不足lv6的继续投币,达到lv6的开始白嫖),感谢@cluom +- 优化青龙安装dotnet的脚本,改为使用官方`dotnet-install.sh`脚本安装(之前测试网络不通,后发现--no-cdn可以) +- 优化青龙的执行脚本,提取公共部分,并且在执行前会尝试安装一次dotnet,会清理一次缓存 diff --git a/Dockerfile b/Dockerfile index 350b2972d..793987493 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ FROM base AS final WORKDIR /app ENV TIME_ZONE=Asia/Shanghai COPY --from=publish /app/publish . -COPY ./docker/entry.sh ./docker/crontab /app/ +COPY ./docker/scripts/* ./docker/crontab /app/scripts/ RUN ln -fs /usr/share/zoneinfo/$TIME_ZONE /etc/localtime \ && echo $TIME_ZONE > /etc/timezone \ && cp /etc/apt/sources.list /etc/apt/sources.list.bak \ @@ -45,7 +45,9 @@ RUN ln -fs /usr/share/zoneinfo/$TIME_ZONE /etc/localtime \ && apt-get update \ && apt-get install -y cron tzdata tofrodos \ && apt-get clean \ - && fromdos /app/entry.sh \ - && chmod +x /app/entry.sh \ - && fromdos /app/crontab -ENTRYPOINT ["/bin/bash", "-c", "/app/entry.sh"] + && fromdos /app/scripts/entry_before.sh \ + && fromdos /app/scripts/entry.sh \ + && fromdos /app/scripts/entry_after.sh \ + && chmod -R +x /app/scripts/ \ + && fromdos /app/scripts/crontab +ENTRYPOINT ["/bin/bash", "-c", "/app/scripts/entry.sh"] diff --git a/README.md b/README.md index 7630ba1a9..3cb5d732f 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,15 @@ BiliBiliTool - [1. 如何使用](#1-如何使用) - - [1.1. 第一步:获取BiliBili的 Cookie](#11-第一步获取BiliBili的-cookie) + - [1.1. 第一步:获取BiliBili的 Cookie](#11-第一步获取bilibili的-cookie) - [1.2. 第二步:配置 Cookie 并运行 BiliBiliTool](#12-第二步配置-cookie-并运行-bilibilitool) - - [1.2.1. 方式一:Docker容器化运行(推荐)](#121-方式一docker容器化运行推荐) - - [1.2.2. 方式二:青龙运行](#122-方式二青龙运行) + - [1.2.1. 方式一:青龙运行(推荐)](#121-方式一青龙运行推荐) + - [1.2.2. 方式二:Docker或Podman容器化运行](#122-方式二docker或podman容器化运行) - [1.2.3. 方式三:下载程序包到本地或服务器运行](#123-方式三下载程序包到本地或服务器运行) - [1.2.4. 方式四:腾讯云函数SCF](#124-方式四腾讯云函数scf) - - ~~[1.2.5. 方式五:GitHub Actions](#125-方式五github-actions)~~ + - [1.2.5. 方式五:~~GitHub Actions~~](#125-方式五github-actions) + - [1.2.6. 方式六:Chart部署](#126-方式六chart部署) + - [1.3. 消息推动(可选)](#13-消息推动可选) - [2. 功能任务说明](#2-功能任务说明) - [3. 个性化自定义配置](#3-个性化自定义配置) - [4. 多账号支持](#4-多账号支持) @@ -67,8 +69,7 @@ BiliBiliTool - **本应用仅用于学习和测试,作者本人并不对其负责,请于运行测试完成后自行删除,请勿滥用!** - **所有代码都是开源且透明的,任何人均可查看,程序不会保存或滥用任何用户的个人信息** -- **应用内几乎所有功能都开放为了配置(如任务开关、日期、upId等),请仔细阅读配置文档,自己对自己的配置负责** - +- **应用内几乎所有功能都开放为了配置(如任务开关、日期、id等),详细信息可阅读配置文档,请自己对配置负责** 本地运行图示: @@ -95,14 +96,16 @@ BiliBiliTool 实现自动完成任务的原理,是通过调用一系列开放 ### 1.2. 第二步:配置 Cookie 并运行 BiliBiliTool -#### 1.2.1. 方式一:Docker容器化运行(推荐) +#### 1.2.1. 方式一:青龙运行(推荐) -[>>Docker部署说明](docker/README.md) +[>>青龙部署教程](qinglong/README.md) +#### 1.2.2. 方式二:Docker或Podman容器化运行 -#### 1.2.2. 方式二:青龙运行 +[>>Docker部署说明](docker/README.md) + +[>>Podman部署说明](podman/README.md) -[>>青龙部署教程](qinglong/README.md) #### 1.2.3. 方式三:下载程序包到本地或服务器运行 如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,配置 Cookie 后即可直接本地进行运行和调试。 @@ -162,16 +165,24 @@ Ray.BiliBiliTool.Console #### 1.2.4. 方式四:腾讯云函数SCF +当前腾讯云函数已改为收费模式,不推荐。 + [>>腾讯云函数部署说明](tencentScf/README.md) -#### 1.2.5. 方式五:GitHub Actions +#### 1.2.5. 方式五:~~GitHub Actions~~ + 暂时删掉该方式避避风头。 **建议所有使用该方式运行的朋友,暂时先替换其他运行方式,避免造成不必要的损失。** +#### 1.2.6. 方式六:Chart部署 + +[>>Chart部署说明](helm/README.md) + +### 1.3. 消息推动(可选) -如果配置了推送,执行成功后接收端会收到推送消息,推送效果如下所示: +如果配置了推送,执行成功后,指定的接收端会收到推送消息,推送效果如下所示: ![微信推送图示](docs/imgs/wechat-push.png) diff --git a/common.props b/common.props index 4a3626e8a..0300fb102 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ Ray - 0.2.1 + 0.2.2 $(NoWarn);CS1591;CS0436 diff --git a/docker/README.md b/docker/README.md index 6c9269452..656eca55d 100644 --- a/docker/README.md +++ b/docker/README.md @@ -56,7 +56,7 @@ wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sa docker compose up -d # 查看启动日志 -docker logs -f bilibili_tool_pro +docker logs -f bili ``` ### 2.2. 修改bili下的docker-compose.yml,填入cookie @@ -83,10 +83,10 @@ docker compose up -d docker compose stop # 查看实时日志 -docker logs -f bilibili_tool_pro +docker logs -f bili # 进入容器 -docker exec -it bilibili_tool_pro /bin/bash +docker exec -it bili /bin/bash # 手动更新容器 docker compose pull && docker compose up -d @@ -98,8 +98,8 @@ docker compose pull && docker compose up -d ``` # 生成并运行容器 -docker run -d --name="bilibili_tool_pro" \ - -v /bilibili_tool/Logs:/app/Logs \ +docker run -d --name="bili" \ + -v /bili/Logs:/app/Logs \ -e Ray_BiliBiliCookies__1="cookie" \ -e Ray_DailyTaskConfig__Cron="0 15 * * *" \ -e Ray_LiveLotteryTaskConfig__Cron="0 22 * * *" \ @@ -108,7 +108,7 @@ docker run -d --name="bilibili_tool_pro" \ zai7lou/bilibili_tool_pro # 查看实时日志 -docker logs -f bilibili_tool_pro +docker logs -f bili ``` 其中,`cookie`需要替换为自己真实的cookie字符串 @@ -117,16 +117,16 @@ docker logs -f bilibili_tool_pro ``` # 启动容器 -docker start bilibili_tool_pro +docker start bili # 停止容器 -docker stop bilibili_tool_pro +docker stop bili # 删除容器 -docker rm bilibili_tool_pro +docker rm bili # 进入容器 -docker exec -it bilibili_tool_pro /bin/bash +docker exec -it bili /bin/bash ``` ### 3.3. 使用Watchtower更新容器 @@ -135,7 +135,7 @@ docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --run-once --cleanup \ - bilibili_tool_pro + bili ``` ## 4. 自己构建镜像(非必须) diff --git a/docker/build/buildImage.cmd b/docker/build/buildImage.cmd index f4916cb54..2f9d0676a 100644 --- a/docker/build/buildImage.cmd +++ b/docker/build/buildImage.cmd @@ -3,6 +3,6 @@ REM start to build echo Start to build docker image @echo on -docker build --tag zai7lou/bilibili_tool_pro:0.2.1 --tag zai7lou/bilibili_tool_pro:latest ../.. +docker build --tag zai7lou/bilibili_tool_pro:0.2.2 --tag zai7lou/bilibili_tool_pro:latest ../.. @echo off pause diff --git a/docker/entry.sh b/docker/entry.sh deleted file mode 100644 index 186b86c77..000000000 --- a/docker/entry.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -set -e - -# https://stackoverflow.com/questions/27771781/how-can-i-access-docker-set-environment-variables-from-a-cron-job -echo "[step 1/4]导入环境变量" -printenv | grep -v "no_proxy" > /etc/environment -declare -p | grep -v "no_proxy" > /etc/cron.env -echo "=>完成" - -echo "[step 2/4]配置cron定时任务" -echo "BASH_ENV=/etc/cron.env" > /etc/cron.d/bilicron -if [ -z "$Ray_DailyTaskConfig__Cron$Ray_LiveLotteryTaskConfig__Cron$Ray_UnfollowBatchedTaskConfig__Cron$Ray_VipBigPointConfig__Cron" ]; then - echo "=>使用默认cron定时任务配置" - cat /app/crontab >> /etc/cron.d/bilicron -else - echo "=>检测到对应的环境变量,使用其值作为Cron配置" - echo "$Ray_Crontab" >> /etc/cron.d/bilicron - if ! [ -z "$Ray_DailyTaskConfig__Cron" ]; then - echo "$Ray_DailyTaskConfig__Cron dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=Daily >> /var/log/cron.log" >> /etc/cron.d/bilicron - fi - if ! [ -z "$Ray_LiveLotteryTaskConfig__Cron" ]; then - echo "$Ray_LiveLotteryTaskConfig__Cron dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=LiveLottery >> /var/log/cron.log" >> /etc/cron.d/bilicron - fi - if ! [ -z "$Ray_UnfollowBatchedTaskConfig__Cron" ]; then - echo "$Ray_UnfollowBatchedTaskConfig__Cron dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=UnfollowBatched >> /var/log/cron.log" >> /etc/cron.d/bilicron - fi - if ! [ -z "$Ray_VipBigPointConfig__Cron" ]; then - echo "$Ray_VipBigPointConfig__Cron dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=VipBigPoint >> /var/log/cron.log" >> /etc/cron.d/bilicron - fi -fi -echo "=>完成" - -echo "[step 3/4]启动定时任务,开启每日定时运行" -cat /etc/cron.d/bilicron -chmod 0644 /etc/cron.d/bilicron -crontab /etc/cron.d/bilicron -touch /var/log/cron.log -cron -echo "=>完成" - -echo "[step 4/4]初始启动容器,尝试测试Cookie" -dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=Test -echo "=>完成" - -echo "[step 全部已完成]" - -tail -f /var/log/cron.log # 追踪cron日志 diff --git a/docker/sample/appsettings.json b/docker/sample/appsettings.json index a32cb5712..0916bf387 100644 --- a/docker/sample/appsettings.json +++ b/docker/sample/appsettings.json @@ -11,6 +11,7 @@ "IsWatchVideo": true, //是否观看视频 "IsShareVideo": true, //是否分享视频 "NumberOfCoins": 5, //每日设定的投币数 [0,5] + "SaveCoinsWhenLv6": false, //达到六级后是否开始白嫖 "SelectLike": true, //投币时是否同时点赞[false,true] "SupportUpIds": "", //优先选择支持的up主Id集合,多个以英文逗号分隔,如:"123,456"。配置后会优先从指定的up主下挑选视频进行观看、分享和投币,不配置或配置为-1则表示没有特别支持的up,会从关注和排行耪中随机获取支持视频 "DayOfAutoCharge": -1, //每月几号自动充电[-1,31],-1表示不指定,默认月底最后一天;0表示不充电 diff --git a/docker/sample/docker-compose.yml b/docker/sample/docker-compose.yml index 5c9cad5f8..59d42b68a 100644 --- a/docker/sample/docker-compose.yml +++ b/docker/sample/docker-compose.yml @@ -3,48 +3,51 @@ version: '3.9' services: bilibili_tool: image: zai7lou/bilibili_tool_pro - container_name: bilibili_tool_pro + container_name: bili # restart: always volumes: - ./Logs:/app/Logs + - ./appsettings.json:/app/appsettings.json tty: true environment: - - ASPNETCORE_ENVIRONMENT=Production - - Ray_Security__IsSkipDailyTask=false + - ASPNETCORE_ENVIRONMENT: Production + - Ray_Security__IsSkipDailyTask: false # Cookie字符串(必填): - - Ray_BiliBiliCookies__1= - - Ray_BiliBiliCookies__2= + - Ray_BiliBiliCookies__1: + - Ray_BiliBiliCookies__2: # 定时任务 - - Ray_DailyTaskConfig__Cron=0 15 * * * - - Ray_LiveLotteryTaskConfig__Cron=0 22 * * * - - Ray_UnfollowBatchedTaskConfig__Cron=0 6 1 * * - - Ray_VipBigPointConfig__Cron=7 1 * * * + - Ray_DailyTaskConfig__Cron: 0 15 * * * + - Ray_LiveLotteryTaskConfig__Cron: 0 22 * * * + - Ray_UnfollowBatchedTaskConfig__Cron: 0 6 1 * * + - Ray_VipBigPointConfig__Cron: 7 1 * * * # UA: - - Ray_Security__UserAgent= + - Ray_Security__UserAgent: # 开始运行前随机随眠最大分钟数: - - Ray_Security__RandomSleepMaxMin=2 + - Ray_Security__RandomSleepMaxMin: 2 # 调用接口间的间隔秒数: - - Ray_Security__IntervalSecondsBetweenRequestApi= + - Ray_Security__IntervalSecondsBetweenRequestApi: # 目标投币数量: - - Ray_DailyTaskConfig__NumberOfCoins= + - Ray_DailyTaskConfig__NumberOfCoins: + # 达到六级后是否开始白嫖: + - Ray_DailyTaskConfig__SaveCoinsWhenLv6: # 天选抽奖指定排除关键字 - - Ray_LiveLotteryTaskConfig__ExcludeAwardNames= + - Ray_LiveLotteryTaskConfig__ExcludeAwardNames: # 天选抽奖指定包含关键字 - - Ray_LiveLotteryTaskConfig__IncludeAwardNames= + - Ray_LiveLotteryTaskConfig__IncludeAwardNames: # 企业微信推送地址: - - Ray_Serilog__WriteTo__4__Args__webHookUrl= + - Ray_Serilog__WriteTo__4__Args__webHookUrl: # 钉钉: - - Ray_Serilog__WriteTo__5__Args__webHookUrl= + - Ray_Serilog__WriteTo__5__Args__webHookUrl: # PushPlus推送: - - Ray_Serilog__WriteTo__9__Args__token= - - Ray_Serilog__WriteTo__9__Args__topic= - - Ray_Serilog__WriteTo__9__Args__channel= - - Ray_Serilog__WriteTo__9__Args__webhook= + - Ray_Serilog__WriteTo__9__Args__token: + - Ray_Serilog__WriteTo__9__Args__topic: + - Ray_Serilog__WriteTo__9__Args__channel: + - Ray_Serilog__WriteTo__9__Args__webhook: # Server酱推送scKey: - - Ray_Serilog__WriteTo__6__Args__turboScKey= + - Ray_Serilog__WriteTo__6__Args__turboScKey: diff --git a/docker/scripts/entry.sh b/docker/scripts/entry.sh new file mode 100644 index 000000000..dbe534c71 --- /dev/null +++ b/docker/scripts/entry.sh @@ -0,0 +1,61 @@ +#!/bin/bash +set -e + +. /app/scripts/entry_before.sh + +CONSOLE_DLL="Ray.BiliBiliTool.Console.dll" +CRON_FILE="/etc/cron.d/bilicron" + +# https://stackoverflow.com/questions/27771781/how-can-i-access-docker-set-environment-variables-from-a-cron-job +echo "[step 1/4]导入环境变量" +printenv | grep -v "no_proxy" > /etc/environment +declare -p | grep -v "no_proxy" > /etc/cron.env +echo -e "=>完成\n" + +echo "[step 2/4]配置cron定时任务" +echo "SHELL=/bin/bash" > $CRON_FILE +echo "BASH_ENV=/etc/cron.env" >> $CRON_FILE +if [ -z "$Ray_LiveLotteryTaskConfig__Cron$Ray_UnfollowBatchedTaskConfig__Cron$Ray_VipBigPointConfig__Cron" ]; then + echo "=>使用默认的定时任务配置" + cat /app/crontab >> $CRON_FILE +else + echo "=>使用用户指定的定时任务配置" + if ! [ -z "$Ray_DailyTaskConfig__Cron" ]; then + echo "$Ray_DailyTaskConfig__Cron cd /app && dotnet $CONSOLE_DLL --runTasks=Daily" >> $CRON_FILE + fi + if ! [ -z "$Ray_LiveLotteryTaskConfig__Cron" ]; then + echo "$Ray_LiveLotteryTaskConfig__Cron cd /app && dotnet $CONSOLE_DLL --runTasks=LiveLottery" >> $CRON_FILE + fi + if ! [ -z "$Ray_UnfollowBatchedTaskConfig__Cron" ]; then + echo "$Ray_UnfollowBatchedTaskConfig__Cron cd /app && dotnet $CONSOLE_DLL --runTasks=UnfollowBatched" >> $CRON_FILE + fi + if ! [ -z "$Ray_VipBigPointConfig__Cron" ]; then + echo "$Ray_VipBigPointConfig__Cron cd /app && dotnet $CONSOLE_DLL --runTasks=VipBigPoint" >> $CRON_FILE + fi +fi + +if ! [ -z "$Ray_Crontab" ]; then + echo "=>检测到自定义定时任务" + echo "$Ray_Crontab" >> $CRON_FILE +fi + +cat $CRON_FILE +chmod 0644 $CRON_FILE +crontab $CRON_FILE # 指定定时列表文件 + +echo -e "=>完成\n" + +echo "[step 3/4]启动定时任务,开启每日定时运行" +cron +echo -e "=>完成\n" + +echo "[step 4/4]初始运行,尝试测试Cookie" +cd /app && dotnet Ray.BiliBiliTool.Console.dll --runTasks=Test +echo -e "=>完成\n" + +echo -e "[step 全部已完成]\n" + +. /app/scripts/entry_after.sh + +touch /var/log/cron.log #todo:debian似乎并没有记录cron的日志。。。 +tail -f /var/log/cron.log # 追踪cron日志,避免当前脚本终止导致容器终止 \ No newline at end of file diff --git a/docker/scripts/entry_after.sh b/docker/scripts/entry_after.sh new file mode 100644 index 000000000..68c4ee29b --- /dev/null +++ b/docker/scripts/entry_after.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -e +echo -e "entry_after\n" \ No newline at end of file diff --git a/docker/scripts/entry_before.sh b/docker/scripts/entry_before.sh new file mode 100644 index 000000000..90845e723 --- /dev/null +++ b/docker/scripts/entry_before.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -e +echo -e "entry_before\n" \ No newline at end of file diff --git a/docs/configuration.md b/docs/configuration.md index ae37acb26..b44181e75 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -71,7 +71,9 @@ - [3.7. 日志相关](#37-日志相关) - [3.7.1. Console日志输出等级](#371-console日志输出等级) - [3.7.2. Console日志输出样式](#372-console日志输出样式) - - [3.7.3. crontab相关](#373-crontab相关) + - [3.8. 定时任务相关](#38-定时任务相关) + - [3.8.1. 定时任务](#381-定时任务) + - [3.8.2. Crontab](#382-Crontab) @@ -846,11 +848,35 @@ BiliBiliTool 使用 Serilog 作为日志组件,所以可以参考 Serilog 的 | 环境变量 | `Ray_Serilog__WriteTo__0__Args__outputTemplate` | | GitHub Secrets | `CONSOLELOGTEMPLATE` | - -#### 3.7.3. crontab相关 -适用于 [方式四:docker容器化运行(推荐)](../docker/README.md),用于配置定时任务,效果与 `my_crontab` 文件相同,且优先级高于 `my_crontab`。 + +#### 3.8. 定时任务相关 +适用于 [方式四:docker容器化运行(推荐)](../docker/README.md),用于配置定时任务。 + + +#### 3.8.1 定时任务 +以下环境变量的值应为有效的 [cron 表达式](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm)。 + +当被设置时,对应定时任务将开启。 + +| 环境变量 | 定时任务 | +| ---------- | -------------- | +| `Ray_DailyTaskConfig__Cron` | 每日任务 | +| `Ray_LiveLotteryTaskConfig__Cron` | 天选时刻抽奖 | +| `Ray_UnfollowBatchedTaskConfig__Cron` | 批量取关 | +| `Ray_VipBigPointConfig__Cron` | 大会员大积分 | + + +#### 3.8.2 Crontab +若该环境变量被设置,其值将直接追加在 cron 文件的末尾,可用于设置额外的定时任务。 + +| TITLE | CONTENT | +| ---------- | -------------- | +| 值域 | 一串字符串 | +| 默认值 | 空 | +| 环境变量 | `Ray_Crontab` | + +使用例 -使用例: ```yaml environment: Ray_BiliBiliCookies: somecookies @@ -858,9 +884,3 @@ environment: 0 15 * * * dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=Daily >> /var/log/cron.log 0 22 * * * dotnet /app/Ray.BiliBiliTool.Console.dll --runTasks=LiveLottery >> /var/log/cron.log ``` - -| TITLE | CONTENT | -| ---------- | -------------- | -| 值域 | 一串字符串 | -| 默认值 | 空 | -| 环境变量 | `Ray_Crontab` | diff --git a/gitHubActions/bak/bilibili-daily-task.yml b/gitHubActions/bak/bilibili-daily-task.yml index 580dce210..b4284406d 100644 --- a/gitHubActions/bak/bilibili-daily-task.yml +++ b/gitHubActions/bak/bilibili-daily-task.yml @@ -46,6 +46,7 @@ env: Ray_Security__RandomSleepMaxMin: ${{secrets.RANDOMSLEEPMAXMIN}} # 每日任务: Ray_DailyTaskConfig__NumberOfCoins: ${{secrets.NUMBEROFCOINS}} + Ray_DailyTaskConfig__SaveCoinsWhenLv6: ${{secrets.SAVECOINSWHENLV6}} Ray_DailyTaskConfig__SelectLike: ${{secrets.SELECTLIKE}} Ray_DailyTaskConfig__SupportUpIds: ${{secrets.SUPPORTUPIDS}} Ray_DailyTaskConfig__DayOfAutoCharge: ${{secrets.DAYOFAUTOCHARGE}} diff --git a/gitHubActions/bak/empty-task.yml b/gitHubActions/bak/empty-task.yml index c8a6b6d93..5a3cda2a2 100644 --- a/gitHubActions/bak/empty-task.yml +++ b/gitHubActions/bak/empty-task.yml @@ -44,6 +44,7 @@ env: Ray_Security__RandomSleepMaxMin: ${{secrets.RANDOMSLEEPMAXMIN}} # 每日任务: Ray_DailyTaskConfig__NumberOfCoins: ${{secrets.NUMBEROFCOINS}} + Ray_DailyTaskConfig__SaveCoinsWhenLv6: ${{secrets.SAVECOINSWHENLV6}} Ray_DailyTaskConfig__SelectLike: ${{secrets.SELECTLIKE}} Ray_DailyTaskConfig__SupportUpIds: ${{secrets.SUPPORTUPIDS}} Ray_DailyTaskConfig__DayOfAutoCharge: ${{secrets.DAYOFAUTOCHARGE}} diff --git a/helm/README.md b/helm/README.md new file mode 100644 index 000000000..18718c956 --- /dev/null +++ b/helm/README.md @@ -0,0 +1,143 @@ + + +# BiliBili Tool + +BiliBiliTool 是一个自动执行任务的工具,当我们忘记做某项任务时,它会像一个贴心小助手,按照我们预先吩咐它的命令,在指定频率、时间范围内帮助我们完成计划的任务。 + +[Overview of BiliBili Tool](https://github.com/RayWangQvQ/BiliBiliToolPro) + +## TL;DR + +### 在集群中通过本地代码直接部署 + +```console +$ git clone https://github.com/RayWangQvQ/BiliBiliToolPro.git +$ cd ${local_code_repo}/helm/bilibili-tool +$ vim values.yaml # provides your cookie and cron +$ helm install . +``` + +### 在集群中通过chart部署 + +```console +$ git clone https://github.com/RayWangQvQ/BiliBiliToolPro.git +$ cd ${local_code_repo}/helm/bilibili-tool +$ helm cm-push . +``` +Then on the cluster control plane +```console +$ mkdir /tmp/bilibili-tool && cd /tmp/bilibili-tool +$ helm repo add +$ helm update && helm pull /bilibili-tool +$ tar -zvxf -C . && cd +$ vim values.yaml # provides your cookie and cron +$ helm install . +``` + +## Introduction + +这个chart通过[Helm](https://helm.sh)在[Kubernetes](https://kubernetes.io)集群上拉起一个[BiliBiliToolPro](https://github.com/RayWangQvQ/BiliBiliToolPro)deployment + + +## Prerequisites + +- Kubernetes +- Helm + +或者 + +- Kind +- Helm + +## 安装Chart + +安装Chart并命名为 `my-release`: + +```console +$ helm repo add my-repo +$ helm install my-release my-repo/bilibili-tool(:0.2.1) +``` + +上述命令需要用户在values.yaml里提供cookie等必须信息 +[Parameters](#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 | +| `image.repository` | Global Dockevr registry | `zai7lou/bilibili_tool_pro` | true | +| `image.tag` | Image Tag | `0.2.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](https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/docs/configuration.md) | `[]` | true | +| `volumes.enabled` | Enable persistent log volume for BiliBili Tool or not | `"false"` | true | +| `volumes.path` | The host path mounted into pod | `"/tmp/Logs"` | false | +| `volumes.name` | The volume name | `"bili-tool-vol"` | 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](bilibili-tool/values.yaml)进行配置 + + +当想更新一些变量时,可以通过指定参数或者直接修改YAML的values文件进行更新 + +```console +$ helm upgrade my-release my_chart_repo/bilibili-tool <-f values> or <--set-file ...> +``` + +## [Optional]本地Cluster运行 + +通过安装[kind](https://kind.sigs.k8s.io/docs/user/quick-start/)工具在本地运行一个Kubernetes Cluster + +### Prerequisites + +go 1.17+ and Docker installed + +```console +$ go install sigs.k8s.io/kind@v0.17.0 && kind create cluster <--config kind_config_file> +$ cat +$ 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 diff --git a/helm/bilibili-tool/Chart.yaml b/helm/bilibili-tool/Chart.yaml new file mode 100644 index 000000000..4c2e181b0 --- /dev/null +++ b/helm/bilibili-tool/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: bilibili-tool +description: A Helm chart for running bilibili tool in Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "0.2.1" diff --git a/helm/bilibili-tool/templates/NOTES.txt b/helm/bilibili-tool/templates/NOTES.txt new file mode 100644 index 000000000..e69de29bb diff --git a/helm/bilibili-tool/templates/_helpers.tpl b/helm/bilibili-tool/templates/_helpers.tpl new file mode 100644 index 000000000..05b6d00d6 --- /dev/null +++ b/helm/bilibili-tool/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "bilibili_tool.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "bilibili_tool.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "bilibili_tool.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "bilibili_tool.labels" -}} +helm.sh/chart: {{ include "bilibili_tool.chart" . }} +{{ include "bilibili_tool.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "bilibili_tool.selectorLabels" -}} +app.kubernetes.io/name: {{ include "bilibili_tool.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "bilibili_tool.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "bilibili_tool.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/helm/bilibili-tool/templates/deployment.yaml b/helm/bilibili-tool/templates/deployment.yaml new file mode 100644 index 000000000..10a63b687 --- /dev/null +++ b/helm/bilibili-tool/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "bilibili_tool.fullname" . }} + labels: + {{- include "bilibili_tool.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "bilibili_tool.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "bilibili_tool.selectorLabels" . | nindent 8 }} + spec: + {{- if .Values.volumes.enabled }} + volumes: + - name: {{ .Values.volumes.name }} + hostPath: + path: {{ .Values.volumes.path }} + {{- end }} + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + {{- toYaml .Values.env | nindent 12 }} + {{- if .Values.volumes.enabled }} + volumeMounts: + - mountPath: "/bilibili_tool/Logs" + name: {{ .Values.volumes.name }} + {{- end }} + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/helm/bilibili-tool/values.yaml b/helm/bilibili-tool/values.yaml new file mode 100644 index 000000000..f061f0c5d --- /dev/null +++ b/helm/bilibili-tool/values.yaml @@ -0,0 +1,57 @@ +# Default values for bilibili_tool. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: zai7lou/bilibili_tool_pro + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "0.2.1" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +# For more envs pls take a view at https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/docs/configuration.md +env: + # cookie - required + - name: Ray_BiliBiliCookies__1 + # past your cookie value + value: "" + # DailyTrigger - required + - name: Ray_DailyTaskConfig__Cron + # This means BiliBili Toll triggers at every day's 08:10 AM + value: "10 8 * * *" + + # Add your custom env vars like + # - name: Ray_Security__IntervalSecondsBetweenRequestApi + # value: "20" + # - name: Ray_Security__RandomSleepMaxMin + # value: "20" + # - name: Ray_LiveLotteryTaskConfig__Cron + # value: "" + +volumes: + enabled: false + # if `enabled=true`, then path and name is required + path: "/tmp/Logs" + name: "bili-tool-vol" + +podAnnotations: {} + +resources: + # Recommended to set this resources field + limits: + cpu: 100m + memory: 180Mi + requests: + cpu: 100m + memory: 180Mi + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/podman/README.md b/podman/README.md new file mode 100644 index 000000000..6aef954b8 --- /dev/null +++ b/podman/README.md @@ -0,0 +1,116 @@ +# Podman 使用说明 + + +- [1. 前期工作](#1-前期工作) + - [1.1. Podman环境](#11-podman环境) + - [从Docker迁移](#从docker迁移) +- [2. 运行容器](#2-运行容器) + - [2.1. 极简版](#21-极简版) + - [2.2. 综合版](#22-综合版) +- [3. 自己构建镜像(非必须)](#3-自己构建镜像非必须) +- [4. 其他](#4-其他) + + + +## 1. 前期工作 + +### 1.1. Podman环境 + +请确认已安装了Podman所需环境([Podman](https://podman.io/) + +安装完成后,请执行`podman -v`检查是否安装成功,请执行`podman info`检查虚拟机环境是否正常。 + +常用命令参考: + +``` +# 查看版本 +podman -v + +# 初始化虚拟机 +podman machine init + +# 启动虚拟机 +podman machine start + +# 查看信息 +podman info +``` + +### 从Docker迁移 + +Podman可以和Docker共存,命令也基本可以通用。 + +但挂载逻辑有点区别,podman挂载时,如果宿主机下没有指定的文件夹,podman不会像docker一样去自动创建文件夹,而是会报异常。 + +所以在挂载文件夹时,需要先手动在宿主机上mkdir创建文件夹。 + +## 2. 运行容器 + +以下提供极简版和综合版两个版本,一个简单一个复杂,供参考 + +### 2.1. 极简版 + +``` +# 生成并运行容器 +podman run -itd --name="bili" \ + -e Ray_BiliBiliCookies__1="cookie" \ + docker.io/zai7lou/bilibili_tool_pro + +# 查看实时日志 +podman logs -f bili +``` + +其中,`cookie`需要替换为自己真实的cookie字符串 + +### 2.2. 综合版 + +``` +# 创建文件和文件夹 +mkdir -p /bili && cd /bili +mkdir -p Logs + +# 下载appsettings.json +wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/src/Ray.BiliBiliTool.Console/appsettings.json + +# 运行 +podman run -itd --name="bili" \ + -v /bili/Logs:/app/Logs \ + -v /bili/appsettings.json:/app/appsettings.json \ + -e Ray_BiliBiliCookies__1="cookie" \ + -e Ray_BiliBiliCookies__2="cookie" \ + -e Ray_DailyTaskConfig__Cron="0 15 * * *" \ + -e Ray_LiveLotteryTaskConfig__Cron="0 22 * * *" \ + -e Ray_UnfollowBatchedTaskConfig__Cron="0 6 1 * *" \ + -e Ray_VipBigPointConfig__Cron="7 1 * * *" \ + -e Ray_DailyTaskConfig__NumberOfCoins="5" + docker.io/zai7lou/bilibili_tool_pro + +# 查看实时日志 +podman logs -f bili +``` + +其他指令参考: + +``` +# 查看容器运行状态 +podman ps -a + +# 进入容器 +podman exec -it bili bash +``` + +## 3. 自己构建镜像(非必须) + +目前我提供和维护的镜像:`[zai7lou/bilibili_tool_pro](https://hub.docker.com/repository/docker/zai7lou/bilibili_tool_pro)`; + +如果有需要(大部分都不需要),可以使用源码自己构建镜像,如下: + +在有项目的Dockerfile的目录运行 + +`podman build -t TARGET_NAME .` + + `TARGET_NAME`为镜像名称和版本,可以自己起个名字 + +## 4. 其他 + +镜像使用的是docker仓库的镜像。 diff --git a/podman/build/buildImage.cmd b/podman/build/buildImage.cmd new file mode 100644 index 000000000..087533c3b --- /dev/null +++ b/podman/build/buildImage.cmd @@ -0,0 +1,8 @@ +@echo off + +REM start to build +echo Start to build image +@echo on +podman build -t docker.io/zai7lou/bilibili_tool_pro:0.2.2 -t docker.io/zai7lou/bilibili_tool_pro:latest ../.. +@echo off +pause diff --git a/qinglong/DefaultTasks/bili_dev_task_base.sh b/qinglong/DefaultTasks/bili_dev_task_base.sh new file mode 100644 index 000000000..50be9cabe --- /dev/null +++ b/qinglong/DefaultTasks/bili_dev_task_base.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# new Env("bili_dev_task_base") +# cron 0 0 1 1 * bili_dev_task_base.sh + +dir_shell=$QL_DIR/shell +. $dir_shell/share.sh + +## 安装dotnet +apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib +curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 6.0 --no-cdn +rm -f /usr/local/bin/dotnet +ln -s ~/.dotnet/dotnet /usr/local/bin +dotnet --version + +bili_repo="raywangqvq_bilibilitoolpro_develop" + +echo -e "\nrepo目录: $dir_repo" +bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" +echo -e "bili仓库目录: $bili_repo_dir\n" + +cd $bili_repo_dir \ No newline at end of file diff --git a/qinglong/DefaultTasks/bili_dev_task_daily.sh b/qinglong/DefaultTasks/bili_dev_task_daily.sh index 53c53f0da..574d3d0df 100644 --- a/qinglong/DefaultTasks/bili_dev_task_daily.sh +++ b/qinglong/DefaultTasks/bili_dev_task_daily.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili每日任务[dev先行版]") # cron 0 9 * * * bili_dev_task_daily.sh +. bili_dev_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro_develop" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=Daily && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_liveLottery.sh b/qinglong/DefaultTasks/bili_dev_task_liveLottery.sh index 0dbf48d52..521b03a48 100644 --- a/qinglong/DefaultTasks/bili_dev_task_liveLottery.sh +++ b/qinglong/DefaultTasks/bili_dev_task_liveLottery.sh @@ -1,17 +1,10 @@ #!/usr/bin/env bash # new Env("bili天选时刻[dev先行版]") # cron 0 13 * * * bili_dev_task_liveLottery.sh +. bili_dev_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh +cd ./src/Ray.BiliBiliTool.Console -bili_repo="raywangqvq_bilibilitoolpro_develop" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir export ENVIRONMENT=Production && \ export Ray_RunTasks=LiveLottery && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_test.sh b/qinglong/DefaultTasks/bili_dev_task_test.sh index e79a07b7e..a175c5bd5 100644 --- a/qinglong/DefaultTasks/bili_dev_task_test.sh +++ b/qinglong/DefaultTasks/bili_dev_task_test.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili测试ck[dev先行版]") # cron 0 8 * * * bili_dev_task_test.sh +. bili_dev_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro_develop" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=Test && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_tryFix.sh b/qinglong/DefaultTasks/bili_dev_task_tryFix.sh new file mode 100644 index 000000000..3f63c17e7 --- /dev/null +++ b/qinglong/DefaultTasks/bili_dev_task_tryFix.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# new Env("bili尝试修复异常[dev先行版]") +# cron 0 0 1 1 * bili_dev_task_tryFix.sh + +dir_shell=$QL_DIR/shell +. $dir_shell/share.sh + +bili_repo="raywangqvq_bilibilitoolpro_develop" + +echo -e "\nrepo目录: $dir_repo" +bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" +echo -e "bili仓库目录: $bili_repo_dir\n" + +echo -e "清理缓存...\n" +cd $bili_repo_dir +find . -type d -name "bin" -exec rm -rf {} + +find . -type d -name "obj" -exec rm -rf {} + \ No newline at end of file diff --git a/qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh b/qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh index 8a339da23..71cd7be83 100644 --- a/qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh +++ b/qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili批量取关主播[dev先行版]") # cron 0 12 1 * * bili_dev_task_unfollowBatched.sh +. bili_dev_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro_develop" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=UnfollowBatched && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh b/qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh index a5a63e2a1..3dbcfbb8e 100644 --- a/qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh +++ b/qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili大会员大积分[dev先行版]") # cron 7 1 * * * bili_dev_task_vipBigPoint.sh +. bili_dev_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro_develop" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=VipBigPoint && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_task_base.sh b/qinglong/DefaultTasks/bili_task_base.sh new file mode 100644 index 000000000..801573c47 --- /dev/null +++ b/qinglong/DefaultTasks/bili_task_base.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# new Env("bili_base") +# cron 0 0 1 1 * bili_base.sh + +dir_shell=$QL_DIR/shell +. $dir_shell/share.sh + +## 安装dotnet +apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib +curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 6.0 --no-cdn +rm -f /usr/local/bin/dotnet +ln -s ~/.dotnet/dotnet /usr/local/bin +dotnet --version + +bili_repo="raywangqvq_bilibilitoolpro_develop" + +echo -e "\nrepo目录: $dir_repo" +bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" +echo -e "bili仓库目录: $bili_repo_dir\n" + +cd $bili_repo_dir \ No newline at end of file diff --git a/qinglong/DefaultTasks/bili_task_daily.sh b/qinglong/DefaultTasks/bili_task_daily.sh index a03aad201..55cef2f06 100644 --- a/qinglong/DefaultTasks/bili_task_daily.sh +++ b/qinglong/DefaultTasks/bili_task_daily.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili每日任务") # cron 0 9 * * * bili_task_daily.sh +. bili_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=Daily && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_task_liveLottery.sh b/qinglong/DefaultTasks/bili_task_liveLottery.sh index 6793ac3ae..b3caa3b0c 100644 --- a/qinglong/DefaultTasks/bili_task_liveLottery.sh +++ b/qinglong/DefaultTasks/bili_task_liveLottery.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili天选时刻") # cron 0 13 * * * bili_task_liveLottery.sh +. bili_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=LiveLottery && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_task_test.sh b/qinglong/DefaultTasks/bili_task_test.sh index f48c7d41f..38e740aaa 100644 --- a/qinglong/DefaultTasks/bili_task_test.sh +++ b/qinglong/DefaultTasks/bili_task_test.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili测试ck") # cron 0 8 * * * bili_task_test.sh +. bili_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=Test && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_task_tryFix.sh b/qinglong/DefaultTasks/bili_task_tryFix.sh new file mode 100644 index 000000000..8a1ed4a45 --- /dev/null +++ b/qinglong/DefaultTasks/bili_task_tryFix.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# new Env("bili尝试修复异常") +# cron 0 0 1 1 * bili_task_tryFix.sh + +dir_shell=$QL_DIR/shell +. $dir_shell/share.sh + +bili_repo="raywangqvq_bilibilitoolpro_develop" + +echo -e "\nrepo目录: $dir_repo" +bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" +echo -e "bili仓库目录: $bili_repo_dir\n" + +echo -e "清理缓存...\n" +cd $bili_repo_dir +find . -type d -name "bin" -exec rm -rf {} + +find . -type d -name "obj" -exec rm -rf {} + \ No newline at end of file diff --git a/qinglong/DefaultTasks/bili_task_unfollowBatched.sh b/qinglong/DefaultTasks/bili_task_unfollowBatched.sh index 73b6c3135..7fa37a101 100644 --- a/qinglong/DefaultTasks/bili_task_unfollowBatched.sh +++ b/qinglong/DefaultTasks/bili_task_unfollowBatched.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili批量取关主播") # cron 0 12 1 * * bili_task_unfollowBatched.sh +. bili_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=UnfollowBatched && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/DefaultTasks/bili_task_vipBigPoint.sh b/qinglong/DefaultTasks/bili_task_vipBigPoint.sh index 1dada710d..f6f9792a2 100644 --- a/qinglong/DefaultTasks/bili_task_vipBigPoint.sh +++ b/qinglong/DefaultTasks/bili_task_vipBigPoint.sh @@ -1,17 +1,9 @@ #!/usr/bin/env bash # new Env("bili大会员大积分") # cron 7 1 * * * bili_task_vipBigPoint.sh +. bili_task_base.sh -dir_shell=$QL_DIR/shell -. $dir_shell/share.sh - -bili_repo="raywangqvq_bilibilitoolpro" - -echo "repo目录: $dir_repo" -bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" -echo -e "bili仓库目录: $bili_repo_dir\n" - -cd $bili_repo_dir +cd ./src/Ray.BiliBiliTool.Console export ENVIRONMENT=Production && \ export Ray_RunTasks=VipBigPoint && \ -dotnet run --project ./src/Ray.BiliBiliTool.Console +dotnet run diff --git a/qinglong/ray-dotnet-install.sh b/qinglong/ray-dotnet-install.sh index a90686ff8..5549a7e3f 100644 --- a/qinglong/ray-dotnet-install.sh +++ b/qinglong/ray-dotnet-install.sh @@ -1,41 +1,13 @@ #!/usr/bin/env bash echo -e "\n-------set up dot net env-------" -DOWNLOAD_X64=https://download.visualstudio.microsoft.com/download/pr/70fb6022-ef53-473b-bfde-dc8cd6b673ca/2c04303064ed5c5158998c3a0d11fcc1/dotnet-sdk-6.0.201-linux-musl-x64.tar.gz -DOWNLOAD_ARM32=https://download.visualstudio.microsoft.com/download/pr/09df51a1-5ef7-4db6-90cd-302ae92b7c84/3d000f08ab919f43f61184a3c48b46a8/dotnet-sdk-6.0.201-linux-musl-arm.tar.gz -DOWNLOAD_ARM64=https://download.visualstudio.microsoft.com/download/pr/0038906f-0d85-41ad-897d-2579359eeb77/78bb1d3b9df9d8017222f0bed5df23ab/dotnet-sdk-6.0.201-linux-musl-arm64.tar.gz - -get_download_url_by_machine_architecture() { - if command -v uname > /dev/null; then - CPUName=$(uname -m) - case $CPUName in - armv*l) - echo $DOWNLOAD_ARM32 - return 0 - ;; - aarch64|arm64) - echo $DOWNLOAD_ARM64 - return 0 - ;; - esac - fi - # Always default to 'x64' - echo $DOWNLOAD_X64 - return 0 -} - -DOWNLOAD_URL="$(get_download_url_by_machine_architecture)" -DOTNET_FILE=dotnet-sdk.tar.gz - +## 安装dotnet apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib +curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 6.0 --no-cdn --verbose -wget -O $DOTNET_FILE $DOWNLOAD_URL -DOTNET_ROOT=/home/dotnet -mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT" - -export PATH=$PATH:$DOTNET_ROOT -ln -s /home/dotnet/dotnet /usr/local/bin +rm -f /usr/local/bin/dotnet +ln -s ~/.dotnet/dotnet /usr/local/bin -dotnet --version +dotnet --info echo -e "\n-------set up dot net env finish-------" \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs index 7fd5aeefa..aa92b62c0 100644 --- a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs @@ -63,7 +63,7 @@ public override void DoTask() UserInfo userInfo = Login(); DailyTaskInfo dailyTaskInfo = GetDailyTaskStatus(); WatchAndShareVideo(dailyTaskInfo); - AddCoinsForVideo(); + AddCoinsForVideo(userInfo); //签到: LiveSign(); @@ -122,8 +122,13 @@ private void WatchAndShareVideo(DailyTaskInfo dailyTaskInfo) /// 投币任务 /// [TaskInterceptor("投币", rethrowWhenException: false)] - private void AddCoinsForVideo() + private void AddCoinsForVideo(UserInfo userInfo) { + if (_dailyTaskOptions.SaveCoinsWhenLv6 && userInfo.Level_info.Current_level >= 6) + { + _logger.LogInformation("已经为LV6大佬,开始白嫖"); + return; + } _donateCoinDomainService.AddCoinsForVideos(); } diff --git a/src/Ray.BiliBiliTool.Config/Options/DailyTaskOptions.cs b/src/Ray.BiliBiliTool.Config/Options/DailyTaskOptions.cs index 01933b8f2..da828c8e7 100644 --- a/src/Ray.BiliBiliTool.Config/Options/DailyTaskOptions.cs +++ b/src/Ray.BiliBiliTool.Config/Options/DailyTaskOptions.cs @@ -23,6 +23,12 @@ public class DailyTaskOptions /// public int NumberOfCoins { get; set; } = 5; + /// + /// 达到六级后是否开始白嫖 + /// + public bool SaveCoinsWhenLv6 { get; set; } = false; + + /// /// 投币时是否点赞[false,true] /// diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json index 5f93234d9..a9103aac4 100644 --- a/src/Ray.BiliBiliTool.Console/appsettings.json +++ b/src/Ray.BiliBiliTool.Console/appsettings.json @@ -12,6 +12,7 @@ "IsWatchVideo": true, //是否观看视频 "IsShareVideo": true, //是否分享视频 "NumberOfCoins": 5, //每日设定的投币数 [0,5] + "SaveCoinsWhenLv6": false, //达到六级后是否开始白嫖[false,true] "SelectLike": true, //投币时是否同时点赞[false,true] "SupportUpIds": "", //优先选择支持的up主Id集合,多个以英文逗号分隔,如:"123,456"。配置后会优先从指定的up主下挑选视频进行观看、分享和投币,不配置或配置为-1则表示没有特别支持的up,会从关注和排行耪中随机获取支持视频 "DayOfAutoCharge": -1, //每月几号自动充电[-1,31],-1表示不指定,默认月底最后一天;0表示不充电 diff --git a/src/Ray.BiliBiliTool.Console/commandLineMappings.json b/src/Ray.BiliBiliTool.Console/commandLineMappings.json index a090b9a3d..40be99cda 100644 --- a/src/Ray.BiliBiliTool.Console/commandLineMappings.json +++ b/src/Ray.BiliBiliTool.Console/commandLineMappings.json @@ -6,6 +6,7 @@ "--runTasks": "RunTasks", "--numberOfCoins": "DailyTaskConfig:NumberOfCoins", + "--saveCoinsWhenLv6": "DailyTaskConfig:SaveCoinsWhenLv6", "--selectLike": "DailyTaskConfig:SelectLike", "--supportUpIds": "DailyTaskConfig:SupportUpIds", "--dayOfAutoCharge": "DailyTaskConfig:DayOfAutoCharge", @@ -35,6 +36,7 @@ "-runTasks": "RunTasks", "-numberOfCoins": "DailyTaskConfig:NumberOfCoins", + "-saveCoinsWhenLv6": "DailyTaskConfig:SaveCoinsWhenLv6", "-selectLike": "DailyTaskConfig:SelectLike", "-supportUpIds": "DailyTaskConfig:SupportUpIds", "-dayOfAutoCharge": "DailyTaskConfig:DayOfAutoCharge", diff --git a/src/Ray.BiliBiliTool.DomainService/DonateCoinDomainService.cs b/src/Ray.BiliBiliTool.DomainService/DonateCoinDomainService.cs index 619e8850d..5defe7e9c 100644 --- a/src/Ray.BiliBiliTool.DomainService/DonateCoinDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/DonateCoinDomainService.cs @@ -194,11 +194,13 @@ private int GetNeedDonateCoinNum() { //获取自定义配置投币数 int configCoins = _dailyTaskOptions.NumberOfCoins; + if (configCoins <= 0) { _logger.LogInformation("已配置为跳过投币任务"); return configCoins; } + //已投的硬币 int alreadyCoins = _coinDomainService.GetDonatedCoins(); diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.GotifyBatched/Ray.Serilog.Sinks.GotifyBatched.csproj b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.GotifyBatched/Ray.Serilog.Sinks.GotifyBatched.csproj index 55eb04647..ebfaae80a 100644 --- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.GotifyBatched/Ray.Serilog.Sinks.GotifyBatched.csproj +++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.GotifyBatched/Ray.Serilog.Sinks.GotifyBatched.csproj @@ -3,7 +3,7 @@ net6.0 enable - enable + diff --git a/tencentScf/serverless.yml b/tencentScf/serverless.yml index c3b88c18d..cf376a71d 100644 --- a/tencentScf/serverless.yml +++ b/tencentScf/serverless.yml @@ -38,6 +38,12 @@ inputs: cronExpression: "0 0 0 * * MON *" enable: true argument: UnfollowBatched + - timer: # 大会员积分 + parameters: + name: VipBigPointTask + cronExpression: "0 07 01 * * * *" + enable: true + argument: VipBigPoint environment: variables: # 根据自己的需要修改 Ray_BiliBiliCookies__1: 123 # cookie,必填