Skip to content

Commit

Permalink
Merge branch 'release/0.3.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
RayWangQvQ committed Dec 11, 2022
2 parents 8d796c3 + 9205411 commit 8320f1d
Show file tree
Hide file tree
Showing 14 changed files with 152 additions and 133 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@
- hotfix docker build error
- 合并PR(#341),新增krew部署,感谢@chenliu1993
- 合并PR(##348),更新文档,感谢@jexjws
- 合并PR(#350),修改请求header错误的bug
- 合并PR(#350),修改请求header错误的bug,感谢@catlair
- 合并PR(#353),新增python扫码登录的feature(仅针对青龙),感谢@AFUL1991
- Feature(#351):重构并新增了扫码登录功能,使之适用于各种部署平台
## 0.3.1
- Fix(#260),在需要的时候encode cookie
- 更新文档
31 changes: 14 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ BiliBiliTool

详细功能如下:

- **扫码登录,自动更新cookie**
- **每日获取满额升级经验(登录、投币、点赞、分享视频)(支持指定支持up主)**
- **每天漫画签到**
- **每天直播签到**
Expand Down Expand Up @@ -143,12 +144,11 @@ dotnet Ray.BiliBiliTool.Console.dll --runTasks=Daily&LiveLottery

会依次运行`每日任务``天选抽奖任务`

一般来说,每个任务都有一个 GitHub Actions 的工作流脚本(workflow)对应,划分的依据主要是根据功能需求,其次是触发频率(比如,有些每天只需运行一次,有些需要允许多次)。

任务列表如下:

| 任务名 | Code | 功能 | 默认WorkFlow文件 | GithHub Environments | 推荐运行频率 | 备注 |
| :----: | :----: | :----: | :----: | :----: | :----: | :----: |
| 扫码登录 | Login | 试用bili app扫码登录,用于第一次运行时初始化cookie,或cookie过期时的更新。不同平台会将cookie存储到不同地方,青龙存储到环境变量中,其他会存储到cookies。json中 | | Production | 手动 | |
| 每日任务 | Daily | 完成每日任务获取满额65点经验(登录、观看视频、分享视频、投币),以及签到、领福利和充电等附属功能 | bilibili-daily-task.yml | Production | 每天一次 | |
| 天选时刻抽奖 | LiveLottery | 直播中心天选时刻抽奖 | live-lottery-task.yml | LiveLottery | 建议每天运行0-4次内 | 对应Actions工作流默认是关闭的,需要添加key为`ISOPENLIVELOTTERYTASK`、值为`true`的secret来手动开启;大部分抽奖都需要关注主播,介意的不要开启 |
| 批量取关 | UnfollowBatched | 批量取关指定分组下的所有关注(主要用于清理天选抽奖而产生的关注) | unfollow-batched-task.yml || 需要时手动运行 | 需要通过配置指定2个参数:`GroupName`(分组名称,如`天选时刻`)和`Count`(目标取关个数,-1表示全部),应用会倒序从后往前取关指定个数 |
Expand All @@ -162,20 +162,22 @@ dotnet Ray.BiliBiliTool.Console.dll --runTasks=Daily&LiveLottery

## 4. 多账号支持

~~对于 GitHub Actions 托管的,可以通过添加 Key 为 `COOKIESTR2``COOKIESTR3` 的 Secret ,来支持最多 3 个账号。~~
部署成功后,直接去运行扫码登录任务,扫码成功后,应用会自动更新或添加cookie。

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

Docker或其他方式托管的,因配置项 `BiliBiliCookies` 被设计为一个字符串数组,所以理论可以添加任意个数的账号,例
其他平台默认会添加到名为cookies.json的账号配置文件中
```
"BiliBiliCookies": [
"cookies1",
"cookies2",
"..."
{
"BiliBiliCookies": [
"cookie1",
"cookie2",
"...",
],
}
```

使用环境变量配置的话,可以添加 Key 为 `Ray_BiliBiliCookies__2``Ray_BiliBiliCookies__3``Ray_BiliBiliCookies__4`...的环境变量,以此类推。

## 5. 常见问题

[>>点击查看常见问题文档](docs/questions.md)
Expand All @@ -197,13 +199,9 @@ Docker或其他方式托管的,因配置项 `BiliBiliCookies` 被设计为一

## 6. 版本发布及更新

当前正处于稳定的迭代开发中,~~正常情况下每 2 周会发布一个小版本~~详细待更新和计划内容可参见 [Projects](https://github.com/RayWangQvQ/BiliBiliToolPro/projects)[Issues](https://github.com/RayWangQvQ/BiliBiliTool/issues)
当前正处于稳定的迭代开发中,详细待更新和计划内容可参见 [Projects](https://github.com/RayWangQvQ/BiliBiliToolPro/projects)[Issues](https://github.com/RayWangQvQ/BiliBiliTool/issues)

关于新版本发布后,如何同步最新的内容到自己 Fork 的仓库,可参考**常见问题文档**中的 《**我 Fork 之后如何同步原作者的更新内容?**》章节。

建议每个人都开启自动同步更新,因为越新的版本功能越完善、对账号来说也越安全。

也建议把右上角的 Star 点一下,这样有重要更新时就会有邮件推送了。
想要有重要更新时收到通知的话,可以把仓库右上角的`Star``Watch`按钮点亮。

## 7. 成为开源贡献成员

Expand Down Expand Up @@ -240,7 +238,6 @@ Docker或其他方式托管的,因配置项 `BiliBiliCookies` 被设计为一
![赞赏码](docs/imgs/donate.jpg)

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

感谢支持~
Expand Down
2 changes: 1 addition & 1 deletion common.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<Authors>Ray</Authors>
<Version>0.3.0</Version>
<Version>0.3.1</Version>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
</PropertyGroup>
</Project>
Binary file added docs/imgs/dotnet-login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 19 additions & 2 deletions docs/questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,26 @@ Pull App 可以指定是否保留自己已经修改的内容,分为下面两
当然也可以立即手动触发同步:`https://pull.git.ci/process/${owner}/${repo}`

## 6. 本地或服务器如何安装.net环境
若需手动安装运行环境,请点击 ![Download .NET 5.0 (Linux, macOS, and Windows)](https://dotnet.microsoft.com/download/dotnet/5.0),分别选择相应平台的`ASP.NET Core Runtime 5.0.0``.NET Runtime 5.0.0`的安装包(Installers)进行安装;亦可下载.NET SDK 5.0.100的安装包(上述二者已包含于其中)。

注:若已从 ![.NET官网下载入口](https://dotnet.microsoft.com/download) 的“Download .NET Runtime”选项进行了下载安装,则仍需根据上述方法补充安装`ASP.NET Core Runtime 5.0.0`(由于该选项仅提供了`.NET Runtime 5.0.0`的安装包)。
macOS/Linux:
```
curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/ray-dotnet-install.sh | bash /dev/stdin
```
如果出现下载缓慢的情况,可以将上面指令改为:

```
curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/ray-dotnet-install.sh | bash /dev/stdin --no-official
```

`--no-official`表示不会使用官方脚本去安装,而是通过手动下载二进制文件的形式来安装。

Windows:
```
# Run a separate PowerShell process because the script calls exit, so it will end the current PowerShell session.
&powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) --channel 6.0 --no-cdn --verbose"
```

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

## 7. 如何关停Actions运行
推荐做法有两种:一是使用配置关停应用的每日任务,二是关停Actions。
Expand Down
59 changes: 27 additions & 32 deletions docs/runInLocal.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,52 @@

<!-- TOC depthFrom:2 -->

- [1. 下载应用文件](#1-下载应用文件)
- [2. 运行](#2-运行)
- [1. 任意系统,但已安装`.NET 6.0`](#1-任意系统但已安装net-60)
- [2. Win](#2-win)
- [3. Linux:](#3-linux)
- [4. macOS](#4-macos)
- [5. 配置](#5-配置)

<!-- /TOC -->

如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,配置 Cookie 后即可直接本地进行运行和调试
如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,即可调式和运行

对于不是开发者的朋友,可以通过下载 Release 包到本地或任意服务器运行,步骤如下。
<details>
跑什么任务,可以在`Ray.BiliBiliTool.Console`项目下的`appsettings.json`文件里的`RunTasks`指定。

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

点击 [BiliBiliTool/release](https://github.com/RayWangQvQ/BiliBiliToolPro/releases),下载已发布的最新版本。
## 1. 任意系统,但已安装`.NET 6.0`

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

请下载 `net-dependent.zip` 文件,本文件依赖本地运行库(runtime-dependent),所以文件包非常小(不到1M)。
下载解压后,进入应用目录,执行`dotnet ./Ray.BiliBiliTool.Console.dll --runTasks=Login`

P.S.这里的运行环境指的是 `.NET Runtime 6.0.0` ,安装方法可详见 [常见问题](docs/questions.md) 中的 **本地或服务器如何安装.net环境**
会出现二维码,扫码登录后即可运行各个任务。

* 如果不希望安装或不知如何安装.net运行环境:
![login](imgs/dotnet-login.png)

请根据操作系统下载对应的 zip 文件,此文件已自包含(self-contained)运行环境,但相较不包含运行时的文件略大(20M 左右,Github 服务器在国外,下载可能比较慢)。
![运行图示](imgs/run-exe.png)

如,Windows系统请下载 `win-x86-x64.zip`其他以此类推。
P.S.这里的运行环境指的是 `.NET Runtime 6.0.0`安装方法可详见 [常见问题](questions.md) 中的 **本地或服务器如何安装.net环境**

## 2. 运行
## 2. Win

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

* Windows 系统
解压后,在应用目录打开cmd或powershell,执行`.\Ray.BiliBiliTool.Console.exe --runTasks=Login`,扫码登录。

对于已安装.net环境,且使用的是依赖包,可在当前目录下执行命令:`dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login`,或者直接双击运行名称为 start.bat 的批处理文件,均可运行。

对于使用自包含运行环境版本的,可直接双击运行名称为 Ray.BiliBiliTool.Console.exe 的可执行文件。

* Linux 系统

对于已安装.net环境,且使用的是依赖包,同上,可在终端中执行命令:`dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login`

对于使用独立包的,可在终端中执行命令:
## 3. Linux:

```
chmod +x ./Ray.BiliBiliTool.Console
Ray.BiliBiliTool.Console
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 cd ./linux-x64/
./Ray.BiliBiliTool.Console --runTasks=Login
```

其他系统依此类推,运行结果图示如下:

![运行图示](docs/imgs/run-exe.png)
## 4. macOS
请下载 `osx-x64.zip`,解压后在应用目录运行`./Ray.BiliBiliTool.Console --runTasks=Login`

除了修改配置文件,也可以通过添加环境变量或在启动命令后附加参数来实现配置,详细方法可参考下面的**配置说明**章节。
## 5. 配置

</details>
最简单的方式是直接修改应用目录下的`appsettings.json`,详细方法可参考下面的**配置说明**章节。
13 changes: 6 additions & 7 deletions src/Ray.BiliBiliTool.Agent/Attributes/LogFilterAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,20 @@ public LogFilterAttribute(bool logError = true)

protected override Task WriteLogAsync(ApiResponseContext context, LogMessage logMessage)
{
ILoggerFactory service = context.HttpContext.ServiceProvider.GetService<ILoggerFactory>();
if (service == null)
return Task.CompletedTask;
ILoggerFactory loggerFactory = context.HttpContext.ServiceProvider.GetService<ILoggerFactory>();
if (loggerFactory == null) return Task.CompletedTask;

MethodInfo member = context.ApiAction.Member;
string[] strArray = new string[5];
var strArray = new string[5];
Type declaringType1 = member.DeclaringType;
strArray[0] = (object)declaringType1 != null ? declaringType1.Namespace : (string)null;
strArray[0] = (object)declaringType1 != null ? declaringType1.Namespace : null;
strArray[1] = ".";
Type declaringType2 = member.DeclaringType;
strArray[2] = (object)declaringType2 != null ? declaringType2.Name : (string)null;
strArray[2] = (object)declaringType2 != null ? declaringType2.Name : null;
strArray[3] = ".";
strArray[4] = member.Name;
string categoryName = string.Concat(strArray);
ILogger logger = service.CreateLogger(categoryName);
ILogger logger = loggerFactory.CreateLogger(categoryName);

if (logMessage.Exception == null)
logger.LogDebug(logMessage.ToString());//修改为Debug等级
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Net.Http;
using System.Threading.Tasks;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Passport;
using WebApiClientCore.Attributes;
Expand All @@ -12,6 +13,7 @@ public interface IPassportApi : IBiliBiliApi
Task<BiliApiResponse<QrCodeDto>> GenerateQrCode();

[HttpGet("/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&source=main_mini")]
Task<BiliApiResponse<TokenDto>> CheckQrCodeHasScaned(string qrcode_key);
//Task<BiliApiResponse<TokenDto>> CheckQrCodeHasScaned(string qrcode_key);
Task<HttpResponseMessage> CheckQrCodeHasScaned(string qrcode_key);
}
}
20 changes: 13 additions & 7 deletions src/Ray.BiliBiliTool.Agent/BiliCookie.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Ray.BiliBiliTool.Config;
Expand All @@ -12,9 +13,18 @@ public class BiliCookie : CookieInfo
{
private readonly ILogger<BiliCookie> _logger;

public BiliCookie(ILogger<BiliCookie> logger,
CookieStrFactory cookieStrFactory)
: base(cookieStrFactory.GetCurrentCookieStr())
public BiliCookie(string ckStr)
: this(new List<string> { ckStr }) { }

public BiliCookie(List<string> ckStrList)
: this(NullLogger<BiliCookie>.Instance, new CookieStrFactory(ckStrList)) { }

public BiliCookie(ILogger<BiliCookie> logger, CookieStrFactory cookieStrFactory)
: this(logger, cookieStrFactory.GetCurrentCookieStr()) { }

private BiliCookie(ILogger<BiliCookie> logger, string ckStr)
: base(ckStr, null, v => v.Contains(',') ? Uri.EscapeDataString(v) : v)
//: base(ckStr, null, v => v)
{
_logger = logger;

Expand All @@ -32,10 +42,6 @@ public BiliCookie(ILogger<BiliCookie> logger,
}
}

public BiliCookie(List<string> ckList) : this(NullLogger<BiliCookie>.Instance,new CookieStrFactory(ckList))
{
}

[Description("DedeUserID")]
public string UserId { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
}

HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
if (response.Content == null) return response;

var content = await response.Content.ReadAsStringAsync(cancellationToken);
_logger.LogDebug("返回Content:{content}", content);
Expand Down
Loading

0 comments on commit 8320f1d

Please sign in to comment.