diff --git a/docs/configuration.md b/docs/configuration.md
index 31b9f0116..1c72fe6fe 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -31,6 +31,7 @@
- [3.3.8. 每月几号自动领取会员权益](#338-每月几号自动领取会员权益)
- [3.3.9. 每月几号进行直播中心银瓜子兑换硬币](#339-每月几号进行直播中心银瓜子兑换硬币)
- [3.3.10. Lv6后开启硬币白嫖模式](#3310-lv6后开启硬币白嫖模式)
+ - [3.3.11. 是否开启专栏投币](#3311-是否开启专栏投币)
- [3.4. 天选时刻抽奖相关](#34-天选时刻抽奖相关)
- [3.4.1. 根据关键字排除奖品](#341-根据关键字排除奖品)
- [3.4.2. 根据关键字指定奖品](#342-根据关键字指定奖品)
@@ -75,6 +76,8 @@
- [3.7.3. 定时任务相关](#373-定时任务相关)
- [3.7.4. 定时任务](#374-定时任务)
- [3.7.5. Crontab](#375-crontab)
+ - [3.8. 大积分相关](#38-大积分相关)
+ - [3.8.1. 自定义观看番剧](#381-自定义观看番剧)
@@ -314,6 +317,8 @@ export Ray_Serilog__WriteTo__9__Args__token="abcde"
#### 3.3.1. 是否开启观看视频任务
+当该配置被设置为`false`时会导致大积分任务中的签到领额外10点经验的任务不能自动完成。
+
| TITLE | CONTENT |
| ---------- | -------------- |
| 配置Key | `DailyTaskConfig:IsWatchVideo` |
@@ -437,6 +442,18 @@ export Ray_Serilog__WriteTo__9__Args__token="abcde"
| 环境变量 | `Ray_DailyTaskConfig__SaveCoinsWhenLv6` |
| GitHub Secrets | |
+
+#### 3.3.11. 是否开启专栏投币
+
+| TITLE | CONTENT |
+| ---------- | -------------- |
+| 配置Key | `DailyTaskConfig:IsDonateCoinForArticle` |
+| 值域 | [true,false]|
+| 默认值 | false |
+| 环境变量 | `Ray_DailyTaskConfig__IsDonateCoinForArticle` |
+| GitHub Secrets | |
+
+
### 3.4. 天选时刻抽奖相关
@@ -896,3 +913,17 @@ 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
```
+
+
+### 3.8. 大积分相关
+
+
+#### 3.8.1. 自定义观看番剧
+
+| TITLE | CONTENT |
+| ---------- | -------------- |
+| 配置Key | `VipBigPointConfig:ViewBangumis` |
+| 值域 | 番剧的ssid(season_id) |
+| 默认值 | `33378`(名侦探柯南) |
+| 环境变量 | `Ray_VipBigPointConfig__ViewBangumis` |
+| GitHub Secrets | |
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticlesByUpIdFullFto.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticlesByUpIdFullFto.cs
index e4cae3b9b..8d646ffbd 100644
--- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticlesByUpIdFullFto.cs
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticlesByUpIdFullFto.cs
@@ -2,13 +2,17 @@
public class SearchArticlesByUpIdDto
{
- public long Mid { get; set; }
+ public long mid { get; set; }
- public int Pn { get; set; } = 1;
+ public int pn { get; set; } = 1;
- public int Ps { get; set; } = 30;
+ public int ps { get; set; } = 12;
- public string Sort { get; set; } = "publish_time";
+ public string sort { get; set; } = "publish_time";
+
+ public long web_location { get; set; } = 1550101;
+
+ public string platform { get; set; } = "web";
}
public class SearchArticlesByUpIdFullDto : SearchArticlesByUpIdDto
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UploadVideoHeartbeatRequest.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UploadVideoHeartbeatRequest.cs
index a8b50b652..0612801c1 100644
--- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UploadVideoHeartbeatRequest.cs
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UploadVideoHeartbeatRequest.cs
@@ -17,6 +17,10 @@ public class UploadVideoHeartbeatRequest
public string Bvid { get; set; }
+ public long? Epid { get; set; }
+
+ public long? Sid { get; set; }
+
///
/// 当前用户UID
///
@@ -49,6 +53,11 @@ public class UploadVideoHeartbeatRequest
///
public int Type { get; set; } = 3;
+ ///
+ /// 剧集副类型
+ ///
+ public int? Sub_type { get; set; }
+
///
/// 2
///
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Video/GetBangumiBySsidResponse.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Video/GetBangumiBySsidResponse.cs
new file mode 100644
index 000000000..b59c58c7a
--- /dev/null
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Video/GetBangumiBySsidResponse.cs
@@ -0,0 +1,45 @@
+using static System.Collections.Specialized.BitVector32;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Xml.Linq;
+
+namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Video;
+
+public class GetBangumiBySsidResponse
+{
+ public int Code { get; set; } = int.MinValue;
+
+ public string Message { get; set; }
+
+ public Result Result { get; set; }
+}
+
+public class Result
+{
+ public List episodes { get; set; }
+}
+
+
+public class Episode
+{
+ public int aid { get; set; }
+
+ public string bvid { get; set; }
+
+ public int cid { get; set; }
+
+ public int duration { get; set; }
+
+ public int ep_id { get; set; }
+
+ public int id { get; set; }
+
+ public string long_title { get; set; }
+
+ public string share_copy { get; set; }
+
+ public int status { get; set; }
+
+
+
+}
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ViewMall/ViewvipMallRequest.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ViewMall/ViewvipMallRequest.cs
new file mode 100644
index 000000000..186351056
--- /dev/null
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ViewMall/ViewvipMallRequest.cs
@@ -0,0 +1,7 @@
+namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.ViewMall;
+
+public class ViewVipMallRequest
+{
+ public string Csrf { get; set; }
+ public string EventId { get; set; } = "hevent_oy4b7h3epeb";
+}
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs
index 3c19f92f3..7f4093496 100644
--- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs
@@ -73,7 +73,16 @@ public interface IVideoApi : IBiliBiliApi
//[HttpGet("/x/space/wbi/arc/search?mid={upId}&ps={pageSize}&tid=0&pn={pageNumber}&keyword={keyword}&order=pubdate&platform=web&web_location=1550101&order_avoided=true&w_rid=5df06b1c48e2be86a96e9d0f99bf06f4&wts=1684854929")]
[HttpGet("/x/space/wbi/arc/search")]
Task> SearchVideosByUpId([PathQuery] SearchVideosByUpIdFullDto request);
-
+
+ ///
+ /// 通过ssid获取番剧的具体信息
+ ///
+ ///
+ ///
+ [HttpGet("/pgc/view/web/season?season_id={ssid}")]
+ Task GetBangumiBySsid(long ssid);
+
+
}
///
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipBigPointApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipBigPointApi.cs
index f83122d74..d1743803c 100644
--- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipBigPointApi.cs
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipBigPointApi.cs
@@ -12,31 +12,45 @@ namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces
/// 大会员大积分
///
[Header("Host", "api.bilibili.com")]
- [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
- [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[LogFilter]
public interface IVipBigPointApi
{
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[HttpGet("/x/vip_point/task/combine")]
Task> GetTaskList();
+
+ [Header("Referer", "https://www.bilibili.com")]
[HttpPost("/pgc/activity/score/task/sign")]
Task Sign([FormContent] SignRequest request);
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[HttpPost("/pgc/activity/score/task/receive")]
Task Receive([JsonContent] ReceiveOrCompleteTaskRequest request);
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[HttpPost("/pgc/activity/score/task/complete")]
Task Complete([JsonContent] ReceiveOrCompleteTaskRequest request);
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[HttpPost("/pgc/activity/deliver/task/complete")]
Task ViewComplete([FormContent] ViewRequest request);
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[HttpGet("/x/vip/privilege/my")]
Task> GetVouchersInfo();
+ [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
+ [Header("User-Agent", "Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 os/android model/MuMu build/6720300 osVer/6.0.1 sdkInt/23 network/2 BiliApp/6720300 mobi_app/android channel/html5_search_baidu Buvid/XZFC135F5263B6897C8A4BE7AEB125BBF10F8 sessionID/72d3f4c9 innerVer/6720310 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0 6.72.0 os/android model/MuMu mobi_app/android build/6720300 channel/html5_search_baidu innerVer/6720310 osVer/6.0.1 network/2")]
[Header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")]
[HttpPost("/x/vip/experience/add")]
Task GetVipExperience([FormContent] VipExperienceRequest request);
+
+
}
}
diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipMallApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipMallApi.cs
new file mode 100644
index 000000000..f5f2d5933
--- /dev/null
+++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipMallApi.cs
@@ -0,0 +1,13 @@
+using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos;
+using System.Threading.Tasks;
+using WebApiClientCore.Attributes;
+using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.ViewMall;
+
+namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces;
+
+[Header("Host", "show.bilibili.com")]
+public interface IVipMallApi
+{
+ [HttpPost("/api/activity/fire/common/event/dispatch")]
+ Task ViewVipMall([JsonContent] ViewVipMallRequest request);
+}
diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs
index 92b8831c4..3ace74915 100644
--- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs
+++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs
@@ -75,6 +75,7 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se
// 添加注入
services.AddBiliBiliClientApi("https://api.bilibili.com");
+ services.AddBiliBiliClientApi("https://show.bilibili.com");
//qinglong
var qinglongHost = configuration["QL_URL"] ?? "http://localhost:5600";
diff --git a/src/Ray.BiliBiliTool.Application.Contracts/IVipBigPointAppService.cs b/src/Ray.BiliBiliTool.Application.Contracts/IVipBigPointAppService.cs
index f78097ef3..db57c0539 100644
--- a/src/Ray.BiliBiliTool.Application.Contracts/IVipBigPointAppService.cs
+++ b/src/Ray.BiliBiliTool.Application.Contracts/IVipBigPointAppService.cs
@@ -3,6 +3,7 @@
using System.ComponentModel;
using System.Text;
using System.Threading.Tasks;
+using Ray.BiliBiliTool.DomainService.Dtos;
namespace Ray.BiliBiliTool.Application.Contracts
{
@@ -14,5 +15,8 @@ namespace Ray.BiliBiliTool.Application.Contracts
public interface IVipBigPointAppService : IAppService
{
Task VipExpress();
+ Task WatchBangumi();
}
+
+
}
diff --git a/src/Ray.BiliBiliTool.Application.Contracts/Ray.BiliBiliTool.Application.Contracts.csproj b/src/Ray.BiliBiliTool.Application.Contracts/Ray.BiliBiliTool.Application.Contracts.csproj
index 3f9985f28..90b5e4c9b 100644
--- a/src/Ray.BiliBiliTool.Application.Contracts/Ray.BiliBiliTool.Application.Contracts.csproj
+++ b/src/Ray.BiliBiliTool.Application.Contracts/Ray.BiliBiliTool.Application.Contracts.csproj
@@ -8,4 +8,8 @@
+
+
+
+
diff --git a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs
index db2ee02f9..f7e6ccc84 100644
--- a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs
+++ b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs
@@ -95,9 +95,6 @@ public override async Task DoTaskAsync(CancellationToken cancellationToken)
await ReceiveVipPrivilege(userInfo);
await ReceiveMangaVipReward(userInfo);
- //TODO 大会员领经验
-
-
await Charge(userInfo);
}
diff --git a/src/Ray.BiliBiliTool.Application/VipBigPointAppService.cs b/src/Ray.BiliBiliTool.Application/VipBigPointAppService.cs
index 7d3d038ee..d8de26c41 100644
--- a/src/Ray.BiliBiliTool.Application/VipBigPointAppService.cs
+++ b/src/Ray.BiliBiliTool.Application/VipBigPointAppService.cs
@@ -4,12 +4,17 @@
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
using Ray.BiliBiliTool.Agent;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos;
+using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Video;
+using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.ViewMall;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.VipTask;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces;
using Ray.BiliBiliTool.Application.Attributes;
using Ray.BiliBiliTool.Application.Contracts;
+using Ray.BiliBiliTool.Config.Options;
+using Ray.BiliBiliTool.DomainService.Dtos;
using Ray.BiliBiliTool.DomainService.Interfaces;
namespace Ray.BiliBiliTool.Application
@@ -23,6 +28,9 @@ public class VipBigPointAppService : AppService, IVipBigPointAppService
private readonly IVideoDomainService _videoDomainService;
private readonly IAccountDomainService _accountDomainService;
private readonly BiliCookie _biliCookie;
+ private readonly IVipMallApi _vipMallApi;
+ private readonly IVideoApi _videoApi;
+ private readonly VipBigPointOptions _vipBigPointOptions;
public VipBigPointAppService(
IConfiguration configuration,
@@ -30,7 +38,11 @@ public VipBigPointAppService(
IVipBigPointApi vipApi,
IAccountDomainService loginDomainService,
IVideoDomainService videoDomainService,
- BiliCookie biliCookie, IAccountDomainService accountDomainService)
+ BiliCookie biliCookie,
+ IAccountDomainService accountDomainService,
+ IVipMallApi vipMallApi,
+ IVideoApi videoApi,
+ IOptionsMonitor vipBigPointOptions)
{
_configuration = configuration;
_logger = logger;
@@ -39,6 +51,9 @@ public VipBigPointAppService(
_videoDomainService = videoDomainService;
_biliCookie = biliCookie;
_accountDomainService = accountDomainService;
+ _vipMallApi = vipMallApi;
+ _videoApi = videoApi;
+ _vipBigPointOptions = vipBigPointOptions.CurrentValue;
}
public async Task VipExpress()
@@ -92,8 +107,6 @@ public async Task VipExpress()
[TaskInterceptor("大会员大积分", TaskLevel.One)]
public override async Task DoTaskAsync(CancellationToken cancellationToken)
{
- await VipExpress();
-
// TODO 解决taskInfo在一个任务出错后,后续的任务均会报空引用错误
var ui = await GetUserInfo();
@@ -110,6 +123,8 @@ public override async Task DoTaskAsync(CancellationToken cancellationToken)
VipTaskInfo taskInfo = re.Data;
taskInfo.LogInfo(_logger);
+ await VipExpress();
+
//签到
taskInfo = await Sign(taskInfo);
@@ -128,11 +143,16 @@ public override async Task DoTaskAsync(CancellationToken cancellationToken)
// taskInfo = await ViewFilmChannel(taskInfo);
//浏览会员购页面10秒
- taskInfo = ViewVipMall(taskInfo);
+ taskInfo = await ViewVipMall(taskInfo);
+
+ //浏览装扮商城
+ taskInfo = await ViewDressMall(taskInfo);
//观看任意正片内容
taskInfo = await ViewVideo(taskInfo);
+
+
//领取购买任务
taskInfo = await BuyVipVideo(taskInfo);
// taskInfo = await BuyVipProduct(taskInfo);
@@ -284,7 +304,7 @@ private async Task ViewAnimate(VipTaskInfo info)
_logger.LogInformation("开始领取任务");
await TryReceive(targetTask.task_code);
}
-
+
_logger.LogInformation("开始完成任务");
var re = await CompleteView(code);
@@ -309,11 +329,9 @@ CommonTaskItem GetTarget(VipTaskInfo info)
return info;
}
- [TaskInterceptor("浏览影视频道页10秒", TaskLevel.Two, false)]
- private async Task ViewFilmChannel(VipTaskInfo info)
+ [TaskInterceptor("浏览会员购页面10秒", TaskLevel.Two, false)]
+ private async Task ViewVipMall(VipTaskInfo info)
{
- var code = "tv_channel";
-
CommonTaskItem targetTask = GetTarget(info);
//如果状态不等于3,则做
@@ -331,10 +349,14 @@ private async Task ViewFilmChannel(VipTaskInfo info)
}
_logger.LogInformation("开始完成任务");
- var re = await CompleteView(code);
+ var re = await _vipMallApi.ViewVipMall(new ViewVipMallRequest()
+ {
+ Csrf = _biliCookie.BiliJct
+ });
+ if (re.Code != 0) throw new Exception(re.ToJsonStr());
//确认
- if (re)
+ if (re.Code == 0)
{
var infoResult = await _vipApi.GetTaskList();
if (infoResult.Code != 0) throw new Exception(infoResult.ToJsonStr());
@@ -348,17 +370,8 @@ CommonTaskItem GetTarget(VipTaskInfo info)
{
return info.Task_info.Modules.First(x => x.module_title == "日常任务")
.common_task_item
- .First(x => x.task_code == "filmtab");
+ .First(x => x.task_code == "vipmallview");
}
-
- return info;
- }
-
- [TaskInterceptor("浏览会员购页面10秒", TaskLevel.Two, false)]
- private VipTaskInfo ViewVipMall(VipTaskInfo info)
- {
- //todo
- _logger.LogInformation("待实现...");
return info;
}
@@ -367,12 +380,12 @@ private async Task ViewVideo(VipTaskInfo info)
{
CommonTaskItem targetTask = GetTarget(info);
- //如果状态不等于3,则做
- if (targetTask.state == 3)
- {
- _logger.LogInformation("已完成,跳过");
- return info;
- }
+ // 如果状态不等于3,则做
+ if (targetTask.state == 3)
+ {
+ _logger.LogInformation("已完成,跳过");
+ return info;
+ }
//0需要领取
if (targetTask.state == 0)
@@ -382,7 +395,16 @@ private async Task ViewVideo(VipTaskInfo info)
}
_logger.LogInformation("开始完成任务");
- _logger.LogInformation("待开发...");//todo
+ _logger.LogInformation("观看第一个正片内容");
+
+ await WatchBangumi();
+
+ _logger.LogInformation("观看第二个正片内容");
+
+ //等待40s
+ await Task.Delay(TimeSpan.FromSeconds(40));
+
+ await WatchBangumi();
CommonTaskItem GetTarget(VipTaskInfo info)
{
@@ -423,8 +445,8 @@ CommonTaskItem GetTarget(VipTaskInfo info)
}
}
- [TaskInterceptor("购买指定大会员产品(仅领取)", TaskLevel.Two, false)]
- private async Task BuyVipProduct(VipTaskInfo info)
+ [TaskInterceptor("购买指定会员购商品(仅领取)", TaskLevel.Two, false)]
+ private async Task BuyVipMall(VipTaskInfo info)
{
CommonTaskItem targetTask = GetTarget(info);
@@ -448,19 +470,21 @@ CommonTaskItem GetTarget(VipTaskInfo info)
{
return info.Task_info.Modules.First(x => x.module_title == "日常任务")
.common_task_item
- .First(x => x.task_code == "subscribe");
+ .First(x => x.task_code == "vipmallbuy");
}
}
- [TaskInterceptor("购买指定会员购商品(仅领取)", TaskLevel.Two, false)]
- private async Task BuyVipMall(VipTaskInfo info)
+ [TaskInterceptor("浏览装扮商城主页", TaskLevel.Two, false)]
+ private async Task ViewDressMall(VipTaskInfo info)
{
+ var code = "dress-view";
+
CommonTaskItem targetTask = GetTarget(info);
- if (targetTask.state is 3 or 1)
+ //如果状态不等于3,则做
+ if (targetTask.state == 3)
{
- var re = targetTask.state == 1 ? "已领取" : "已完成";
- _logger.LogInformation("{re},跳过", re);
+ _logger.LogInformation("已完成,跳过");
return info;
}
@@ -471,16 +495,31 @@ private async Task BuyVipMall(VipTaskInfo info)
await TryReceive(targetTask.task_code);
}
- return info;
+ _logger.LogInformation("开始完成任务");
+ var re = await Complete(code);
+
+ //确认
+ if (re)
+ {
+ var infoResult = await _vipApi.GetTaskList();
+ if (infoResult.Code != 0) throw new Exception(infoResult.ToJsonStr());
+ info = infoResult.Data;
+ targetTask = GetTarget(info);
+
+ _logger.LogInformation("确认:{re}", targetTask.state == 3 && targetTask.complete_times >= 1);
+ }
CommonTaskItem GetTarget(VipTaskInfo info)
{
return info.Task_info.Modules.First(x => x.module_title == "日常任务")
.common_task_item
- .First(x => x.task_code == "vipmallbuy");
+ .First(x => x.task_code == "dress-view");
}
+
+ return info;
}
+
///
/// 领取任务
///
@@ -539,5 +578,161 @@ private async Task CompleteView(string code)
return false;
}
}
+
+ public async Task WatchBangumi()
+ {
+ if (_vipBigPointOptions.ViewBangumiList == null ||_vipBigPointOptions.ViewBangumiList.Count == 0)
+ return false;
+
+ long randomSsid = _vipBigPointOptions.ViewBangumiList[new Random().Next(0,_vipBigPointOptions.ViewBangumiList.Count)];
+
+ var res = await GetBangumi(randomSsid);
+ if (res is null)
+ {
+ return false;
+ }
+
+ var videoInfo = res.Value.Item1;
+
+ // 随机播放时间
+ int playedTime = new Random().Next(905, 1800);
+ // 观看该视频
+ var request = new UploadVideoHeartbeatRequest()
+ {
+ Aid = long.Parse(videoInfo.Aid),
+ Bvid = videoInfo.Bvid,
+ Cid = videoInfo.Cid,
+ Mid = long.Parse(_biliCookie.UserId),
+ Sid = randomSsid,
+ Epid = res.Value.Item2,
+ Csrf = _biliCookie.BiliJct,
+ Type = 4,
+ Sub_type = 1,
+ Start_ts = DateTime.Now.ToTimeStamp() - playedTime,
+ Played_time = playedTime,
+ Realtime = playedTime,
+ Real_played_time = playedTime
+ };
+ BiliApiResponse apiResponse = await _videoApi.UploadVideoHeartbeat(request);
+ if (apiResponse.Code == 0)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 从自定义的番剧ssid中选择其中的一部中的一集
+ ///
+ /// 番剧ssid
+ ///
+ private async Task<(VideoInfoDto,long)?> GetBangumi(long randomSsid)
+ {
+ try
+ {
+ if (randomSsid is 0 or long.MinValue)
+ return null;
+ var bangumiInfo = await _videoApi.GetBangumiBySsid(randomSsid);
+
+ // 从获取的剧集中随机获得其中的一集
+
+ var bangumi = bangumiInfo.Result.episodes[new Random().Next(0, bangumiInfo.Result.episodes.Count)];
+ var videoInfo = new VideoInfoDto()
+ {
+ Bvid = bangumi.bvid,
+ Aid = bangumi.aid.ToString(),
+ Cid = bangumi.cid,
+ Copyright = 1,
+ Duration = bangumi.duration,
+ Title = bangumi.share_copy
+ };
+ _logger.LogInformation("本次播放的正片为:{title}",bangumi.share_copy);
+ return (videoInfo, bangumi.ep_id);
+ }
+ catch (Exception e)
+ {
+ _logger.LogError(e.Message);
+ }
+ return null;
+ }
+ #region deprecated
+ [TaskInterceptor("浏览影视频道页10秒", TaskLevel.Two, false)]
+ private async Task ViewFilmChannel(VipTaskInfo info)
+ {
+ var code = "tv_channel";
+
+ CommonTaskItem targetTask = GetTarget(info);
+
+ //如果状态不等于3,则做
+ if (targetTask.state == 3)
+ {
+ _logger.LogInformation("已完成,跳过");
+ return info;
+ }
+
+ //0需要领取
+ if (targetTask.state == 0)
+ {
+ _logger.LogInformation("开始领取任务");
+ await TryReceive(targetTask.task_code);
+ }
+
+ _logger.LogInformation("开始完成任务");
+ var re = await CompleteView(code);
+
+ //确认
+ if (re)
+ {
+ var infoResult = await _vipApi.GetTaskList();
+ if (infoResult.Code != 0) throw new Exception(infoResult.ToJsonStr());
+ info = infoResult.Data;
+ targetTask = GetTarget(info);
+
+ _logger.LogInformation("确认:{re}", targetTask.state == 3 && targetTask.complete_times >= 1);
+ }
+
+ CommonTaskItem GetTarget(VipTaskInfo info)
+ {
+ return info.Task_info.Modules.First(x => x.module_title == "日常任务")
+ .common_task_item
+ .First(x => x.task_code == "filmtab");
+ }
+
+ return info;
+ }
+
+ [TaskInterceptor("购买指定大会员产品(仅领取)", TaskLevel.Two, false)]
+ private async Task BuyVipProduct(VipTaskInfo info)
+ {
+ CommonTaskItem targetTask = GetTarget(info);
+
+ if (targetTask.state is 3 or 1)
+ {
+ var re = targetTask.state == 1 ? "已领取" : "已完成";
+ _logger.LogInformation("{re},跳过", re);
+ return info;
+ }
+
+ //0需要领取
+ if (targetTask.state == 0)
+ {
+ _logger.LogInformation("开始领取任务");
+ await TryReceive(targetTask.task_code);
+ }
+
+ return info;
+
+ CommonTaskItem GetTarget(VipTaskInfo info)
+ {
+ return info.Task_info.Modules.First(x => x.module_title == "日常任务")
+ .common_task_item
+ .First(x => x.task_code == "subscribe");
+ }
+ }
+
+
+ #endregion
+
}
}
diff --git a/src/Ray.BiliBiliTool.Config/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Config/Extensions/ServiceCollectionExtension.cs
index 5ba063782..ddd953779 100644
--- a/src/Ray.BiliBiliTool.Config/Extensions/ServiceCollectionExtension.cs
+++ b/src/Ray.BiliBiliTool.Config/Extensions/ServiceCollectionExtension.cs
@@ -23,6 +23,7 @@ public static IServiceCollection AddBiliBiliConfigs(this IServiceCollection serv
.Configure(configuration.GetSection("DailyTaskConfig"))
.Configure(configuration.GetSection("LiveLotteryTaskConfig"))
.Configure(configuration.GetSection("UnfollowBatchedTaskConfig"))
+ .Configure(configuration.GetSection("VipBigPointConfig"))
.Configure(configuration.GetSection("Security"))
.Configure(configuration.GetSection("ReceiveVipPrivilegeConfig"))
.Configure(configuration.GetSection("LiveFansMedalTaskOptions"))
diff --git a/src/Ray.BiliBiliTool.Config/Options/VipBigPointOptions.cs b/src/Ray.BiliBiliTool.Config/Options/VipBigPointOptions.cs
new file mode 100644
index 000000000..ff142ab9a
--- /dev/null
+++ b/src/Ray.BiliBiliTool.Config/Options/VipBigPointOptions.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+
+namespace Ray.BiliBiliTool.Config.Options;
+
+public class VipBigPointOptions
+{
+ public string ViewBangumis { get; set; }
+
+ public List ViewBangumiList
+ {
+ get
+ {
+ List re = new();
+ if (string.IsNullOrWhiteSpace(ViewBangumis) | ViewBangumis == "-1")
+ return re;
+
+ string[] array = ViewBangumis.Split(',');
+ foreach (string item in array)
+ {
+ if (long.TryParse(item.Trim(), out long upId))
+ re.Add(upId);
+ else
+ re.Add(long.MinValue);
+ }
+ return re;
+ }
+ }
+}
diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json
index d92fc1e05..d0af4e8e2 100644
--- a/src/Ray.BiliBiliTool.Console/appsettings.json
+++ b/src/Ray.BiliBiliTool.Console/appsettings.json
@@ -38,7 +38,8 @@
},
"VipBigPointConfig": {
- "Cron": "7 1 * * *"
+ "Cron": "7 1 * * *",
+ "ViewBangumis": "33378" // 自定义番剧的ssid,若不清楚含义请勿修改(默认为名侦探柯南)
},
"LiveFansMedalTaskConfig": {
diff --git a/src/Ray.BiliBiliTool.DomainService/ArticleDomainService.cs b/src/Ray.BiliBiliTool.DomainService/ArticleDomainService.cs
index bda778dba..2ff253492 100644
--- a/src/Ray.BiliBiliTool.DomainService/ArticleDomainService.cs
+++ b/src/Ray.BiliBiliTool.DomainService/ArticleDomainService.cs
@@ -54,7 +54,6 @@ public ArticleDomainService(
}
-
public async Task LikeArticle(long cvid)
{
await _articleApi.Like(cvid, _biliCookie.BiliJct);
@@ -66,7 +65,6 @@ public async Task LikeArticle(long cvid)
///
public async Task AddCoinForArticles()
{
-
var donateCoinsCounts = await CalculateDonateCoinsCounts();
if (donateCoinsCounts == 0)
@@ -84,11 +82,17 @@ public async Task AddCoinForArticles()
_logger.LogDebug("开始尝试第{num}次", i);
var upId = GetUpFromConfigUps();
+ if (upId == 0)
+ {
+ _logger.LogDebug("未能成功选择支持的Up主");
+ continue;
+ }
+ // 当upId不符合时,会直接报错,需要将两者的判断分隔开
var cvid = await GetRandomArticleFromUp(upId);
- if (upId == 0 || cvid == 0)
+ if (cvid == 0)
{
- _logger.LogInformation("未添加支持的Up主,任务跳过");
- return false;
+ _logger.LogDebug("第{num}次尝试,未能成功选择合适的专栏",i);
+ continue;
}
if (await AddCoinForArticle(cvid, upId))
@@ -97,12 +101,11 @@ public async Task AddCoinForArticles()
if (_dailyTaskOptions.SelectLike)
{
await LikeArticle(cvid);
- _logger.LogInformation("文章点赞成功");
+ _logger.LogInformation("专栏点赞成功");
}
+
success++;
}
-
-
}
if (success == donateCoinsCounts)
@@ -112,14 +115,14 @@ public async Task AddCoinForArticles()
_logger.LogInformation("投币尝试超过10次,已终止");
return false;
}
-
+
_logger.LogInformation("【硬币余额】{coin}", (await _accountApi.GetCoinBalance()).Data.Money ?? 0);
return true;
}
-
+
///
/// 给某一篇专栏投币
///
@@ -176,17 +179,17 @@ private async Task GetRandomArticleFromUp(long mid)
var req = new SearchArticlesByUpIdDto()
{
- Mid = mid,
- Ps = 1,
- Pn = new Random().Next(1, articleCount + 1)
+ mid = mid,
+ ps = 1,
+ pn = new Random().Next(1, articleCount + 1)
};
var w_ridDto = await _wbiDomainService.GetWridAsync(req);
var fullDto = new SearchArticlesByUpIdFullDto()
{
- Mid = mid,
- Ps = req.Ps,
- Pn = req.Pn,
+ mid = mid,
+ ps = req.ps,
+ pn = req.pn,
w_rid = w_ridDto.w_rid,
wts = w_ridDto.wts
};
@@ -200,7 +203,7 @@ private async Task GetRandomArticleFromUp(long mid)
ArticleInfo articleInfo = re.Data.Articles.FirstOrDefault();
- _logger.LogDebug("获取到的专栏{cvid}({title})", articleInfo.Id, articleInfo.Title);
+ _logger.LogInformation("获取到的专栏{cvid}({title})", articleInfo.Id, articleInfo.Title);
// 检查是否可投
if (!await IsCanDonate(articleInfo.Id))
@@ -236,7 +239,8 @@ private long GetUpFromConfigUps()
_logger.LogDebug("不能为自己投币");
return 0;
}
- _logger.LogDebug("挑选出的up主为{UpId}",randomUpId);
+
+ _logger.LogDebug("挑选出的up主为{UpId}", randomUpId);
return randomUpId;
}
catch (Exception e)
@@ -257,14 +261,14 @@ private async Task GetArticleCountOfUp(long mid)
{
var req = new SearchArticlesByUpIdDto()
{
- Mid = mid
+ mid = mid
};
var w_ridDto = await _wbiDomainService.GetWridAsync(req);
var fullDto = new SearchArticlesByUpIdFullDto()
{
- Mid = mid,
+ mid = mid,
w_rid = w_ridDto.w_rid,
wts = w_ridDto.wts
};
diff --git a/test/AppServiceTest/VipServiceTest.cs b/test/AppServiceTest/VipServiceTest.cs
index f50bafe0d..437ed4260 100644
--- a/test/AppServiceTest/VipServiceTest.cs
+++ b/test/AppServiceTest/VipServiceTest.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Ray.BiliBiliTool.Application.Contracts;
+using Ray.BiliBiliTool.DomainService.Dtos;
using Ray.BiliBiliTool.Infrastructure;
namespace AppServiceTest;
@@ -18,4 +19,14 @@ public async Task VipExpressTest()
var appService = scope.ServiceProvider.GetRequiredService();
await appService.VipExpress();
}
+
+ [Fact]
+ public async Task WatchVideo()
+ {
+ using var scope = Global.ServiceProviderRoot.CreateScope();
+ var appService = scope.ServiceProvider.GetRequiredService();
+ var res = await appService.WatchBangumi();
+ Assert.True(res);
+
+ }
}
diff --git a/test/BiliAgentTest/VideoApiTest.cs b/test/BiliAgentTest/VideoApiTest.cs
index 7ee21588c..bb4248e33 100644
--- a/test/BiliAgentTest/VideoApiTest.cs
+++ b/test/BiliAgentTest/VideoApiTest.cs
@@ -17,7 +17,7 @@ public class VideoApiTest
{
public VideoApiTest()
{
- Program.CreateHost(new[] { "--ENVIRONMENT=Development" });//ĬPrdָΪDevԶȡû
+ Program.CreateHost(new[] { "--ENVIRONMENT=Development" });//Ĭ��Prd����������ָ��ΪDev���Զ�ȡ���û���������
}
[Fact]
@@ -40,5 +40,18 @@ public void GetLiveWalletStatus_Normal_Success()
Assert.False(re.Code != 0);
}
}
+
+ [Fact]
+ public async Task GetBangumiTest()
+ {
+
+ using var scope = Global.ServiceProviderRoot.CreateScope();
+
+ var ck = scope.ServiceProvider.GetRequiredService();
+ var api = scope.ServiceProvider.GetRequiredService();
+ var req = await api.GetBangumiBySsid(46508);
+
+ Assert.Equal(0,req.Code);
+ }
}
}
diff --git a/test/BiliAgentTest/VipApiTest.cs b/test/BiliAgentTest/VipApiTest.cs
index 3e540a0a2..793fa0531 100644
--- a/test/BiliAgentTest/VipApiTest.cs
+++ b/test/BiliAgentTest/VipApiTest.cs
@@ -7,6 +7,9 @@
using Ray.BiliBiliTool.Infrastructure;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces;
using Xunit.Abstractions;
+using System;
+using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.ViewMall;
+
namespace BiliAgentTest;
public class VipApiTest
@@ -18,6 +21,22 @@ public VipApiTest(ITestOutputHelper output)
Program.CreateHost(new[] { "--ENVIRONMENT=Development" });
}
+ [Fact]
+ public async Task SignTaskTest()
+ {
+ using var scope = Global.ServiceProviderRoot.CreateScope();
+
+ var ck = scope.ServiceProvider.GetRequiredService();
+ var api = scope.ServiceProvider.GetRequiredService();
+
+ var re = await api.Sign(new SignRequest()
+ {
+ // Csrf = ck.BiliJct
+ });
+ _output.WriteLine(re.ToJsonStr());
+ Assert.Equal(0, re.Code);
+ }
+
[Fact]
public async Task VipInfoTest()
{
@@ -56,4 +75,33 @@ public async Task GetVipExperienceTest()
_output.WriteLine(re.Message);
}
+
+ [Fact]
+ public async Task ViewVipMallTest()
+ {
+ using var scope = Global.ServiceProviderRoot.CreateScope();
+
+ var ck = scope.ServiceProvider.GetRequiredService();
+ var api = scope.ServiceProvider.GetRequiredService();
+ // var test = await api.ViewvipMall("{\r\n\"csrf\":\"33e5d4564b6b69cb4ed829bc404158cb\",\r\n\"eventId\":\"hevent_oy4b7h3epeb\"\r\n}");
+ var re = await api.ViewVipMall(new ViewVipMallRequest()
+ {
+ Csrf = ck.BiliJct,
+ EventId = "hevent_oy4b7h3epeb"
+ });
+ _output.WriteLine(re.Message);
+
+ }
+
+ [Fact]
+ public async Task DressViewTest()
+ {
+ using var scope = Global.ServiceProviderRoot.CreateScope();
+
+ var ck = scope.ServiceProvider.GetRequiredService();
+ var api = scope.ServiceProvider.GetRequiredService();
+ var re = await api.Complete(new ReceiveOrCompleteTaskRequest(
+ "dress-view"));
+ _output.WriteLine(re.Message);
+ }
}