## 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）**
---
[目录]



- [1. 如何使用](#1-如何使用)
    - [1.1. 部署 BiliTool](#11-部署-bilitool)
        - [1.1.1. 方案一：免费在线容器](#111-方案一免费在线容器)
        - [1.1.2. 方式二：青龙](#112-方式二青龙)
        - [1.1.3. 方式三：Docker 或 Podman 运行](#113-方式三docker-或-podman-运行)
        - [1.1.4. 方式四：下载程序包到本地或服务器运行](#114-方式四下载程序包到本地或服务器运行)
        - [1.1.5. 方式五：Chart部署](#115-方式五chart部署)
    - [1.2. 消息推送（可选）](#12-消息推送可选)
- [2. 功能任务说明](#2-功能任务说明)
- [3. 个性化自定义配置](#3-个性化自定义配置)
- [4. 多账号支持](#4-多账号支持)
- [5. 常见问题](#5-常见问题)
- [6. 版本发布及更新](#6-版本发布及更新)
- [7. 成为开源贡献成员](#7-成为开源贡献成员)
    - [7.1. 贡献代码](#71-贡献代码)
    - [7.2. 贡献文档](#72-贡献文档)
- [8. 捐赠支持](#8-捐赠支持)
- [9. 其他](#9-其他)



---
**Github 仓库地址：[RayWangQvQ/BiliBiliToolPro](https://github.com/RayWangQvQ/BiliBiliToolPro)**

**注意：**

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

运行图示：



## 1. 如何使用

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

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

### 1.1. 部署 BiliTool

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

#### 1.1.1. 方案一：免费在线容器

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

以下以 ClawCloud 为例，其他平台操作类似：

[>>ClawCloud 部署教程](docs/claw-cloud.md)

#### 1.1.2. 方式二：青龙

[>>青龙部署教程](qinglong/README.md)

#### 1.1.3. 方式三：Docker 或 Podman 运行

[>>Docker 部署说明](docker/README.md)

[>>Podman 部署说明](podman/README.md)

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

[>>本地部署说明](docs/runInLocal.md)

#### 1.1.5. 方式五：Chart部署

[>>Chart部署说明](helm/README.md)

### 1.2. 消息推送（可选）

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



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

推送配置见：[confifuration](/docs/configuration.md)

## 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. 个性化自定义配置

[>>点击查看配置说明文档](docs/configuration.md)

## 4. 多账号支持

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

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

其他平台默认会添加到名为cookies.json的账号配置文件中：
```
{
  "BiliBiliCookies": [
    "cookie1",
    "cookie2",
    "...",
  ],
}

```

## 5. 常见问题

[>>点击查看常见问题文档](docs/questions.md)

[Issues（议题）](https://github.com/RayWangQvQ/BiliBiliToolPro/issues)板块可以用来提交**Bug**和**建议**；

[Discussions（讨论）](https://github.com/RayWangQvQ/BiliBiliToolPro/discussions)板块可以用来**提问**和**讨论**。

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

所以如果你有疑问，

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

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

（关于如何正确的提交Issue，请详见**常见问题文档**）。

## 6. 版本发布及更新

当前正处于稳定的迭代开发中，详细待更新和计划内容可参见 [Projects](https://github.com/RayWangQvQ/BiliBiliToolPro/projects) 和 [Issues](https://github.com/RayWangQvQ/BiliBiliToolPro/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`参考：

- [www.bilibili.com](https://www.bilibili.com/)

- [SocialSisterYi/bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect)

- [JunzhouLiu/BILIBILI-HELPER](https://github.com/JunzhouLiu/BILIBILI-HELPER)

❤️Thanks to `JetBrains` for the free certificate support:



❤️Thanks to [YxVM](https://yxvm.com/aff.php?aff=668) & [NodeSeekDev](https://github.com/NodeSeekDev/NodeSupport) for sponsoring the server for testing support:



❤️Thanks to [DartNode](https://dartnode.com?aff=FriskyGopher833) for sponsoring the server for testing support:

[](https://dartnode.com "Powered by DartNode - Free VPS for Open Source")

❤️Thank you for your star to this project:

[](https://www.star-history.com/#RayWangQvQ/BiliBiliToolPro&Date)

---

## File: docker/README.md

# Docker 使用说明


- [1. 前期工作](#1-前期工作)
- [2. 方式一：一键脚本(推荐)](#2-方式一一键脚本推荐)
- [3. 方式二：手动 Docker Compose](#3-方式二手动-docker-compose)
    - [3.1. 启动](#31-启动)
    - [3.2. 其他命令参考](#32-其他命令参考)
- [4. 方式三：手动Docker指令](#4-方式三手动docker指令)
    - [4.1. Docker启动](#41-docker启动)
    - [4.2. 其他指令参考](#42-其他指令参考)
    - [4.3. 使用Watchtower更新容器](#43-使用watchtower更新容器)
- [5. 登录](#5-登录)
- [6. 添加 Bili 账号](#6-添加-bili-账号)
- [7. 自己构建镜像（非必须）](#7-自己构建镜像非必须)
- [8. 其他](#8-其他)



## 1. 前期工作

```
apt-get update
apt-get install curl
```

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

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

## 3. 方式二：手动 Docker Compose

### 3.1. 启动

```
# 创建目录
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
```

最终文件结构如下：

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

### 3.2. 其他命令参考

```
# 启动 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启动

```
# 创建目录
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. 其他指令参考

```
# 启动容器
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更新容器
```
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](https://console.run.claw.cloud/signin?link=FNTTMHS056E5) 注册账号，选择使用 GitHub 账号注册并登录。

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

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



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



点击`Deploy App`按钮一键部署。



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



## 消息推送

建议使用环境变量配置：



配置值见：[confifuration](/docs/configuration.md)

## 费用

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

## 其他

### 账号

- 默认用户名：admin
- 默认密码：BiliTool@2233

首次登陆后，请立即修改账号和密码！

### 速度

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

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

### 更新

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

---

## File: docs/configuration.md

# 配置说明

**[目录]**



- [1. 配置方式](#1-配置方式)
    - [1.1. 方式一：修改配置文件](#11-方式一修改配置文件)
    - [1.2. 方式二：命令启动时通过命令行参数配置](#12-方式二命令启动时通过命令行参数配置)
    - [1.3. 方式三：添加环境变量（推荐）](#13-方式三添加环境变量推荐)
    - [1.4. 方式四：托管在青龙面板上，使用面板的环境变量页或配置文件页进行配置](#14-方式四托管在青龙面板上使用面板的环境变量页或配置文件页进行配置)
- [2. 优先级](#2-优先级)
- [3. 详细配置说明](#3-详细配置说明)
    - [3.1. Cookie字符串](#31-cookie字符串)
    - [3.2. 安全相关的配置](#32-安全相关的配置)
        - [3.2.1. 是否跳过执行任务](#321-是否跳过执行任务)
        - [3.2.2. 随机睡眠的最大时长](#322-随机睡眠的最大时长)
        - [3.2.3. 两次调用B站Api之间的间隔秒数](#323-两次调用b站api之间的间隔秒数)
        - [3.2.4. 间隔秒数所针对的HttpMethod](#324-间隔秒数所针对的httpmethod)
        - [3.2.5. 请求B站接口时头部传递的User-Agent](#325-请求b站接口时头部传递的user-agent)
        - [3.2.6. App请求B站接口时头部传递的User-Agent](#326-app请求b站接口时头部传递的user-agent)
        - [3.2.7. WebProxy（代理）](#327-webproxy代理)
    - [3.3. 每日任务相关](#33-每日任务相关)
        - [3.3.1. 是否开启观看视频任务](#331-是否开启观看视频任务)
        - [3.3.2. 是否开启分享视频任务](#332-是否开启分享视频任务)
        - [3.3.3. 每日投币数量](#333-每日投币数量)
        - [3.3.4. 投币时是否同时点赞](#334-投币时是否同时点赞)
        - [3.3.5. 优先选择支持的up主Id集合](#335-优先选择支持的up主id集合)
        - [3.3.6. 每月几号自动领取会员权益](#336-每月几号自动领取会员权益)
        - [3.3.7. 每月几号进行直播中心银瓜子兑换硬币](#337-每月几号进行直播中心银瓜子兑换硬币)
        - [3.3.8. Lv6后开启硬币白嫖模式](#338-lv6后开启硬币白嫖模式)
        - [3.3.9. 是否开启专栏投币](#339-是否开启专栏投币)
    - [3.4. 天选时刻抽奖相关](#34-天选时刻抽奖相关)
        - [3.4.1. 根据关键字排除奖品](#341-根据关键字排除奖品)
        - [3.4.2. 根据关键字指定奖品](#342-根据关键字指定奖品)
        - [3.4.3. 天选抽奖后是否自动分组关注的主播](#343-天选抽奖后是否自动分组关注的主播)
        - [3.4.4. 天选筹抽奖主播Uid黑名单](#344-天选筹抽奖主播uid黑名单)
    - [3.5. 批量取关相关](#35-批量取关相关)
        - [3.5.1. 想要批量取关的分组名称](#351-想要批量取关的分组名称)
        - [3.5.2. 批量取关的人数](#352-批量取关的人数)
        - [3.5.3. 取关白名单](#353-取关白名单)
    - [3.6. 大积分相关](#36-大积分相关)
        - [3.6.1. 自定义观看番剧](#361-自定义观看番剧)
    - [3.7. 免费B币券充电](#37-免费b币券充电)
        - [3.7.1. 充电对象](#371-充电对象)
    - [3.8. 推送相关](#38-推送相关)
        - [3.8.1. 是否开启每个账号单独推送消息](#381-是否开启每个账号单独推送消息)
        - [3.8.2. Telegram机器人](#382-telegram机器人)
            - [3.8.2.1. botToken](#3821-bottoken)
            - [3.8.2.2. chatId](#3822-chatid)
            - [3.8.2.3. proxy](#3823-proxy)
        - [3.8.3. 企业微信机器人](#383-企业微信机器人)
            - [3.8.3.1. webHookUrl](#3831-webhookurl)
        - [3.8.4. 钉钉机器人](#384-钉钉机器人)
            - [3.8.4.1. webHookUrl](#3841-webhookurl)
        - [3.8.5. Server酱](#385-server酱)
            - [3.8.5.1. TurboScKey（Server酱SCKEY）](#3851-turbosckeyserver酱sckey)
        - [3.8.6. 酷推](#386-酷推)
            - [3.8.6.1. sKey](#3861-skey)
        - [3.8.7. 推送到自定义Api](#387-推送到自定义api)
            - [3.8.7.1. api](#3871-api)
            - [3.8.7.2. placeholder](#3872-placeholder)
            - [3.8.7.3. bodyJsonTemplate](#3873-bodyjsontemplate)
        - [3.8.8. PushPlus[推荐]](#388-pushplus推荐)
            - [3.8.8.1. PushPlus的Token](#3881-pushplus的token)
            - [3.8.8.2. PushPlus的Topic](#3882-pushplus的topic)
            - [3.8.8.3. PushPlus的Channel](#3883-pushplus的channel)
            - [3.8.8.4. PushPlus的Webhook](#3884-pushplus的webhook)
        - [3.8.9. Microsoft Teams](#389-microsoft-teams)
            - [3.8.9.1. Microsoft Teams的Webhook](#3891-microsoft-teams的webhook)
        - [3.8.10. 企业微信应用推送](#3810-企业微信应用推送)
            - [3.8.10.1. 企业微信应用推送的corpId](#38101-企业微信应用推送的corpid)
            - [3.8.10.2. 企业微信应用推送的agentId](#38102-企业微信应用推送的agentid)
            - [3.8.10.3. 企业微信应用推送的secret](#38103-企业微信应用推送的secret)
    - [3.9. 日志相关](#39-日志相关)
        - [3.9.1. 日志输出等级](#391-日志输出等级)
        - [3.9.2. 日志输出样式](#392-日志输出样式)
        - [3.9.3. 定时任务相关](#393-定时任务相关)
        - [3.9.4. 定时任务](#394-定时任务)



<a id="markdown-1-配置方式" name="1-配置方式"></a>
## 1. 配置方式

<a id="markdown-11-方式一修改配置文件" name="11-方式一修改配置文件"></a>
### 1.1. 方式一：修改配置文件

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

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

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

<a id="markdown-12-方式二命令启动时通过命令行参数配置" name="12-方式二命令启动时通过命令行参数配置"></a>
### 1.2. 方式二：命令启动时通过命令行参数配置

在使用命令行启动时，可使用`-key=value`的形式附加配置，所有可用的命令行参数均在 [命令行参数映射表](../src/Ray.BiliBiliTool.Config/Constants.cs#L76-L105) 中。

* 使用跨平台的依赖包

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

```
dotnet Ray.BiliBiliTool.Console.dll -cookieStr=abc -numberOfCoins=5
```

* Windows系统

使用自包含包（win-x86-x64.zip），命令样例：

```
Ray.BiliBiliTool.Console.exe -cookieStr=abc -numberOfCoins=5
```

* Linux系统

使用自包含包（linux.zip），命令样例：

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

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

<a id="markdown-13-方式三添加环境变量推荐" name="13-方式三添加环境变量推荐"></a>
### 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`。

<a id="markdown-14-方式四托管在青龙面板上使用面板的环境变量页或配置文件页进行配置" name="14-方式四托管在青龙面板上使用面板的环境变量页或配置文件页进行配置"></a>
### 1.4. 方式四：托管在青龙面板上，使用面板的环境变量页或配置文件页进行配置

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

- 环境变量页[推荐]

例如：

名称：`Ray_BiliBiliCookies__1`

值：`abcde`



- 配置文件页

例如，配置Cookie和推送：

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



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

<a id="markdown-2-优先级" name="2-优先级"></a>
## 2. 优先级

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

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

<a id="markdown-3-详细配置说明" name="3-详细配置说明"></a>
## 3. 详细配置说明

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

<a id="markdown-31-cookie字符串" name="31-cookie字符串"></a>
### 3.1. Cookie字符串

必填，数组，可以多个。

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

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

<a id="markdown-32-安全相关的配置" name="32-安全相关的配置"></a>
### 3.2. 安全相关的配置
<a id="markdown-321-是否跳过执行任务" name="321-是否跳过执行任务"></a>
#### 3.2.1. 是否跳过执行任务

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

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

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

<a id="markdown-322-随机睡眠的最大时长" name="322-随机睡眠的最大时长"></a>
#### 3.2.2. 随机睡眠的最大时长

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

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

配置为0则不进行睡眠。

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

<a id="markdown-323-两次调用b站api之间的间隔秒数" name="323-两次调用b站api之间的间隔秒数"></a>
#### 3.2.3. 两次调用B站Api之间的间隔秒数

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

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

<a id="markdown-324-间隔秒数所针对的httpmethod" name="324-间隔秒数所针对的httpmethod"></a>
#### 3.2.4. 间隔秒数所针对的HttpMethod

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

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

<a id="markdown-325-请求b站接口时头部传递的user-agent" name="325-请求b站接口时头部传递的user-agent"></a>
#### 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的方法见下图：



<a id="markdown-326-app请求b站接口时头部传递的user-agent" name="326-app请求b站接口时头部传递的user-agent"></a>
#### 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的方法见下图：



<a id="markdown-327-webproxy代理" name="327-webproxy代理"></a>
#### 3.2.7. WebProxy（代理）

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

| TITLE          | CONTENT                        |
| -------------- | ------------------------------ |
| 配置Key          | `Security__WebProxy`           |
| 值域             | 字符串，形如：user:password@host:port |
| 默认值            | 无                              |

<a id="markdown-33-每日任务相关" name="33-每日任务相关"></a>
### 3.3. 每日任务相关

<a id="markdown-331-是否开启观看视频任务" name="331-是否开启观看视频任务"></a>
#### 3.3.1. 是否开启观看视频任务

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

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

<a id="markdown-332-是否开启分享视频任务" name="332-是否开启分享视频任务"></a>
#### 3.3.2. 是否开启分享视频任务

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

<a id="markdown-333-每日投币数量" name="333-每日投币数量"></a>
#### 3.3.3. 每日投币数量

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

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

<a id="markdown-334-投币时是否同时点赞" name="334-投币时是否同时点赞"></a>
#### 3.3.4. 投币时是否同时点赞

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

<a id="markdown-335-优先选择支持的up主id集合" name="335-优先选择支持的up主id集合"></a>
#### 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，如下图所示：



<a id="markdown-336-每月几号自动领取会员权益" name="336-每月几号自动领取会员权益"></a>
#### 3.3.6. 每月几号自动领取会员权益

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

<a id="markdown-337-每月几号进行直播中心银瓜子兑换硬币" name="337-每月几号进行直播中心银瓜子兑换硬币"></a>
#### 3.3.7. 每月几号进行直播中心银瓜子兑换硬币

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

<a id="markdown-338-lv6后开启硬币白嫖模式" name="338-lv6后开启硬币白嫖模式"></a>
#### 3.3.8. Lv6后开启硬币白嫖模式

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

<a id="markdown-339-是否开启专栏投币" name="339-是否开启专栏投币"></a>
#### 3.3.9. 是否开启专栏投币

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

<a id="markdown-34-天选时刻抽奖相关" name="34-天选时刻抽奖相关"></a>
### 3.4. 天选时刻抽奖相关

<a id="markdown-341-根据关键字排除奖品" name="341-根据关键字排除奖品"></a>
#### 3.4.1. 根据关键字排除奖品

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

<a id="markdown-342-根据关键字指定奖品" name="342-根据关键字指定奖品"></a>
#### 3.4.2. 根据关键字指定奖品

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

<a id="markdown-343-天选抽奖后是否自动分组关注的主播" name="343-天选抽奖后是否自动分组关注的主播"></a>
#### 3.4.3. 天选抽奖后是否自动分组关注的主播

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

<a id="markdown-344-天选筹抽奖主播uid黑名单" name="344-天选筹抽奖主播uid黑名单"></a>
#### 3.4.4. 天选筹抽奖主播Uid黑名单

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

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

<a id="markdown-35-批量取关相关" name="35-批量取关相关"></a>
### 3.5. 批量取关相关

<a id="markdown-351-想要批量取关的分组名称" name="351-想要批量取关的分组名称"></a>
#### 3.5.1. 想要批量取关的分组名称

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

<a id="markdown-352-批量取关的人数" name="352-批量取关的人数"></a>
#### 3.5.2. 批量取关的人数

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

<a id="markdown-353-取关白名单" name="353-取关白名单"></a>
#### 3.5.3. 取关白名单

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

<a id="markdown-36-大积分相关" name="36-大积分相关"></a>
### 3.6. 大积分相关

<a id="markdown-361-自定义观看番剧" name="361-自定义观看番剧"></a>
#### 3.6.1. 自定义观看番剧

|   TITLE   | CONTENT   |
| ---------- | -------------- |
| 配置Key | `VipBigPointConfig__ViewBangumis` |
| 值域   | 番剧的ssid（season_id） |
| 默认值   | `33378`（名侦探柯南） |

<a id="markdown-37-免费b币券充电" name="37-免费b币券充电"></a>
### 3.7. 免费B币券充电

<a id="markdown-371-充电对象" name="371-充电对象"></a>
#### 3.7.1. 充电对象

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

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

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

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

<a id="markdown-38-推送相关" name="38-推送相关"></a>
### 3.8. 推送相关

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

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

<a id="markdown-381-是否开启每个账号单独推送消息" name="381-是否开启每个账号单独推送消息"></a>
#### 3.8.1. 是否开启每个账号单独推送消息

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

<a id="markdown-382-telegram机器人" name="382-telegram机器人"></a>
#### 3.8.2. Telegram机器人



<a id="markdown-3821-bottoken" name="3821-bottoken"></a>
##### 3.8.2.1. botToken

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

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

<a id="markdown-3822-chatid" name="3822-chatid"></a>
##### 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` |
| 值域   | 一串字符串 |
| 默认值   | 空 |
| 命令行示范   | 无 |

<a id="markdown-3823-proxy" name="3823-proxy"></a>
##### 3.8.2.3. proxy

使用代理

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

<a id="markdown-383-企业微信机器人" name="383-企业微信机器人"></a>
#### 3.8.3. 企业微信机器人

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



<a id="markdown-3831-webhookurl" name="3831-webhookurl"></a>
##### 3.8.3.1. webHookUrl

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

<a id="markdown-384-钉钉机器人" name="384-钉钉机器人"></a>
#### 3.8.4. 钉钉机器人

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

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



<a id="markdown-3841-webhookurl" name="3841-webhookurl"></a>
##### 3.8.4.1. webHookUrl

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

<a id="markdown-385-server酱" name="385-server酱"></a>
#### 3.8.5. Server酱
官网： http://sc.ftqq.com/9.version



<a id="markdown-3851-turbosckeyserver酱sckey" name="3851-turbosckeyserver酱sckey"></a>
##### 3.8.5.1. TurboScKey（Server酱SCKEY）
获取方式请参考官网。

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

<a id="markdown-386-酷推" name="386-酷推"></a>
#### 3.8.6. 酷推
https://cp.xuthus.cc/
<a id="markdown-3861-skey" name="3861-skey"></a>
##### 3.8.6.1. sKey
该平台可能还在完善当中，对接时我发现其接口定义不规范，且机器人容易被封，所以不推荐使用，且不接受提酷推推送相关bug。

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

<a id="markdown-387-推送到自定义api" name="387-推送到自定义api"></a>
#### 3.8.7. 推送到自定义Api
这是我简单封装了一个通用的推送接口，可以推送到任意的api地址，如果有自己的机器人或自己的用于接受日志的api，可以根据需要自定义配置。
<a id="markdown-3871-api" name="3871-api"></a>
##### 3.8.7.1. api

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

<a id="markdown-3872-placeholder" name="3872-placeholder"></a>
##### 3.8.7.2. placeholder

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

<a id="markdown-3873-bodyjsontemplate" name="3873-bodyjsontemplate"></a>
##### 3.8.7.3. bodyJsonTemplate

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

<a id="markdown-388-pushplus推荐" name="388-pushplus推荐"></a>
#### 3.8.8. PushPlus[推荐]

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

<a id="markdown-3881-pushplus的token" name="3881-pushplus的token"></a>
##### 3.8.8.1. PushPlus的Token

获取方式请参考官网。

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

<a id="markdown-3882-pushplus的topic" name="3882-pushplus的topic"></a>
##### 3.8.8.2. PushPlus的Topic

获取方式请参考官网。

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

<a id="markdown-3883-pushplus的channel" name="3883-pushplus的channel"></a>
##### 3.8.8.3. PushPlus的Channel

获取方式请参考官网。

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

<a id="markdown-3884-pushplus的webhook" name="3884-pushplus的webhook"></a>
##### 3.8.8.4. PushPlus的Webhook

获取方式请参考官网。

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

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

<a id="markdown-389-microsoft-teams" name="389-microsoft-teams"></a>
#### 3.8.9. Microsoft Teams

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

<a id="markdown-3891-microsoft-teams的webhook" name="3891-microsoft-teams的webhook"></a>
##### 3.8.9.1. Microsoft Teams的Webhook

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

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

<a id="markdown-3810-企业微信应用推送" name="3810-企业微信应用推送"></a>
#### 3.8.10. 企业微信应用推送

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

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

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

<a id="markdown-38101-企业微信应用推送的corpid" name="38101-企业微信应用推送的corpid"></a>
##### 3.8.10.1. 企业微信应用推送的corpId

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

<a id="markdown-38102-企业微信应用推送的agentid" name="38102-企业微信应用推送的agentid"></a>
##### 3.8.10.2. 企业微信应用推送的agentId

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

<a id="markdown-38103-企业微信应用推送的secret" name="38103-企业微信应用推送的secret"></a>
##### 3.8.10.3. 企业微信应用推送的secret

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

<a id="markdown-39-日志相关" name="39-日志相关"></a>
### 3.9. 日志相关

<a id="markdown-391-日志输出等级" name="391-日志输出等级"></a>
#### 3.9.1. 日志输出等级

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

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

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

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

<a id="markdown-392-日志输出样式" name="392-日志输出样式"></a>
#### 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}` |

<a id="markdown-393-定时任务相关" name="393-定时任务相关"></a>
#### 3.9.3. 定时任务相关

适用于 [方式四：docker容器化运行（推荐）](../docker/README.md)，用于配置定时任务。

<a id="markdown-394-定时任务" name="394-定时任务"></a>
#### 3.9.4. 定时任务

以下环境变量的值应为有效的 [cron 表达式](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm)。

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

| 环境变量                              | 定时任务   |
| --------------------------------- | ------ |
| `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. 运行出现异常怎么办？](#1-运行出现异常怎么办)
- [2. 如何提交issue（如何提交Bug或建议）](#2-如何提交issue如何提交bug或建议)
- [3. Actions定时任务没有每天自动运行](#3-actions定时任务没有每天自动运行)
- [4. Actions修改定时任务的执行时间](#4-actions修改定时任务的执行时间)
    - [4.1. 方法一：修改yaml文件中的cron表达式](#41-方法一修改yaml文件中的cron表达式)
    - [4.2. 方法二：添加 GitHub Environments 并设置延时](#42-方法二添加-github-environments-并设置延时)
- [5. 我 Fork 之后怎么同步原作者的更新内容？](#5-我-fork-之后怎么同步原作者的更新内容)
    - [5.1. 方法一：删掉自己的仓库再重新Fork](#51-方法一删掉自己的仓库再重新fork)
    - [5.2. 方法二：使用提供的 Repo Sync 工作流脚本同步](#52-方法二使用提供的-repo-sync-工作流脚本同步)
    - [5.3. 方法三：手动PR同步](#53-方法三手动pr同步)
    - [5.4. 方法四：使用插件 Pull App 同步](#54-方法四使用插件-pull-app-同步)
        - [5.4.1. Pull App 方式一： 源作者内容直接覆盖自己内容](#541-pull-app-方式一-源作者内容直接覆盖自己内容)
        - [5.4.2. Pull App 方式二： 保留自己内容](#542-pull-app-方式二-保留自己内容)
- [6. 本地或服务器如何安装.net环境](#6-本地或服务器如何安装net环境)
- [7. 如何关停Actions运行](#7-如何关停actions运行)
    - [7.1. 方法一：使用配置关停每日任务](#71-方法一使用配置关停每日任务)
    - [7.2. 方法二：关停Actions](#72-方法二关停actions)



## 1. 运行出现异常怎么办？
第一步：根据异常信息，请先仔细阅读文档（特别是 [常见问题文档](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/questions.md) 和 [配置说明文档](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/configuration.md) ），查找相关信息

第二步：如果文档没有找到，请到 [issues](https://github.com/RayWangQvQ/BiliBiliTool/issues) 下面查找相关问题，看是否有人其他人也遇到类似问题，并确认issue下是否已经有解决方案

第三步：如果仍没有解决，请将日志输出等级配置为Debug，该等级会输出详细的日志信息，修改后请再次运行，并查看详细的日志信息。如何配置请详见 [配置说明文档](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/configuration.md)

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

第五步：如果根据详细日志信息可以确认是 Bug（缺陷），可以到 [issues](https://github.com/RayWangQvQ/BiliBiliTool/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](https://github.com/RayWangQvQ/BiliBiliTool/blob/main/.github/workflows/repo-sync.yml)，执行后，会拉取源仓库最新内容直接覆盖掉自己的代码修改内容。该脚本默认开启，且每周一自动执行一次，如要关闭，可以将yml文件里的schedule使用#号注释掉。

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

详细步骤如下：

Ⅰ. [>>点击生成 Token](https://github.com/settings/tokens/new?description=repo-sync&scopes=repo,workflow) ，将生成的 `Token` 复制下来。

Token 只显示一次，没复制只能重新生成。更多关于加密机密的说明可以查看 Github 官方文档：[加密机密](https://docs.github.com/cn/free-pro-team@latest/actions/reference/encrypted-secrets)。





Ⅱ. 将上一步生成的 `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](https://github.com/apps/pull) 插件。

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

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

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

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

点击 `install`，完成安装。



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

#### 5.4.1. Pull App 方式一： 源作者内容直接覆盖自己内容
> 该方式会将源作者的内容直接强制覆盖到自己的仓库中，也就是不会保留自己已经修改过的内容。
步骤如下：

Ⅰ. 确认已安装 [ Pull app](https://github.com/apps/pull) 插件。

Ⅱ. 编辑 [pull.yml](https://github.com/RayWangQvQ/BiliBiliTool/blob/main/.github/pull.yml) 文件，将第 5 行内容修改为 `mergeMethod: hardreset`，然后保存提交。

（默认就是hardreset，如果未修改过，可以不用再次提交）

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

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

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

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

步骤如下：

Ⅰ. 确认已安装 [ Pull app](https://github.com/apps/pull) 插件。

Ⅱ. 编辑 [pull.yml](https://github.com/RayWangQvQ/BiliBiliTool/blob/main/.github/pull.yml) 文件，将第 5 行内容修改为 `mergeMethod: merge`，然后保存提交。

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

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

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

请见[官方文档](https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-install-script)

## 7. 如何关停Actions运行
推荐做法有两种：一是使用配置关停应用的每日任务，二是关停Actions。

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

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

详情见 [配置说明文档](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/configuration.md#321-isskipdailytask%E6%98%AF%E5%90%A6%E8%B7%B3%E8%BF%87%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1)。

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

### 7.2. 方法二：关停Actions
 
点击Actions进入Workflows列表，点击名称为`bilibili-daily-task`的Workflow，在搜索框右侧有一个三个点的设置按钮，点击按钮后，在弹出的下拉列表里选中`Disable workflow`项即可，如下图所示：


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

---

## File: docs/runInLocal.md

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



- [1. 任意系统，但已安装`.NET 8.0`](#1-任意系统但已安装net-80)
- [2. Win](#2-win)
- [3. Linux:](#3-linux)
- [4. macOS](#4-macos)
- [5. 配置](#5-配置)



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

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

对于不是开发者的朋友，可以通过下载 [BiliBiliTool/release](https://github.com/RayWangQvQ/BiliBiliToolPro/releases) 到本地或任意服务器运行。

## 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` ，安装方法可详见 [常见问题](questions.md) 中的 **本地或服务器如何安装.net环境**

## 2. Win

请下载 `win-x86-x64.zip`，此文件已自包含（self-contained）运行环境。

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

## 3. Linux:

```
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 部署



- [介绍](#介绍)
- [步骤](#步骤)
    - [复刻项目](#复刻项目)
    - [添加 Secrets 配置](#添加-secrets-配置)
    - [测试运行 Actions](#测试运行-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](https://github.com/RayWangQvQ/BiliBiliToolPro)

## 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](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 <my_chart_repo>
$helm install my-release my-repo/bilibili-tool(:1.0.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 |
| `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](https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/docs/configuration.md) | `[]` | 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](bilibili-tool/values.yaml)进行配置

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

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

## Upgrade

建议重新装release

## [Optional]本地Cluster运行

通过安装[kind](https://kind.sigs.k8s.io/docs/user/quick-start/)工具在本地运行一个Kubernetes Cluster

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_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](https://krew.sigs.k8s.io/docs/user-guide/setup/install/) 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](https://krew.sigs.k8s.io/docs), you can package your own krew plugin