From 78102cd0b78ee78315b53fa37dbe8eea8319747a Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 10:48:42 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E4=BF=AE=E5=89=AAPRD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E4=BF=9D=E7=95=99=E9=9C=80=E8=A6=81=E8=A6=86?= =?UTF-8?q?=E7=9B=96=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ray.BiliBiliTool.Console/appsettings.PRD.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Ray.BiliBiliTool.Console/appsettings.PRD.json b/src/Ray.BiliBiliTool.Console/appsettings.PRD.json index 27de745..85df2cc 100644 --- a/src/Ray.BiliBiliTool.Console/appsettings.PRD.json +++ b/src/Ray.BiliBiliTool.Console/appsettings.PRD.json @@ -1,11 +1,10 @@ { "DailyTaskConfig": { - "SelectLike": true + "NumberOfCoins": 3, //每日设定的投币数 [0,5] + "SupportUpIds": "39180492" //优先选择支持的up主Id集合,多个以英文逗号分隔,如:"123,456"。配置后会优先从指定的up主下挑选视频进行观看、分享和投币,不配置则从排行耪随机获取支持视频 }, "Security": { - "IsSkipDailyTask": false, - "IntervalSecondsBetweenRequestApi": 4, "UserAgent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" //请求B站接口时头部传递的User-Agent }, From 738c7ae15b24cde498b0c0b3f1a74f04bef82111 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 14:03:24 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=88=B0=E5=B7=A5=E5=85=B7=E7=B1=BB=E5=BA=93?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ray.BiliBiliTool.sln | 21 ++- .../Ray.BiliBiliTool.Config.csproj | 1 + .../AccountDomainService.cs | 25 ++- .../ChargeDomainService.cs | 4 +- ...sion.cs => ServiceCollectionExtensions.cs} | 2 +- .../VideoDomainService.cs | 158 +++++++++--------- .../Extensions/DateTimeExtension.cs | 4 +- .../Extensions/ObjectExtensions.cs | 19 +++ .../Extensions/StringExtensions.cs | 19 +++ .../Extensions/TypeExtensions.cs} | 10 +- .../Ray.BiliBiliTool.Util.csproj | 10 ++ test/ConfigTest/ConfigTest.csproj | 6 +- test/DailyTaskTest/DailyTaskTest.csproj | 2 +- test/DeserializeTest/DeserializeTest.csproj | 2 +- .../GetLastDayOfMonthTest.csproj | 2 +- test/LogTest/LogTest.csproj | 2 +- test/PushTest/PushTest.csproj | 6 +- .../UnitTest1.cs | 3 +- test/UtilTest/UtilTest.csproj | 24 +++ 19 files changed, 192 insertions(+), 128 deletions(-) rename src/Ray.BiliBiliTool.DomainService/Extensions/{ServiceCollectionExtension.cs => ServiceCollectionExtensions.cs} (91%) rename src/{Ray.BiliBiliTool.Infrastructure => Ray.BiliBiliTool.Util}/Extensions/DateTimeExtension.cs (85%) create mode 100644 src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs create mode 100644 src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs rename src/{Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtension.cs => Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs} (73%) create mode 100644 src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj rename test/{GetLastDayOfMonthTest => UtilTest}/UnitTest1.cs (76%) create mode 100644 test/UtilTest/UtilTest.csproj diff --git a/Ray.BiliBiliTool.sln b/Ray.BiliBiliTool.sln index 99fcfbf..fdac25d 100644 --- a/Ray.BiliBiliTool.sln +++ b/Ray.BiliBiliTool.sln @@ -25,8 +25,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastru EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DailyTaskTest", "test\DailyTaskTest\DailyTaskTest.csproj", "{ECDB59B8-DD28-4C0D-8145-13629C3EA3B1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetLastDayOfMonthTest", "test\GetLastDayOfMonthTest\GetLastDayOfMonthTest.csproj", "{EF77962E-CE7B-4A12-A4D1-58E70126DE0F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Infrastructure", "src\Ray.BiliBiliTool.Infrastructure\Ray.BiliBiliTool.Infrastructure.csproj", "{7188698C-0A9A-43B2-B3E2-5136B14FDE13}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Application", "src\Ray.BiliBiliTool.Application\Ray.BiliBiliTool.Application.csproj", "{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}" @@ -46,6 +44,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Util", "src\Ray.BiliBiliTool.Util\Ray.BiliBiliTool.Util.csproj", "{B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UtilTest", "test\UtilTest\UtilTest.csproj", "{6A7B2E22-387E-41FB-BE5B-0252129683D9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -72,10 +74,6 @@ Global {ECDB59B8-DD28-4C0D-8145-13629C3EA3B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {ECDB59B8-DD28-4C0D-8145-13629C3EA3B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECDB59B8-DD28-4C0D-8145-13629C3EA3B1}.Release|Any CPU.Build.0 = Release|Any CPU - {EF77962E-CE7B-4A12-A4D1-58E70126DE0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF77962E-CE7B-4A12-A4D1-58E70126DE0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF77962E-CE7B-4A12-A4D1-58E70126DE0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF77962E-CE7B-4A12-A4D1-58E70126DE0F}.Release|Any CPU.Build.0 = Release|Any CPU {7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Debug|Any CPU.Build.0 = Debug|Any CPU {7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -104,6 +102,14 @@ Global {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Debug|Any CPU.Build.0 = Debug|Any CPU {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Release|Any CPU.Build.0 = Release|Any CPU + {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Release|Any CPU.Build.0 = Release|Any CPU + {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -118,7 +124,6 @@ Global {2039BF6A-5EC4-439C-8D2E-77313075843A} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} {110D3D21-8E9B-45AB-9667-6DA1DB3862AC} = {AF21E067-3307-4E7F-8CE8-C695E6B61876} {ECDB59B8-DD28-4C0D-8145-13629C3EA3B1} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} - {EF77962E-CE7B-4A12-A4D1-58E70126DE0F} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} {7188698C-0A9A-43B2-B3E2-5136B14FDE13} = {110D3D21-8E9B-45AB-9667-6DA1DB3862AC} {3388A58D-91CC-4875-A29F-3E6FC3B44BF5} = {98051127-2868-4F5C-9B2C-2150975E05F3} {B6AEDD60-9C06-4391-9171-65EBD5E9D77A} = {98051127-2868-4F5C-9B2C-2150975E05F3} @@ -126,6 +131,8 @@ Global {191C48BD-5CB5-42CA-B394-7A4A9BFA6275} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D} {7105652A-B1C1-4F9E-BA38-8034BC8B26B4} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D} {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} + {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00} = {110D3D21-8E9B-45AB-9667-6DA1DB3862AC} + {6A7B2E22-387E-41FB-BE5B-0252129683D9} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {197319DA-1148-4A99-847C-8B270B6A29AB} diff --git a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj index 69e4ac8..9467385 100644 --- a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj +++ b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj @@ -15,6 +15,7 @@ + diff --git a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs index 1f0e5c8..ad4aea8 100644 --- a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs @@ -1,5 +1,4 @@ using System; -using System.Text.Json; using Microsoft.Extensions.Logging; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; @@ -19,8 +18,8 @@ public class AccountDomainService : IAccountDomainService public AccountDomainService(ILogger logger, IDailyTaskApi dailyTaskApi) { - _logger = logger; - _dailyTaskApi = dailyTaskApi; + this._logger = logger; + this._dailyTaskApi = dailyTaskApi; } /// @@ -29,29 +28,29 @@ public AccountDomainService(ILogger logger, /// public UseInfo LoginByCookie() { - var apiResponse = _dailyTaskApi.LoginByCookie().Result; + BiliApiResponse apiResponse = this._dailyTaskApi.LoginByCookie().Result; if (apiResponse.Code != 0 || !apiResponse.Data.IsLogin) { - _logger.LogWarning("登录异常,Cookies可能失效了,请仔细检查Github Secrets中DEDEUSERID、SESSDATA、BILI_JCT三项的值是否正确"); + this._logger.LogWarning("登录异常,Cookies可能失效了,请仔细检查Github Secrets中DEDEUSERID、SESSDATA、BILI_JCT三项的值是否正确"); return null; } UseInfo useInfo = apiResponse.Data; //用户名模糊处理 - _logger.LogInformation("登录成功,用户名: {0}", useInfo.GetFuzzyUname()); - _logger.LogInformation("硬币余额: {0}", useInfo.Money ?? 0); + this._logger.LogInformation("登录成功,用户名: {0}", useInfo.GetFuzzyUname()); + this._logger.LogInformation("硬币余额: {0}", useInfo.Money ?? 0); if (useInfo.Level_info.Current_level < 6) { - _logger.LogInformation("距离升级到Lv{0}还有: {1}天", + this._logger.LogInformation("距离升级到Lv{0}还有: {1}天", useInfo.Level_info.Current_level + 1, (useInfo.Level_info.GetNext_expLong() - useInfo.Level_info.Current_exp) / Constants.EveryDayExp); } else { - _logger.LogInformation("当前等级Lv6,经验值为:{0}", useInfo.Level_info.Current_exp); + this._logger.LogInformation("当前等级Lv6,经验值为:{0}", useInfo.Level_info.Current_exp); } return useInfo; @@ -63,8 +62,8 @@ public UseInfo LoginByCookie() /// public DailyTaskInfo GetDailyTaskStatus() { - var result = new DailyTaskInfo(); - var apiResponse = _dailyTaskApi.GetDailyTaskRewardInfo().Result; + DailyTaskInfo result = new DailyTaskInfo(); + BiliApiResponse apiResponse = this._dailyTaskApi.GetDailyTaskRewardInfo().Result; if (apiResponse.Code == 0) { //_logger.LogInformation("请求本日任务完成状态成功"); @@ -72,8 +71,8 @@ public DailyTaskInfo GetDailyTaskStatus() } else { - _logger.LogWarning("获取今日任务完成状态失败:{result}", JsonSerializer.Serialize(apiResponse)); - result = _dailyTaskApi.GetDailyTaskRewardInfo().Result.Data; + this._logger.LogWarning("获取今日任务完成状态失败:{result}", apiResponse.ToJson()); + result = this._dailyTaskApi.GetDailyTaskRewardInfo().Result.Data; //todo:偶发性请求失败,再请求一次,这么写很丑陋,待用polly再框架层面实现 } diff --git a/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs b/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs index 666243f..24b8c43 100644 --- a/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs @@ -1,12 +1,10 @@ using System; -using System.Text.Json; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Config.Options; using Ray.BiliBiliTool.DomainService.Interfaces; -using Ray.BiliBiliTool.Infrastructure.Extensions; namespace Ray.BiliBiliTool.DomainService { @@ -82,7 +80,7 @@ public void Charge(UseInfo userInfo) } else { - this._logger.LogDebug("充电失败了啊 原因:{reason}", JsonSerializer.Serialize(response)); + this._logger.LogDebug("充电失败了啊 原因:{reason}", response.ToJson()); } } else diff --git a/src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtensions.cs similarity index 91% rename from src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtension.cs rename to src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtensions.cs index 80c3fd0..9b47d28 100644 --- a/src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtensions.cs @@ -3,7 +3,7 @@ namespace Ray.BiliBiliTool.DomainService.Extensions { - public static class ServiceCollectionExtension + public static class ServiceCollectionExtensions { public static IServiceCollection AddDomainServices(this IServiceCollection services) { diff --git a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs index 35288a2..d59b0a2 100644 --- a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; @@ -33,13 +32,13 @@ public VideoDomainService(ILogger logger, ICoinDomainService coinDomainService, IRelationApi relationApi) { - _logger = logger; - _dailyTaskApi = dailyTaskApi; - _biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; - _dailyTaskOptions = dailyTaskOptions.CurrentValue; - _accountApi = accountApi; - _coinDomainService = coinDomainService; - _relationApi = relationApi; + this._logger = logger; + this._dailyTaskApi = dailyTaskApi; + this._biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; + this._dailyTaskOptions = dailyTaskOptions.CurrentValue; + this._accountApi = accountApi; + this._coinDomainService = coinDomainService; + this._relationApi = relationApi; } /// @@ -48,7 +47,7 @@ public VideoDomainService(ILogger logger, /// public string GetRandomVideo() { - return RegionRanking().Item1; + return this.RegionRanking().Item1; } public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) @@ -57,18 +56,18 @@ public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) if (!dailyTaskStatus.Watch || !dailyTaskStatus.Share) { - targetVideo = GetRandomVideoForWatch(); - _logger.LogInformation("获取随机视频:{title}", targetVideo.Item2); + targetVideo = this.GetRandomVideoForWatch(); + this._logger.LogInformation("获取随机视频:{title}", targetVideo.Item2); } if (!dailyTaskStatus.Watch) - WatchVideo(targetVideo.Item1, targetVideo.Item2); + this.WatchVideo(targetVideo.Item1, targetVideo.Item2); else - _logger.LogInformation("今天已经观看过了,不需要再看啦"); + this._logger.LogInformation("今天已经观看过了,不需要再看啦"); if (!dailyTaskStatus.Share) - ShareVideo(targetVideo.Item1, targetVideo.Item2); + this.ShareVideo(targetVideo.Item1, targetVideo.Item2); else - _logger.LogInformation("今天已经分享过了,不要再分享啦"); + this._logger.LogInformation("今天已经分享过了,不要再分享啦"); } /// @@ -77,15 +76,15 @@ public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) public void WatchVideo(string aid, string title = "") { int playedTime = new Random().Next(1, 90); - var apiResponse = _dailyTaskApi.UploadVideoHeartbeat(aid, playedTime).Result; + BiliApiResponse apiResponse = this._dailyTaskApi.UploadVideoHeartbeat(aid, playedTime).Result; if (apiResponse.Code == 0) { - _logger.LogInformation("视频播放成功,已观看到第{playedTime}秒", playedTime); + this._logger.LogInformation("视频播放成功,已观看到第{playedTime}秒", playedTime); } else { - _logger.LogDebug("视频播放失败,原因:{msg}", apiResponse.Message); + this._logger.LogDebug("视频播放失败,原因:{msg}", apiResponse.Message); } } @@ -95,16 +94,16 @@ public void WatchVideo(string aid, string title = "") /// 视频aid public void ShareVideo(string aid, string title = "") { - var apiResponse = _dailyTaskApi.ShareVideo(aid, _biliBiliCookieOptions.BiliJct).Result; + BiliApiResponse apiResponse = this._dailyTaskApi.ShareVideo(aid, this._biliBiliCookieOptions.BiliJct).Result; if (apiResponse.Code == 0) { - _logger.LogInformation("视频分享成功"); + this._logger.LogInformation("视频分享成功"); } else { - _logger.LogInformation("视频分享失败,原因: {msg}", apiResponse.Message); - _logger.LogDebug("开发者提示: 如果是csrf校验失败请检查BILI_JCT参数是否正确或者失效"); + this._logger.LogInformation("视频分享失败,原因: {msg}", apiResponse.Message); + this._logger.LogDebug("开发者提示: 如果是csrf校验失败请检查BILI_JCT参数是否正确或者失效"); } } @@ -115,15 +114,15 @@ public void ShareVideo(string aid, string title = "") /// public bool CanDonatedCoinsForVideo(string aid) { - int multiply = _dailyTaskApi.GetDonatedCoinsForVideo(aid).Result.Data.Multiply; + int multiply = this._dailyTaskApi.GetDonatedCoinsForVideo(aid).Result.Data.Multiply; if (multiply < 2) { - _logger.LogDebug("已为Av" + aid + "投过" + multiply + "枚硬币,可以继续投币"); + this._logger.LogDebug("已为Av" + aid + "投过" + multiply + "枚硬币,可以继续投币"); return true; } else { - _logger.LogDebug("已为Av" + aid + " 投过2枚硬币,不能再投币啦"); + this._logger.LogDebug("已为Av" + aid + " 投过2枚硬币,不能再投币啦"); return false; } } @@ -133,24 +132,24 @@ public bool CanDonatedCoinsForVideo(string aid) /// public void AddCoinsForVideo() { - int needCoins = GetNeedDonateCoins(out int alreadyCoins, out int targetCoins); - _logger.LogInformation("今日已投{already}枚硬币,目标是投{target}枚硬币", alreadyCoins, targetCoins); + int needCoins = this.GetNeedDonateCoins(out int alreadyCoins, out int targetCoins); + this._logger.LogInformation("今日已投{already}枚硬币,目标是投{target}枚硬币", alreadyCoins, targetCoins); if (needCoins <= 0) { - _logger.LogInformation("已经完成投币任务,今天不需要再投啦"); + this._logger.LogInformation("已经完成投币任务,今天不需要再投啦"); return; } - _logger.LogInformation("还需再投{need}枚硬币", needCoins); + this._logger.LogInformation("还需再投{need}枚硬币", needCoins); //投币前硬币余额 - var coinBalance = _coinDomainService.GetCoinBalance(); - _logger.LogInformation("投币前余额为 : {coinBalance}", coinBalance); + decimal coinBalance = this._coinDomainService.GetCoinBalance(); + this._logger.LogInformation("投币前余额为 : {coinBalance}", coinBalance); if (coinBalance <= 0) { - _logger.LogInformation("因硬币余额不足,今日暂不执行投币任务"); + this._logger.LogInformation("因硬币余额不足,今日暂不执行投币任务"); return; } @@ -158,7 +157,7 @@ public void AddCoinsForVideo() if (coinBalance < needCoins) { int.TryParse(decimal.Truncate(coinBalance).ToString(), out needCoins); - _logger.LogInformation("因硬币余额不足,目标投币数调整为: {needCoins}", needCoins); + this._logger.LogInformation("因硬币余额不足,目标投币数调整为: {needCoins}", needCoins); } int successCoins = 0; @@ -167,17 +166,17 @@ public void AddCoinsForVideo() { tryCount++; - var video = TryGetCanDonatedVideo(); + Tuple video = this.TryGetCanDonatedVideo(); if (video == null) { if (tryCount <= 10) continue; - _logger.LogInformation("尝试投币次数超过10次,投币任务终止"); + this._logger.LogInformation("尝试投币次数超过10次,投币任务终止"); break; } - _logger.LogDebug("正在为视频“{title}”投币", video.Item2); + this._logger.LogDebug("正在为视频“{title}”投币", video.Item2); - bool isSuccess = AddCoinsForVideo(video.Item1, 1, _dailyTaskOptions.SelectLike, video.Item2); + bool isSuccess = this.AddCoinsForVideo(video.Item1, 1, this._dailyTaskOptions.SelectLike, video.Item2); if (isSuccess) { successCoins++; @@ -185,12 +184,12 @@ public void AddCoinsForVideo() if (tryCount > 10) { - _logger.LogInformation("尝试投币次数超过10次,投币任务终止"); + this._logger.LogInformation("尝试投币次数超过10次,投币任务终止"); break; } } - _logger.LogInformation("投币任务完成,余额为: {money}", _accountApi.GetCoinBalance().Result.Data.Money); + this._logger.LogInformation("投币任务完成,余额为: {money}", this._accountApi.GetCoinBalance().Result.Data.Money); } /// @@ -202,24 +201,23 @@ public void AddCoinsForVideo() /// 是否投币成功 public bool AddCoinsForVideo(string aid, int multiply, bool select_like, string title = "") { - var result = _dailyTaskApi.AddCoinForVideo(aid, multiply, select_like ? 1 : 0, _biliBiliCookieOptions.BiliJct).Result; + BiliApiResponse result = this._dailyTaskApi.AddCoinForVideo(aid, multiply, select_like ? 1 : 0, this._biliBiliCookieOptions.BiliJct).Result; if (result.Code == 0) { - _logger.LogInformation("为“{title}”投币成功", title); + this._logger.LogInformation("为“{title}”投币成功", title); return true; } if (result.Code == -111) { string errorMsg = $"投币异常,Cookie配置项[BiliJct]错误或已过期,请检查并更新。接口返回:{result.Message}"; - _logger.LogError(errorMsg); + this._logger.LogError(errorMsg); throw new Exception(errorMsg); } - else { - _logger.LogInformation("为“{title}”投币失败,原因:{msg}", title, result.Message); + this._logger.LogInformation("为“{title}”投币失败,原因:{msg}", title, result.Message); return false; } } @@ -233,22 +231,22 @@ public Tuple TryGetCanDonatedVideo() Tuple result = null; //如果配置upID,则从up中随机尝试获取10次 - if (_dailyTaskOptions.SupportUpIdList.Count > 0) + if (this._dailyTaskOptions.SupportUpIdList.Count > 0) { - result = TryGetCanDonatedVideoByUp(10); + result = this.TryGetCanDonatedVideoByUp(10); if (result != null) return result; } //然后从特别关注列表尝试获取10次 - result = TryGetCanDonatedVideoBySpecialUps(10); + result = this.TryGetCanDonatedVideoBySpecialUps(10); if (result != null) return result; //然后从普通关注列表获取10次 - result = TryGetCanDonatedVideoByFollowingUps(10); + result = this.TryGetCanDonatedVideoByFollowingUps(10); if (result != null) return result; //最后从排行榜尝试5次 - result = TryGetNotDonatedVideoByRegion(5); + result = this.TryGetNotDonatedVideoByRegion(5); return result; } @@ -261,9 +259,9 @@ public Tuple TryGetCanDonatedVideo() public Tuple TryGetCanDonatedVideoByUp(int tryCount) { //是否配置了up主 - if (_dailyTaskOptions.SupportUpIdList.Count == 0) return null; + if (this._dailyTaskOptions.SupportUpIdList.Count == 0) return null; - return TryGetCanDonateVideoByUps(_dailyTaskOptions.SupportUpIdList, tryCount); ; + return this.TryGetCanDonateVideoByUps(this._dailyTaskOptions.SupportUpIdList, tryCount); ; } /// @@ -277,10 +275,10 @@ public Tuple TryGetCanDonatedVideoBySpecialUps(int tryCount) Dictionary videoCountDic = new Dictionary(); //获取特别关注列表 - var specials = _relationApi.GetSpecialFollowings().Result; + BiliApiResponse> specials = this._relationApi.GetSpecialFollowings().Result; if (specials.Data == null || specials.Data.Count == 0) return null; - return TryGetCanDonateVideoByUps(specials.Data.Select(x => x.Mid).ToList(), tryCount); + return this.TryGetCanDonateVideoByUps(specials.Data.Select(x => x.Mid).ToList(), tryCount); } /// @@ -294,10 +292,10 @@ public Tuple TryGetCanDonatedVideoByFollowingUps(int tryCount) Dictionary videoCountDic = new Dictionary(); //获取特别关注列表 - var result = _relationApi.GetFollowings(_biliBiliCookieOptions.UserId).Result; + BiliApiResponse result = this._relationApi.GetFollowings(this._biliBiliCookieOptions.UserId).Result; if (result.Data.Total == 0) return null; - return TryGetCanDonateVideoByUps(result.Data.List.Select(x => x.Mid).ToList(), tryCount); + return this.TryGetCanDonateVideoByUps(result.Data.List.Select(x => x.Mid).ToList(), tryCount); } /// @@ -315,19 +313,19 @@ private Tuple TryGetCanDonateVideoByUps(List upIds, int tr if (upIds == null || upIds.Count == 0) return null; //尝试tryCount次 - for (int i = 0; i < tryCount; i++) + for (int i = 0 ; i < tryCount ; i++) { //获取随机Up主Id long randomUpId = upIds[new Random().Next(0, upIds.Count)]; if (!videoCountDic.TryGetValue(randomUpId, out int videoCount)) { - videoCount = GetVidoeCountOfUp(randomUpId); + videoCount = this.GetVidoeCountOfUp(randomUpId); videoCountDic.Add(randomUpId, videoCount); } if (videoCount == 0) continue; - UpVideoInfo videoInfo = GetRandomVideoOfUp(randomUpId, videoCount); - if (!CanDonatedCoinsForVideo(videoInfo.Aid.ToString())) continue; + UpVideoInfo videoInfo = this.GetRandomVideoOfUp(randomUpId, videoCount); + if (!this.CanDonatedCoinsForVideo(videoInfo.Aid.ToString())) continue; return Tuple.Create(videoInfo.Aid.ToString(), videoInfo.Title); } @@ -343,10 +341,10 @@ public Tuple TryGetNotDonatedVideoByRegion(int tryCount) { if (tryCount <= 0) return null; - for (int i = 0; i < tryCount; i++) + for (int i = 0 ; i < tryCount ; i++) { - var video = RegionRanking(); - if (!CanDonatedCoinsForVideo(video.Item1)) continue; + Tuple video = this.RegionRanking(); + if (!this.CanDonatedCoinsForVideo(video.Item1)) continue; return video; } @@ -355,19 +353,19 @@ public Tuple TryGetNotDonatedVideoByRegion(int tryCount) public List GetRandomVideosOfUps() { - var re = new List(); + List re = new List(); - int configUpsCount = _dailyTaskOptions.SupportUpIdList.Count; + int configUpsCount = this._dailyTaskOptions.SupportUpIdList.Count; if (configUpsCount == 0) return re; - long upId = _dailyTaskOptions.SupportUpIdList[new Random().Next(0, configUpsCount)]; - int count = GetVidoeCountOfUp(upId); + long upId = this._dailyTaskOptions.SupportUpIdList[new Random().Next(0, configUpsCount)]; + int count = this.GetVidoeCountOfUp(upId); - var targetNum = 10; + int targetNum = 10; if (count < 10) targetNum = count; - for (int i = 0; i < targetNum; i++) + for (int i = 0 ; i < targetNum ; i++) { - UpVideoInfo videoInfo = GetRandomVideoOfUp(upId, count); + UpVideoInfo videoInfo = this.GetRandomVideoOfUp(upId, count); if (re.Count(x => x.Aid == videoInfo.Aid) == 0) re.Add(videoInfo); } @@ -376,8 +374,8 @@ public List GetRandomVideosOfUps() private UpVideoInfo GetRandomVideoOfUp(long upId, int total) { - var pageNum = new Random().Next(1, total + 1); - BiliApiResponse re = _dailyTaskApi.SearchVideosByUpId(upId, 1, pageNum).Result; + int pageNum = new Random().Next(1, total + 1); + BiliApiResponse re = this._dailyTaskApi.SearchVideosByUpId(upId, 1, pageNum).Result; if (re.Code != 0) { @@ -394,7 +392,7 @@ private UpVideoInfo GetRandomVideoOfUp(long upId, int total) /// private int GetVidoeCountOfUp(long upId) { - BiliApiResponse re = _dailyTaskApi.SearchVideosByUpId(upId, 1, 1).Result; + BiliApiResponse re = this._dailyTaskApi.SearchVideosByUpId(upId, 1, 1).Result; if (re.Code != 0) { throw new Exception(re.Message); @@ -403,7 +401,6 @@ private int GetVidoeCountOfUp(long upId) return re.Data.Page.Count; } - #region private /// @@ -417,10 +414,10 @@ private Tuple RegionRanking() int[] arr = { 1, 3, 4, 5, 160, 22, 119 }; int rid = arr[new Random().Next(arr.Length - 1)]; - var apiResponse = _dailyTaskApi.GetRegionRankingVideos(rid, 3).Result; + BiliApiResponse> apiResponse = this._dailyTaskApi.GetRegionRankingVideos(rid, 3).Result; //_logger.LogInformation("获取分区:{rid}的{day}日top10榜单成功", rid, day); - var data = apiResponse.Data[new Random().Next(apiResponse.Data.Count)]; + RankingInfo data = apiResponse.Data[new Random().Next(apiResponse.Data.Count)]; return Tuple.Create(data.Aid, data.Title); } @@ -436,9 +433,9 @@ private int GetNeedDonateCoins(out int alreadyCoins, out int targetCoins) int needCoins = 0; //获取自定义配置投币数 - int configCoins = _dailyTaskOptions.NumberOfCoins; + int configCoins = this._dailyTaskOptions.NumberOfCoins; //已投的硬币 - alreadyCoins = _coinDomainService.GetDonatedCoins(); + alreadyCoins = this._coinDomainService.GetDonatedCoins(); //目标 targetCoins = configCoins > Constants.MaxNumberOfDonateCoins ? Constants.MaxNumberOfDonateCoins @@ -453,12 +450,13 @@ private int GetNeedDonateCoins(out int alreadyCoins, out int targetCoins) private Tuple GetRandomVideoForWatch() { - List list = GetRandomVideosOfUps(); + List list = this.GetRandomVideosOfUps(); if (list.Count > 0) return Tuple.Create(list.First().Aid.ToString(), list.First().Title); - return RegionRanking(); + return this.RegionRanking(); } - #endregion + + #endregion private } } diff --git a/src/Ray.BiliBiliTool.Infrastructure/Extensions/DateTimeExtension.cs b/src/Ray.BiliBiliTool.Util/Extensions/DateTimeExtension.cs similarity index 85% rename from src/Ray.BiliBiliTool.Infrastructure/Extensions/DateTimeExtension.cs rename to src/Ray.BiliBiliTool.Util/Extensions/DateTimeExtension.cs index 8e99f9b..1a6f84b 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Extensions/DateTimeExtension.cs +++ b/src/Ray.BiliBiliTool.Util/Extensions/DateTimeExtension.cs @@ -1,6 +1,4 @@ -using System; - -namespace Ray.BiliBiliTool.Infrastructure.Extensions +namespace System { public static class DateTimeExtension { diff --git a/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs b/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs new file mode 100644 index 0000000..fa9b716 --- /dev/null +++ b/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace System +{ + public static class ObjectExtensions + { + public static string ToJson(this T obj, JsonSerializerSettings settings = null) + { + if (settings == null) + { + return JsonConvert.SerializeObject(obj); + } + else + { + return JsonConvert.SerializeObject(obj, settings); + } + } + } +} diff --git a/src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs b/src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs new file mode 100644 index 0000000..95b88f5 --- /dev/null +++ b/src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace System +{ + public static class StringExtensions + { + public static T ToObject(this string str, JsonSerializerSettings settings = null) + { + if (settings == null) + { + return JsonConvert.DeserializeObject(str); + } + else + { + return JsonConvert.DeserializeObject(str, settings); + } + } + } +} diff --git a/src/Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtension.cs b/src/Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs similarity index 73% rename from src/Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtension.cs rename to src/Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs index 1e1fc00..53dba12 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtension.cs +++ b/src/Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs @@ -1,13 +1,9 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; +using System.ComponentModel; using System.Linq; -using System.Reflection; -using System.Text; -namespace Ray.BiliBiliTool.Infrastructure.Extensions +namespace System { - public static class ObjectExtension + public static class TypeExtensions { /// /// 获取属性的Description diff --git a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj new file mode 100644 index 0000000..d1f91bb --- /dev/null +++ b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj @@ -0,0 +1,10 @@ + + + + netstandard2.0 + + + + + + \ No newline at end of file diff --git a/test/ConfigTest/ConfigTest.csproj b/test/ConfigTest/ConfigTest.csproj index 82b1892..0516ab2 100644 --- a/test/ConfigTest/ConfigTest.csproj +++ b/test/ConfigTest/ConfigTest.csproj @@ -2,12 +2,11 @@ net5.0 - false - + all @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/test/DailyTaskTest/DailyTaskTest.csproj b/test/DailyTaskTest/DailyTaskTest.csproj index 010b45d..f0d7307 100644 --- a/test/DailyTaskTest/DailyTaskTest.csproj +++ b/test/DailyTaskTest/DailyTaskTest.csproj @@ -7,7 +7,7 @@ - + all diff --git a/test/DeserializeTest/DeserializeTest.csproj b/test/DeserializeTest/DeserializeTest.csproj index 23c1b9c..6971367 100644 --- a/test/DeserializeTest/DeserializeTest.csproj +++ b/test/DeserializeTest/DeserializeTest.csproj @@ -7,7 +7,7 @@ - + all diff --git a/test/GetLastDayOfMonthTest/GetLastDayOfMonthTest.csproj b/test/GetLastDayOfMonthTest/GetLastDayOfMonthTest.csproj index 82b1892..d1e0f2e 100644 --- a/test/GetLastDayOfMonthTest/GetLastDayOfMonthTest.csproj +++ b/test/GetLastDayOfMonthTest/GetLastDayOfMonthTest.csproj @@ -7,7 +7,7 @@ - + all diff --git a/test/LogTest/LogTest.csproj b/test/LogTest/LogTest.csproj index 82b1892..d1e0f2e 100644 --- a/test/LogTest/LogTest.csproj +++ b/test/LogTest/LogTest.csproj @@ -7,7 +7,7 @@ - + all diff --git a/test/PushTest/PushTest.csproj b/test/PushTest/PushTest.csproj index 82b1892..0516ab2 100644 --- a/test/PushTest/PushTest.csproj +++ b/test/PushTest/PushTest.csproj @@ -2,12 +2,11 @@ net5.0 - false - + all @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/test/GetLastDayOfMonthTest/UnitTest1.cs b/test/UtilTest/UnitTest1.cs similarity index 76% rename from test/GetLastDayOfMonthTest/UnitTest1.cs rename to test/UtilTest/UnitTest1.cs index 191fa52..05e92ed 100644 --- a/test/GetLastDayOfMonthTest/UnitTest1.cs +++ b/test/UtilTest/UnitTest1.cs @@ -1,7 +1,6 @@ using System; using System.Diagnostics; using Ray.BiliBiliTool.Console; -using Ray.BiliBiliTool.Infrastructure.Extensions; using Xunit; namespace GetLastDayOfMonthTest @@ -13,7 +12,7 @@ public void Test1() { Program.PreWorks(new string[] { }); - var dateTime = DateTime.Now.LastDayOfMonth(); + DateTime dateTime = DateTime.Now.LastDayOfMonth(); Debug.WriteLine(dateTime); Assert.True(true); diff --git a/test/UtilTest/UtilTest.csproj b/test/UtilTest/UtilTest.csproj new file mode 100644 index 0000000..a9a8296 --- /dev/null +++ b/test/UtilTest/UtilTest.csproj @@ -0,0 +1,24 @@ + + + + net5.0 + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + \ No newline at end of file From 09a72c916e38f62c802f16dfeefe29bf86207397 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 14:04:56 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=86=99=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E5=87=8F=E5=B0=91=E8=AF=BB=E5=8F=96next=5Fexp?= =?UTF-8?q?=E7=9A=84=E5=BC=BA=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiliBiliAgent/Dtos/UseInfo.cs | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs index c75fdd8..b36ce5a 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs @@ -7,8 +7,14 @@ namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos /// public class UseInfo { + /// + /// 是否登录 + /// public bool IsLogin { get; set; } + /// + /// 等级信息 + /// public LevelInfo Level_info { get; set; } public decimal? Money { get; set; } @@ -17,6 +23,10 @@ public class UseInfo public Wallet Wallet { get; set; } + /// + /// 会员状态 + /// 只有VipStatus为1的时候获取到VipType才是有效的 + /// public int VipStatus { get; set; } public int VipType { get; set; }//todo:是否可以改为枚举 @@ -28,11 +38,12 @@ public class UseInfo public string GetFuzzyUname() { StringBuilder sb = new StringBuilder(); - int s1 = Uname.Length / 2, s2 = (s1 + 1) / 2; - for (int i = 0; i < Uname.Length; i++) + int s1 = this.Uname.Length / 2; + int s2 = (s1 + 1) / 2; + for (int i = 0 ; i < this.Uname.Length ; i++) { if (i >= s2 && i < s1 + s2) sb.Append("*"); - else sb.Append(Uname[i]); + else sb.Append(this.Uname[i]); } return sb.ToString(); @@ -41,9 +52,11 @@ public string GetFuzzyUname() /// /// 返回会员类型 /// - /// 0:无会员(会员过期、当前不是会员); - /// 1:月会员 - /// 2:年会员 + /// + /// 0:无会员(会员过期、当前不是会员) + /// 1:月会员 + /// 2:年会员 + /// public int GetVipType() { if (this.VipStatus == 1) @@ -63,6 +76,9 @@ public int GetVipType() /// public class LevelInfo { + /// + /// 当前等级 + /// public int Current_level { get; set; } //public long Current_min { get; set; } @@ -72,21 +88,30 @@ public class LevelInfo /// public long Current_exp { get; set; } - private string _next_exp; + private long _next_exp; + /// - /// 下一升级经验值(因为Lv6的大佬会返回字符串“--”,所以这里只能用string接收) + /// 下一升级经验值(因为Lv6的带佬会返回字符串“--”,所以这里只能用string接收) /// public object Next_exp { - get { return _next_exp; } - set { _next_exp = value.ToString(); } + get { return this._next_exp; } + set + { + bool isLong = long.TryParse(this.Next_exp.ToString(), out long exp); + if (isLong) { this._next_exp = exp; } + else this._next_exp = long.MinValue; + } } + /// + /// 获取下一升级经验值 + /// + /// public long GetNext_expLong() { - if (Current_level == 6) return long.MaxValue; - if (long.TryParse(Next_exp.ToString(), out long result)) return result; - return long.MinValue; + if (this.Current_level == 6) return long.MaxValue; + else return this._next_exp; } } From 3f674ebe6f6406d7cd8a7225707f1ef00e492d28 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 14:05:15 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E6=8C=89=E9=A2=86=E5=8F=96=E5=88=86?= =?UTF-8?q?=E7=A6=BB=E4=B8=80=E9=83=A8=E5=88=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiliBiliAgent/Interfaces/IDailyTaskApi.cs | 75 +------------------ .../BiliBiliAgent/Interfaces/IUserInfoApi.cs | 43 +++++++++++ .../Interfaces/IUserOperationApi.cs | 68 +++++++++++++++++ 3 files changed, 112 insertions(+), 74 deletions(-) create mode 100644 src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs create mode 100644 src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs index 0e6db33..a09c9f6 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs @@ -8,24 +8,10 @@ namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces /// /// BiliBili每日任务相关接口 /// - public interface IDailyTaskApi : IBiliBiliApi + public interface IDailyTaskApi : IBiliBiliApi, IUserInfoApi, IUserOperationApi { //todo:考虑根据领域拆分该接口 - /// - /// 登录 - /// - /// - [Get("/x/web-interface/nav")] - Task> LoginByCookie(); - - /// - /// 获取每日任务的完成情况 - /// - /// - [Get("/x/member/web/exp/reward")] - Task> GetDailyTaskRewardInfo(); - /// /// 获取某分区下X日内排行榜 /// @@ -35,58 +21,6 @@ public interface IDailyTaskApi : IBiliBiliApi [Get("/x/web-interface/ranking/region?rid={rid}&day={day}")] Task>> GetRegionRankingVideos(int rid, int day); - /// - /// 上传视频观看进度 - /// - /// - [Post("/x/click-interface/web/heartbeat?aid={aid}&played_time={playedTime}")] - Task UploadVideoHeartbeat(string aid, int playedTime); - - /// - /// 分享视频 - /// - /// - /// - /// - [Post("/x/web-interface/share/add?aid={aid}&csrf={csrf}")] - Task ShareVideo(string aid, string csrf); - - /// - /// 分享视频 - /// - /// - /// - [Get("/x/web-interface/archive/coins?aid={aid}")] - Task> GetDonatedCoinsForVideo(string aid); - - [Post("/x/web-interface/coin/add?aid={aid}&multiply={multiply}&select_like={select_like}&cross_domain=true&csrf={csrf}")] - Task AddCoinForVideo(string aid, int multiply, int select_like, string csrf); - - [Post("/x/vip/privilege/receive?type={type}&csrf={csrf}")] - Task ReceiveVipPrivilege(int type, string csrf); - - /// - /// 充电 - /// - /// - /// - /// - /// - /// - [Post("/x/ugcpay/trade/elec/pay/quick?elec_num={elec_num}&up_mid={up_mid}&otype=up&oid={oid}&csrf={csrf}")] - Task> Charge(decimal elec_num, string up_mid, string oid, string csrf); - - /// - /// 充电 - /// - /// - /// - /// - /// - /// - [Post("/x/ugcpay/trade/elec/message?order_id={order_id}&message={message}&csrf={csrf}")] - Task> ChargeComment(string order_id, string message, string csrf); - /// /// 获取指定Up的视频 /// @@ -106,12 +40,5 @@ public interface IDailyTaskApi : IBiliBiliApi /// [Get("/x/space/arc/search?mid={upId}&ps={pageSize}&tid=0&pn={pageNumber}&keyword={keyword}&order=pubdate&jsonp=jsonp")] Task> SearchVideosByUpId(long upId, int pageSize = 20, int pageNumber = 1, string keyword = ""); - - /// - /// 获取通过投币已获取的经验值 - /// - /// - [Get("/x/web-interface/coin/today/exp")] - Task> GetDonateCoinExp(); } } diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs new file mode 100644 index 0000000..37bebcf --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs @@ -0,0 +1,43 @@ +using System.Threading.Tasks; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; +using Refit; + +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces +{ + /// + /// 用户信息接口API + /// + public interface IUserInfoApi + { + /// + /// 获取每日任务的完成情况 + /// + /// + [Get("/x/member/web/exp/reward")] + Task> GetDailyTaskRewardInfo(); + + /// + /// 获取通过投币已获取的经验值 + /// + /// + [Get("/x/web-interface/coin/today/exp")] + Task> GetDonateCoinExp(); + + /// + /// 获取VIP特权 + /// + /// + /// + /// + [Post("/x/vip/privilege/receive?type={type}&csrf={csrf}")] + Task ReceiveVipPrivilege(int type, string csrf); + + /// + /// 获取当前用户对视频的投币信息 + /// + /// + /// + [Get("/x/web-interface/archive/coins?aid={aid}")] + Task> GetDonatedCoinsForVideo(string aid); + } +} diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs new file mode 100644 index 0000000..fd0ee12 --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs @@ -0,0 +1,68 @@ +using System.Threading.Tasks; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; +using Refit; + +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces +{ + /// + /// 用户操作API + /// + public interface IUserOperationApi + { + /// + /// 登录 + /// + /// + [Get("/x/web-interface/nav")] + Task> LoginByCookie(); + + /// + /// 分享视频 + /// + /// + /// + /// + [Post("/x/web-interface/share/add?aid={aid}&csrf={csrf}")] + Task ShareVideo(string aid, string csrf); + + /// + /// 上传视频观看进度 + /// + /// + [Post("/x/click-interface/web/heartbeat?aid={aid}&played_time={playedTime}")] + Task UploadVideoHeartbeat(string aid, int playedTime); + + /// + /// 充电 + /// + /// + /// + /// + /// + /// + [Post("/x/ugcpay/trade/elec/pay/quick?elec_num={elec_num}&up_mid={up_mid}&otype=up&oid={oid}&csrf={csrf}")] + Task> Charge(decimal elec_num, string up_mid, string oid, string csrf); + + /// + /// 充电后留言 + /// + /// + /// + /// + /// + /// + [Post("/x/ugcpay/trade/elec/message?order_id={order_id}&message={message}&csrf={csrf}")] + Task> ChargeComment(string order_id, string message, string csrf); + + /// + /// 为视频投币 + /// + /// + /// + /// + /// + /// + [Post("/x/web-interface/coin/add?aid={aid}&multiply={multiply}&select_like={select_like}&cross_domain=true&csrf={csrf}")] + Task AddCoinForVideo(string aid, int multiply, int select_like, string csrf); + } +} From c058999a530798299a782d85ce4cc3feab0ea15c Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 14:05:33 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=88=B0=E5=B7=A5=E5=85=B7=E7=B1=BB=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Options/BiliBiliCookieOptions.cs | 34 ++- .../JsonSerializerOptionsBuilder.cs | 62 +++-- .../JsonSerializerOptionsBuilderExtesions.cs | 86 +++++++ .../Ray.BiliBiliTool.Infrastructure.csproj | 6 +- .../Extensions/IDictionaryExtensions.cs | 0 .../Extensions/KeyValuePairExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 219 +++++++++++++++++- .../Ray.BiliBiliTool.Util.csproj | 2 +- 8 files changed, 372 insertions(+), 37 deletions(-) create mode 100644 src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs rename src/{Ray.BiliBiliTool.Config => Ray.BiliBiliTool.Util}/Extensions/IDictionaryExtensions.cs (100%) rename src/{Ray.BiliBiliTool.Config => Ray.BiliBiliTool.Util}/Extensions/KeyValuePairExtensions.cs (100%) diff --git a/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs b/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs index 2d36f43..03bd815 100644 --- a/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs +++ b/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs @@ -2,7 +2,6 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Ray.BiliBiliTool.Infrastructure; -using Ray.BiliBiliTool.Infrastructure.Extensions; namespace Ray.BiliBiliTool.Config.Options { @@ -21,10 +20,10 @@ public class BiliBiliCookieOptions public string UserId { get => - !string.IsNullOrWhiteSpace(_userId) - ? _userId + !string.IsNullOrWhiteSpace(this._userId) + ? this._userId : RayConfiguration.Root["BiliBiliCookie:DedeUserID"];//为了兼容 GitHub Secrets 经常会被填错 - set => _userId = value; + set => this._userId = value; } /// @@ -40,10 +39,10 @@ public string UserId public string BiliJct { get => - !string.IsNullOrWhiteSpace(_biliJct) - ? _biliJct + !string.IsNullOrWhiteSpace(this._biliJct) + ? this._biliJct : RayConfiguration.Root["BiliBiliCookie:Bili_jct"];//为了兼容 GitHub Secrets 经常会被填错 - set => _biliJct = value; + set => this._biliJct = value; } /// @@ -58,15 +57,15 @@ public bool Check(ILogger logger) string tips = "检测到已配置了[{0}],已兼容使用[{1}]"; //UserId为空,抛异常 - if (string.IsNullOrWhiteSpace(UserId)) + if (string.IsNullOrWhiteSpace(this.UserId)) { - logger.LogWarning(msg, nameof(UserId), GetPropertyDescription(nameof(UserId))); + logger.LogWarning(msg, nameof(this.UserId), this.GetPropertyDescription(nameof(this.UserId))); result = false; } - else if (!long.TryParse(UserId, out long uid))//不为空,但不能转换为long,警告 + else if (!long.TryParse(this.UserId, out long uid))//不为空,但不能转换为long,警告 { - logger.LogWarning("UserId:{uid} 不能转换为long型,请确认配置的是正确的Cookie值", UserId); + logger.LogWarning("UserId:{uid} 不能转换为long型,请确认配置的是正确的Cookie值", this.UserId); } //UserId为空,但DedeUserID有值,兼容使用 if (string.IsNullOrWhiteSpace(RayConfiguration.Root["BiliBiliCookie:UserID"]) @@ -76,16 +75,16 @@ public bool Check(ILogger logger) } //SessData为空,抛异常 - if (string.IsNullOrWhiteSpace(SessData)) + if (string.IsNullOrWhiteSpace(this.SessData)) { - logger.LogWarning(msg, nameof(SessData), GetPropertyDescription(nameof(SessData))); + logger.LogWarning(msg, nameof(this.SessData), this.GetPropertyDescription(nameof(this.SessData))); result = false; } //BiliJct为空,抛异常 - if (string.IsNullOrWhiteSpace(BiliJct)) + if (string.IsNullOrWhiteSpace(this.BiliJct)) { - logger.LogWarning(msg, nameof(BiliJct), GetPropertyDescription(nameof(BiliJct))); + logger.LogWarning(msg, nameof(this.BiliJct), this.GetPropertyDescription(nameof(this.BiliJct))); result = false; } //BiliJct为空,但Bili_jct有值,兼容使用 @@ -98,15 +97,14 @@ public bool Check(ILogger logger) return result; } - public override string ToString() { - return $"{GetPropertyDescription(nameof(UserId))}={UserId}; {GetPropertyDescription(nameof(SessData))}={SessData}; {GetPropertyDescription(nameof(BiliJct))}={BiliJct};"; + return $"{this.GetPropertyDescription(nameof(this.UserId))}={this.UserId}; {this.GetPropertyDescription(nameof(this.SessData))}={this.SessData}; {this.GetPropertyDescription(nameof(this.BiliJct))}={this.BiliJct};"; } private string GetPropertyDescription(string propertyName) { - return GetType().GetPropertyDescription(propertyName); + return this.GetType().GetPropertyDescription(propertyName); } } } diff --git a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs index 8356092..9cdcdb8 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs +++ b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Unicode; @@ -7,22 +9,12 @@ namespace Ray.BiliBiliTool.Infrastructure /// /// System.Text.Json的序列化OptionsBuilder /// - public class JsonSerializerOptionsBuilder + public sealed class JsonSerializerOptionsBuilder { static JsonSerializerOptionsBuilder() { - /* - * 全局设置默认的序列化配置:驼峰式、支持中文 - * 目前System.Text.Json不支持设置默认Options,这里用反射实现了,以后.net5中可能会新增默认options的接口 - * 详情可参考issue: https://github.com/dotnet/runtime/issues/31094 - */ - JsonSerializerOptions defaultJsonSerializerOptions = (JsonSerializerOptions)typeof(JsonSerializerOptions) - .GetField("s_defaultOptions", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) - .GetValue(null); - defaultJsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; - defaultJsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All); - - DefaultOptions = defaultJsonSerializerOptions; + DefaultOptions = JsonSerializerOptionsBuilder.Create() + .GetOrBuildDefaultOptions(); } /// @@ -30,11 +22,49 @@ static JsonSerializerOptionsBuilder() /// public static JsonSerializerOptions DefaultOptions; - public static JsonSerializerOptions Builder(Action build) + public List> buildActionList; + + private JsonSerializerOptionsBuilder() + { + this.buildActionList = new List>(); + } + + public static JsonSerializerOptionsBuilder Create() + { + return new JsonSerializerOptionsBuilder(); + } + + public JsonSerializerOptions Build() { - JsonSerializerOptions options = new JsonSerializerOptions(); - build(options); + JsonSerializerOptions options = new();//这里没有使用 JsonSerializerDefaults.General 避免后续版本更新后设置改变 + + foreach (Action item in this.buildActionList) + { + item?.Invoke(options); + } + return options; } + + //适合net5.0以下的情况 + private static JsonSerializerOptions GetJsonOptionsByReflection() + { + /* + * 全局设置默认的序列化配置:驼峰式、支持中文 + * 目前System.Text.Json不支持设置默认Options,这里用反射实现了,以后.net5中可能会新增默认options的接口 + * 详情可参考issue: https://github.com/dotnet/runtime/issues/31094 + */ + + JsonSerializerOptions jsonSerializerOptions = (JsonSerializerOptions)typeof(JsonSerializerOptions) + .GetField( + "s_defaultOptions", + System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) + .GetValue(null); + + jsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + jsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); + + return jsonSerializerOptions; + } } } diff --git a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs new file mode 100644 index 0000000..4dac523 --- /dev/null +++ b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs @@ -0,0 +1,86 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Text.Encodings.Web; +using System.Text.Json; +using System.Text.Unicode; + +namespace Ray.BiliBiliTool.Infrastructure +{ + public static class JsonSerializerOptionsBuilderExtesions + { + private static JsonSerializerOptionsBuilder SetActionBase( + [NotNull] JsonSerializerOptionsBuilder builder, + [NotNull] Action action) + { + builder.CheckNullWithException(nameof(builder)); + action.CheckNullWithException(nameof(action)); + builder.buildActionList.Add(action); + return builder; + } + + #region 设置区 + + public static JsonSerializerOptionsBuilder SetEncoder( + this JsonSerializerOptionsBuilder builder, + [NotNull] JavaScriptEncoder encoder) + { + encoder.CheckNullWithException(nameof(encoder)); + return SetActionBase( + builder, + t => t.Encoder = encoder); + } + + public static JsonSerializerOptionsBuilder SetCamelCase(this JsonSerializerOptionsBuilder builder) + { + return SetActionBase( + builder, + t => t.PropertyNamingPolicy = JsonNamingPolicy.CamelCase); + } + + public static JsonSerializerOptionsBuilder SetEncoderToUnicodeRangeAll(this JsonSerializerOptionsBuilder builder) + { + return SetActionBase( + builder, + t => t.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)); + } + + public static JsonSerializerOptionsBuilder Configure( + this JsonSerializerOptionsBuilder builder, + [NotNull] Action action) + { + return SetActionBase(builder, action); + } + + #endregion 设置区 + + private static JsonSerializerOptions DefaultOptions; + + public static JsonSerializerOptions BuildAndSaveToDefault( + this JsonSerializerOptionsBuilder builder) + { + JsonSerializerOptions option = builder.Build(); + JsonSerializerOptionsBuilderExtesions.DefaultOptions = option; + return option; + } + + public static JsonSerializerOptions GetDefaultOptions(this JsonSerializerOptionsBuilder builder) + { + return JsonSerializerOptionsBuilderExtesions.DefaultOptions; + } + + public static JsonSerializerOptions GetOrBuildDefaultOptions(this JsonSerializerOptionsBuilder builder) + { + if (JsonSerializerOptionsBuilderExtesions.DefaultOptions.IsNull()) + { + return builder + .SetCamelCase() + .SetEncoderToUnicodeRangeAll() + .BuildAndSaveToDefault(); + } + else + { + return JsonSerializerOptionsBuilderExtesions.DefaultOptions; + } + } + } +} diff --git a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj index d36e7ee..a0a34e8 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj +++ b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj @@ -2,6 +2,7 @@ net5.0 + @@ -9,4 +10,7 @@ - + + + + \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Config/Extensions/IDictionaryExtensions.cs b/src/Ray.BiliBiliTool.Util/Extensions/IDictionaryExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Config/Extensions/IDictionaryExtensions.cs rename to src/Ray.BiliBiliTool.Util/Extensions/IDictionaryExtensions.cs diff --git a/src/Ray.BiliBiliTool.Config/Extensions/KeyValuePairExtensions.cs b/src/Ray.BiliBiliTool.Util/Extensions/KeyValuePairExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Config/Extensions/KeyValuePairExtensions.cs rename to src/Ray.BiliBiliTool.Util/Extensions/KeyValuePairExtensions.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs b/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs index fa9b716..ab0e8f3 100644 --- a/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs +++ b/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs @@ -1,4 +1,6 @@ -using Newtonsoft.Json; +using System.Collections; +using System.Collections.Generic; +using Newtonsoft.Json; namespace System { @@ -15,5 +17,220 @@ public static string ToJson(this T obj, JsonSerializerSettings settings = nul return JsonConvert.SerializeObject(obj, settings); } } + + #region CheckNull + + /// + /// 检查参数是否为null,为null时抛出异常 + /// + /// + /// 要检查的对象 + /// 抛出异常时,显示的参数名 + /// 为null时抛出 + public static void CheckNullWithException(this T obj, string paramName) + where T : class + { + if (obj == null) throw new ArgumentNullException(paramName); + } + + /// + /// 检查参数是否为null,为null时抛出异常 + /// + /// + /// 要检查的对象 + /// 抛出异常时,显示的参数名 + /// 抛出异常时,显示的错误信息 + /// 为null时抛出 + public static void CheckNullWithException(this T obj, string paramName, string message) + where T : class + { + if (obj == null) throw new ArgumentNullException(paramName, message); + } + + /// + /// 检查参数是否为null或emtpy,为null或emtpy时抛出异常 + /// + /// 要检查的对象 + /// 抛出异常时,显示的参数名 + /// 为null或emtpy时抛出 + public static void CheckNullOrEmptyWithException(this IEnumerable obj, string paramName) + { + if (obj.IsNullOrEmpty()) throw new ArgumentNullException(paramName); + } + + /// + /// 检查参数是否为null或emtpy,为null或emtpy时抛出异常 + /// + /// 要检查的对象 + /// 抛出异常时,显示的参数名 + /// 抛出异常时,显示的错误信息 + /// 为null或emtpy时抛出 + public static void CheckNullOrEmptyWithException(this IEnumerable obj, string paramName, string message) + { + if (obj.IsNullOrEmpty()) throw new ArgumentNullException(paramName, message); + } + + #endregion CheckNull + + #region IsNull and IsNullOrEmpty + + /// + /// 判断null,null或0长度都返回true + /// + /// 对象类型 + /// 要判断的对象 + /// 判断结果,null或0长度返回true,否则返回false + public static bool IsNullOrEmpty(this T value) + where T : class + { + #region 1.对象级别 + + //引用为null + bool isObjectNull = value == null; + if (isObjectNull == true) return true; + + //判断是否为集合 + IEnumerator tempEnumerator = (value as IEnumerable)?.GetEnumerator(); + if (tempEnumerator == null) return false;//这里出去代表是对象 且 引用不为null.所以为false + + #endregion 1.对象级别 + + #region 2.集合级别 + + //到这里就代表是集合且引用不为空,判断长度 + //MoveNext方法返回tue代表集合中至少有一个数据,返回false就代表0长度 + bool isZeroLenth = tempEnumerator.MoveNext() == false; + if (isZeroLenth == true) return true; + + return isZeroLenth; + + #endregion 2.集合级别 + } + + /// + /// 判断null + /// + /// 要判断的对象 + /// 判断结果,null返回true,否则返回false + public static bool IsNull(this object value) + { + return value == null; + } + + /// + /// 判断null,空数组 + /// + /// 对象类型 + /// 要判断的数组 + /// 判断结果,null或空数组返回true,否则返回false + public static bool IsNullOrEmpty(this T[] value) + { + return value == null || value.Length == 0; + } + + /// + /// 判断null,空集合 + /// + /// 对象类型 + /// 要判断的集合 + /// 判断结果,null或空集合返回true,否则返回false + public static bool IsNullOrEmpty(this IList value) + { + return value == null || value.Count == 0; + } + + /// + /// 判断null,空字典 + /// + /// 对象类型 + /// 要判断的字典 + /// 判断结果,null或空字典返回true,否则返回false + public static bool IsNullOrEmpty(this IDictionary value) + { + return value == null || value.Keys.Count == 0; + } + + /// + /// 判断null,空枚举器 + /// + /// 要判断的字典 + /// 判断结果,null或空枚举器返回true,否则返回false + public static bool IsNullOrEmpty(this IEnumerable value) + { + return value == null + || !value.GetEnumerator().MoveNext(); + } + + #endregion IsNull and IsNullOrEmpty + + #region IsNotNull and IsNotNullOrEmpty + + /// + /// 判断非null,非0长度 + /// + /// 对象类型 + /// 要判断的对象 + /// 判断结果,非null,非0长度返回true,否则返回false + /// + public static bool IsNotNullOrEmpty(this T value) + where T : class + { + //IsNullOrEmpty取反 + return !value.IsNullOrEmpty(); + } + + /// + /// 判断非null + /// + /// 要判断的对象 + /// 判断结果,非null返回true,否则返回false + public static bool IsNotNull(this object value) + { + return !value.IsNull(); + } + + /// + /// 判断非null,非空数组 + /// + /// 对象类型 + /// 要判断的数组 + /// 判断结果,非null和非空数组返回true,否则为false + public static bool IsNotNullOrEmpty(this T[] value) + { + return !value.IsNullOrEmpty(); + } + + /// + /// 判断非null,非空集合 + /// + /// 对象类型 + /// 要判断的集合 + /// 判断结果,非null和非空集合返回true,否则为false + public static bool IsNotNullOrEmpty(this IList value) + { + return !value.IsNullOrEmpty(); + } + + /// + /// 判断非null,非空字典 + /// + /// 要判断的字典 + /// 判断结果,非null和非空字典返回true,否则为false + public static bool IsNotNullOrEmpty(this IDictionary value) + { + return !value.IsNullOrEmpty(); + } + + /// + /// 判断非null,非空枚举器 + /// + /// 要判断的字典 + /// 判断结果,null或空枚举器返回true,否则返回false + public static bool IsNotNullOrEmpty(this IEnumerable value) + { + return !value.IsNullOrEmpty(); + } + + #endregion IsNotNull and IsNotNullOrEmpty } } diff --git a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj index d1f91bb..095e5c2 100644 --- a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj +++ b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + netstandard2.1 From 20a78ebb13d034297335bbc8157e7f5bd81171fd Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 14:43:25 +0800 Subject: [PATCH 06/21] test --- .../BiliBiliAgent/Interfaces/IDailyTaskApi.cs | 11 +++++++++++ .../BiliBiliAgent/Interfaces/IUserOperationApi.cs | 11 ----------- .../VideoDomainService.cs | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs index a09c9f6..55b5a08 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs @@ -40,5 +40,16 @@ public interface IDailyTaskApi : IBiliBiliApi, IUserInfoApi, IUserOperationApi /// [Get("/x/space/arc/search?mid={upId}&ps={pageSize}&tid=0&pn={pageNumber}&keyword={keyword}&order=pubdate&jsonp=jsonp")] Task> SearchVideosByUpId(long upId, int pageSize = 20, int pageNumber = 1, string keyword = ""); + + /// + /// 为视频投币 + /// + /// + /// + /// + /// + /// + [Post("/x/web-interface/coin/add?aid={aid}&multiply={multiply}&select_like={select_like}&cross_domain=true&csrf={csrf}")] + Task AddCoinForVideo(string aid, int multiply, int select_like, string csrf); } } diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs index fd0ee12..4e9e0b1 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs @@ -53,16 +53,5 @@ public interface IUserOperationApi /// [Post("/x/ugcpay/trade/elec/message?order_id={order_id}&message={message}&csrf={csrf}")] Task> ChargeComment(string order_id, string message, string csrf); - - /// - /// 为视频投币 - /// - /// - /// - /// - /// - /// - [Post("/x/web-interface/coin/add?aid={aid}&multiply={multiply}&select_like={select_like}&cross_domain=true&csrf={csrf}")] - Task AddCoinForVideo(string aid, int multiply, int select_like, string csrf); } } diff --git a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs index d59b0a2..3fc5d5e 100644 --- a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs @@ -419,7 +419,7 @@ private Tuple RegionRanking() //_logger.LogInformation("获取分区:{rid}的{day}日top10榜单成功", rid, day); RankingInfo data = apiResponse.Data[new Random().Next(apiResponse.Data.Count)]; - return Tuple.Create(data.Aid, data.Title); + return Tuple.Create(data.Aid, data.Title); } /// From 30b1f555254567d2a265d33391a06caac2a59749 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:01:08 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ray.BiliBiliTool.Console/Program.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Ray.BiliBiliTool.Console/Program.cs b/src/Ray.BiliBiliTool.Console/Program.cs index 2654698..b75ef2c 100644 --- a/src/Ray.BiliBiliTool.Console/Program.cs +++ b/src/Ray.BiliBiliTool.Console/Program.cs @@ -49,9 +49,10 @@ public static void PreWorks(string[] args) //日志: Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(RayConfiguration.Root) - .WriteTo.TextWriter(PushService.PushStringWriter, - LogHelper.GetConsoleLogLevel(), - LogHelper.GetConsoleLogTemplate() + "\r\n")//用来做微信推送 + .WriteTo.TextWriter( + textWriter: PushService.PushStringWriter, + restrictedToMinimumLevel: LogHelper.GetConsoleLogLevel(), + outputTemplate: LogHelper.GetConsoleLogTemplate() + "\r\n")//用来做微信推送 .CreateLogger(); //Host: From f7d4792f718adb0c8fc837d31c53b4186d17bd4a Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:23:52 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E5=90=8E=E7=BB=AD=E4=BC=9A=E6=8E=92?= =?UTF-8?q?=E9=99=A4=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ray.BiliBiliTool.Console/Properties/launchSettings.json | 2 +- src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json b/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json index b0f7f31..782844f 100644 --- a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json +++ b/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "BiliBiliTool": { "commandName": "Project", - "commandLineArgs": "" + "commandLineArgs": " " } } } \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj index 6a90ab0..c9e4cc4 100644 --- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj +++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj @@ -12,6 +12,7 @@ + @@ -50,4 +51,8 @@ + + + + From 3c39d6b7d64ddc55697bf51f1533bce3c208e30b Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:26:11 +0800 Subject: [PATCH 09/21] . --- src/Ray.BiliBiliTool.Console/Properties/launchSettings.json | 4 ++-- src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json b/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json index 782844f..55ab5ef 100644 --- a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json +++ b/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "BiliBiliTool": { "commandName": "Project", - "commandLineArgs": " " + "commandLineArgs": "-closeConsoleWhenEnd=1" } } -} \ No newline at end of file +} diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj index c9e4cc4..6a90ab0 100644 --- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj +++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj @@ -12,7 +12,6 @@ - @@ -51,8 +50,4 @@ - - - - From 0de803550630a389175356cf88b9c44d5b51e05b Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:30:26 +0800 Subject: [PATCH 10/21] . --- .gitignore | 5 ++++- src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 72ae690..80ad371 100644 --- a/.gitignore +++ b/.gitignore @@ -352,5 +352,8 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ + # -.idea/ \ No newline at end of file +.idea/ + +/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj index 6a90ab0..03b12aa 100644 --- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj +++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj @@ -8,6 +8,7 @@ + @@ -49,5 +50,4 @@ - - + \ No newline at end of file From 5a6afc703487cacf2f7fcff6324bd6030b6f94ac Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:30:36 +0800 Subject: [PATCH 11/21] . --- src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj index 03b12aa..0fee3b1 100644 --- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj +++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj @@ -8,7 +8,6 @@ - From dc4575f661d5b8753badabac64d652fe444f5381 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 15:31:37 +0800 Subject: [PATCH 12/21] . --- .../Properties/launchSettings.json | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/Ray.BiliBiliTool.Console/Properties/launchSettings.json diff --git a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json b/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json deleted file mode 100644 index 55ab5ef..0000000 --- a/src/Ray.BiliBiliTool.Console/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "BiliBiliTool": { - "commandName": "Project", - "commandLineArgs": "-closeConsoleWhenEnd=1" - } - } -} From c2be60ea1da6c895b1265345c9b6ca620a7ed84b Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 16:23:01 +0800 Subject: [PATCH 13/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/bilibili-daily-task.yml | 1 + .../Extensions/ServiceCollectionExtension.cs | 35 ++++++++++++------- src/Ray.BiliBiliTool.Config/Constants.cs | 7 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/.github/workflows/bilibili-daily-task.yml b/.github/workflows/bilibili-daily-task.yml index 24cd2d1..9389c8b 100644 --- a/.github/workflows/bilibili-daily-task.yml +++ b/.github/workflows/bilibili-daily-task.yml @@ -65,4 +65,5 @@ jobs: Ray_Serilog:WriteTo:0:Args:restrictedToMinimumLevel: ${{secrets.CONSOLELOGLEVEL}} Ray_Serilog:WriteTo:0:Args:outputTemplate: ${{secrets.CONSOLELOGTEMPLATE}} ASPNETCORE_ENVIRONMENT: ${{secrets.ENV}} # 方便切换不同的appsettings文件 也可以在不同的action yml文件中配置来同时运行多个任务 + Ray_WebProxy: ${{secrets.PROXY}} # 代理 run: dotnet run -p ./src/Ray.BiliBiliTool.Console -closeConsoleWhenEnd=1 ${{secrets.OTHERCONFIGS}} diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs index e5374d6..d84c50a 100644 --- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs @@ -1,11 +1,12 @@ using System; +using System.Net; +using System.Net.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Agent.ServerChanAgent; using Ray.BiliBiliTool.Agent.ServerChanAgent.Interfaces; -using Ray.BiliBiliTool.Config; using Ray.BiliBiliTool.Config.Options; using Ray.BiliBiliTool.Infrastructure; using Refit; @@ -21,15 +22,8 @@ public static class ServiceCollectionExtension /// public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection services) { - services.AddHttpClient(); - services.AddHttpClient("BiliBiliWithCookie", - (sp, c) => - { - c.DefaultRequestHeaders.Add("Cookie", - sp.GetRequiredService>().CurrentValue.ToString()); - c.DefaultRequestHeaders.Add("User-Agent", - sp.GetRequiredService>().CurrentValue.UserAgent); - }); + //全局代理 + services.SetGlobalProxy(); //bilibli services.AddBiliBiliClientApi("https://api.bilibili.com"); @@ -56,9 +50,10 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se /// /// /// - public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection services, string host) where TInterface : class + private static IServiceCollection AddBiliBiliClientApi(this IServiceCollection services, string host) + where TInterface : class { - var settings = new RefitSettings(new SystemTextJsonContentSerializer(JsonSerializerOptionsBuilder.DefaultOptions)); + RefitSettings settings = new RefitSettings(new SystemTextJsonContentSerializer(JsonSerializerOptionsBuilder.DefaultOptions)); services.AddRefitClient(settings) .ConfigureHttpClient((sp, c) => @@ -76,5 +71,21 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceC return services; } + + /// + /// 设置全局代理(如果配置了代理) + /// + /// + /// + private static IServiceCollection SetGlobalProxy(this IServiceCollection services) + { + string proxyAddress = RayConfiguration.Root["WebProxy"]; + if (proxyAddress.IsNotNullOrEmpty()) + { + HttpClient.DefaultProxy = new WebProxy(proxyAddress); + } + + return services; + } } } diff --git a/src/Ray.BiliBiliTool.Config/Constants.cs b/src/Ray.BiliBiliTool.Config/Constants.cs index a29d5bb..3848ee3 100644 --- a/src/Ray.BiliBiliTool.Config/Constants.cs +++ b/src/Ray.BiliBiliTool.Config/Constants.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; namespace Ray.BiliBiliTool.Config { @@ -27,7 +25,8 @@ public static class Constants {"-pushScKey","Push:PushScKey" }, - {"-closeConsoleWhenEnd","CloseConsoleWhenEnd" } + {"-closeConsoleWhenEnd","CloseConsoleWhenEnd" }, + {"-proxy","WebProxy" } }; /// From 70ca615b6198036015f1bbd7a12c048bc69a9dd3 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 16:25:22 +0800 Subject: [PATCH 14/21] =?UTF-8?q?=E6=8F=90PR=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ray.BiliBiliTool.Console/appsettings.PRD.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Ray.BiliBiliTool.Console/appsettings.PRD.json b/src/Ray.BiliBiliTool.Console/appsettings.PRD.json index 85df2cc..27de745 100644 --- a/src/Ray.BiliBiliTool.Console/appsettings.PRD.json +++ b/src/Ray.BiliBiliTool.Console/appsettings.PRD.json @@ -1,10 +1,11 @@ { "DailyTaskConfig": { - "NumberOfCoins": 3, //每日设定的投币数 [0,5] - "SupportUpIds": "39180492" //优先选择支持的up主Id集合,多个以英文逗号分隔,如:"123,456"。配置后会优先从指定的up主下挑选视频进行观看、分享和投币,不配置则从排行耪随机获取支持视频 + "SelectLike": true }, "Security": { + "IsSkipDailyTask": false, + "IntervalSecondsBetweenRequestApi": 4, "UserAgent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" //请求B站接口时头部传递的User-Agent }, From b6274d84a19d815273462b8004e667da3c954883 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 16:31:20 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=9B=9E=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=8E=92=E9=99=A4=E7=94=9F=E6=88=90=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiliBiliAgent/Interfaces/IDailyTaskApi.cs | 84 +++++++++++++++++++ .../BiliBiliAgent/Interfaces/IUserInfoApi.cs | 36 +------- .../Interfaces/IUserOperationApi.cs | 50 +---------- 3 files changed, 86 insertions(+), 84 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs index 55b5a08..a97b8fc 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs @@ -41,6 +41,43 @@ public interface IDailyTaskApi : IBiliBiliApi, IUserInfoApi, IUserOperationApi [Get("/x/space/arc/search?mid={upId}&ps={pageSize}&tid=0&pn={pageNumber}&keyword={keyword}&order=pubdate&jsonp=jsonp")] Task> SearchVideosByUpId(long upId, int pageSize = 20, int pageNumber = 1, string keyword = ""); + #region 用户信息 + + /// + /// 获取每日任务的完成情况 + /// + /// + [Get("/x/member/web/exp/reward")] + Task> GetDailyTaskRewardInfo(); + + /// + /// 获取通过投币已获取的经验值 + /// + /// + [Get("/x/web-interface/coin/today/exp")] + Task> GetDonateCoinExp(); + + /// + /// 获取VIP特权 + /// + /// + /// + /// + [Post("/x/vip/privilege/receive?type={type}&csrf={csrf}")] + Task ReceiveVipPrivilege(int type, string csrf); + + /// + /// 获取当前用户对视频的投币信息 + /// + /// + /// + [Get("/x/web-interface/archive/coins?aid={aid}")] + Task> GetDonatedCoinsForVideo(string aid); + + #endregion 用户信息 + + #region 用户操作 + /// /// 为视频投币 /// @@ -51,5 +88,52 @@ public interface IDailyTaskApi : IBiliBiliApi, IUserInfoApi, IUserOperationApi /// [Post("/x/web-interface/coin/add?aid={aid}&multiply={multiply}&select_like={select_like}&cross_domain=true&csrf={csrf}")] Task AddCoinForVideo(string aid, int multiply, int select_like, string csrf); + + /// + /// 登录 + /// + /// + [Get("/x/web-interface/nav")] + Task> LoginByCookie(); + + /// + /// 分享视频 + /// + /// + /// + /// + [Post("/x/web-interface/share/add?aid={aid}&csrf={csrf}")] + Task ShareVideo(string aid, string csrf); + + /// + /// 上传视频观看进度 + /// + /// + [Post("/x/click-interface/web/heartbeat?aid={aid}&played_time={playedTime}")] + Task UploadVideoHeartbeat(string aid, int playedTime); + + /// + /// 充电 + /// + /// + /// + /// + /// + /// + [Post("/x/ugcpay/trade/elec/pay/quick?elec_num={elec_num}&up_mid={up_mid}&otype=up&oid={oid}&csrf={csrf}")] + Task> Charge(decimal elec_num, string up_mid, string oid, string csrf); + + /// + /// 充电后留言 + /// + /// + /// + /// + /// + /// + [Post("/x/ugcpay/trade/elec/message?order_id={order_id}&message={message}&csrf={csrf}")] + Task> ChargeComment(string order_id, string message, string csrf); + + #endregion 用户操作 } } diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs index 37bebcf..7ec2c62 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs @@ -1,43 +1,9 @@ -using System.Threading.Tasks; -using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; -using Refit; - -namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces { /// /// 用户信息接口API /// public interface IUserInfoApi { - /// - /// 获取每日任务的完成情况 - /// - /// - [Get("/x/member/web/exp/reward")] - Task> GetDailyTaskRewardInfo(); - - /// - /// 获取通过投币已获取的经验值 - /// - /// - [Get("/x/web-interface/coin/today/exp")] - Task> GetDonateCoinExp(); - - /// - /// 获取VIP特权 - /// - /// - /// - /// - [Post("/x/vip/privilege/receive?type={type}&csrf={csrf}")] - Task ReceiveVipPrivilege(int type, string csrf); - - /// - /// 获取当前用户对视频的投币信息 - /// - /// - /// - [Get("/x/web-interface/archive/coins?aid={aid}")] - Task> GetDonatedCoinsForVideo(string aid); } } diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs index 4e9e0b1..e38f45c 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserOperationApi.cs @@ -1,57 +1,9 @@ -using System.Threading.Tasks; -using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; -using Refit; - -namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces { /// /// 用户操作API /// public interface IUserOperationApi { - /// - /// 登录 - /// - /// - [Get("/x/web-interface/nav")] - Task> LoginByCookie(); - - /// - /// 分享视频 - /// - /// - /// - /// - [Post("/x/web-interface/share/add?aid={aid}&csrf={csrf}")] - Task ShareVideo(string aid, string csrf); - - /// - /// 上传视频观看进度 - /// - /// - [Post("/x/click-interface/web/heartbeat?aid={aid}&played_time={playedTime}")] - Task UploadVideoHeartbeat(string aid, int playedTime); - - /// - /// 充电 - /// - /// - /// - /// - /// - /// - [Post("/x/ugcpay/trade/elec/pay/quick?elec_num={elec_num}&up_mid={up_mid}&otype=up&oid={oid}&csrf={csrf}")] - Task> Charge(decimal elec_num, string up_mid, string oid, string csrf); - - /// - /// 充电后留言 - /// - /// - /// - /// - /// - /// - [Post("/x/ugcpay/trade/elec/message?order_id={order_id}&message={message}&csrf={csrf}")] - Task> ChargeComment(string order_id, string message, string csrf); } } From 8c4109c08007a5026b658688d72ce7dc61b0f2eb Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Tue, 8 Dec 2020 16:52:00 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=B8=8D=E5=B0=8F?= =?UTF-8?q?=E5=BF=83=E5=88=A0=E9=99=A4=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ServiceCollectionExtension.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs index d84c50a..21fef3f 100644 --- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs @@ -25,6 +25,16 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se //全局代理 services.SetGlobalProxy(); + services.AddHttpClient(); + services.AddHttpClient("BiliBiliWithCookie", + (sp, c) => + { + c.DefaultRequestHeaders.Add("Cookie", + sp.GetRequiredService>().CurrentValue.ToString()); + c.DefaultRequestHeaders.Add("User-Agent", + sp.GetRequiredService>().CurrentValue.UserAgent); + }); + //bilibli services.AddBiliBiliClientApi("https://api.bilibili.com"); services.AddBiliBiliClientApi("https://manga.bilibili.com"); From 2e4bd0aca3307806cf633f782fc1efdefd41fc76 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Thu, 10 Dec 2020 09:58:41 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E6=94=B9=E4=B8=BAvalue.ToString()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs index b36ce5a..5bef7f6 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs @@ -98,7 +98,7 @@ public object Next_exp get { return this._next_exp; } set { - bool isLong = long.TryParse(this.Next_exp.ToString(), out long exp); + bool isLong = long.TryParse(value.ToString(), out long exp); if (isLong) { this._next_exp = exp; } else this._next_exp = long.MinValue; } From 489ac8553a3b5efd2f0068a0cc5bbc0cdf58ff0f Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Thu, 10 Dec 2020 10:03:31 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E6=8B=BF=E6=8E=89var?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ServiceCollectionExtension.cs | 2 +- .../Options/BiliBiliCookieOptions.cs | 32 +++++++++---------- .../AccountDomainService.cs | 22 ++++++------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs index 21fef3f..3fce231 100644 --- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs @@ -63,7 +63,7 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se private static IServiceCollection AddBiliBiliClientApi(this IServiceCollection services, string host) where TInterface : class { - RefitSettings settings = new RefitSettings(new SystemTextJsonContentSerializer(JsonSerializerOptionsBuilder.DefaultOptions)); + var settings = new RefitSettings(new SystemTextJsonContentSerializer(JsonSerializerOptionsBuilder.DefaultOptions)); services.AddRefitClient(settings) .ConfigureHttpClient((sp, c) => diff --git a/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs b/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs index 03bd815..42e07e9 100644 --- a/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs +++ b/src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs @@ -20,10 +20,10 @@ public class BiliBiliCookieOptions public string UserId { get => - !string.IsNullOrWhiteSpace(this._userId) - ? this._userId + !string.IsNullOrWhiteSpace(_userId) + ? _userId : RayConfiguration.Root["BiliBiliCookie:DedeUserID"];//为了兼容 GitHub Secrets 经常会被填错 - set => this._userId = value; + set => _userId = value; } /// @@ -39,10 +39,10 @@ public string UserId public string BiliJct { get => - !string.IsNullOrWhiteSpace(this._biliJct) - ? this._biliJct + !string.IsNullOrWhiteSpace(_biliJct) + ? _biliJct : RayConfiguration.Root["BiliBiliCookie:Bili_jct"];//为了兼容 GitHub Secrets 经常会被填错 - set => this._biliJct = value; + set => _biliJct = value; } /// @@ -57,15 +57,15 @@ public bool Check(ILogger logger) string tips = "检测到已配置了[{0}],已兼容使用[{1}]"; //UserId为空,抛异常 - if (string.IsNullOrWhiteSpace(this.UserId)) + if (string.IsNullOrWhiteSpace(UserId)) { - logger.LogWarning(msg, nameof(this.UserId), this.GetPropertyDescription(nameof(this.UserId))); + logger.LogWarning(msg, nameof(UserId), GetPropertyDescription(nameof(UserId))); result = false; } - else if (!long.TryParse(this.UserId, out long uid))//不为空,但不能转换为long,警告 + else if (!long.TryParse(UserId, out long uid))//不为空,但不能转换为long,警告 { - logger.LogWarning("UserId:{uid} 不能转换为long型,请确认配置的是正确的Cookie值", this.UserId); + logger.LogWarning("UserId:{uid} 不能转换为long型,请确认配置的是正确的Cookie值", UserId); } //UserId为空,但DedeUserID有值,兼容使用 if (string.IsNullOrWhiteSpace(RayConfiguration.Root["BiliBiliCookie:UserID"]) @@ -75,16 +75,16 @@ public bool Check(ILogger logger) } //SessData为空,抛异常 - if (string.IsNullOrWhiteSpace(this.SessData)) + if (string.IsNullOrWhiteSpace(SessData)) { - logger.LogWarning(msg, nameof(this.SessData), this.GetPropertyDescription(nameof(this.SessData))); + logger.LogWarning(msg, nameof(SessData), GetPropertyDescription(nameof(SessData))); result = false; } //BiliJct为空,抛异常 - if (string.IsNullOrWhiteSpace(this.BiliJct)) + if (string.IsNullOrWhiteSpace(BiliJct)) { - logger.LogWarning(msg, nameof(this.BiliJct), this.GetPropertyDescription(nameof(this.BiliJct))); + logger.LogWarning(msg, nameof(BiliJct), GetPropertyDescription(nameof(BiliJct))); result = false; } //BiliJct为空,但Bili_jct有值,兼容使用 @@ -99,12 +99,12 @@ public bool Check(ILogger logger) public override string ToString() { - return $"{this.GetPropertyDescription(nameof(this.UserId))}={this.UserId}; {this.GetPropertyDescription(nameof(this.SessData))}={this.SessData}; {this.GetPropertyDescription(nameof(this.BiliJct))}={this.BiliJct};"; + return $"{GetPropertyDescription(nameof(UserId))}={UserId}; {GetPropertyDescription(nameof(SessData))}={SessData}; {GetPropertyDescription(nameof(BiliJct))}={BiliJct};"; } private string GetPropertyDescription(string propertyName) { - return this.GetType().GetPropertyDescription(propertyName); + return GetType().GetPropertyDescription(propertyName); } } } diff --git a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs index ad4aea8..b46fbd7 100644 --- a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs @@ -18,8 +18,8 @@ public class AccountDomainService : IAccountDomainService public AccountDomainService(ILogger logger, IDailyTaskApi dailyTaskApi) { - this._logger = logger; - this._dailyTaskApi = dailyTaskApi; + _logger = logger; + _dailyTaskApi = dailyTaskApi; } /// @@ -28,29 +28,29 @@ public AccountDomainService(ILogger logger, /// public UseInfo LoginByCookie() { - BiliApiResponse apiResponse = this._dailyTaskApi.LoginByCookie().Result; + BiliApiResponse apiResponse = _dailyTaskApi.LoginByCookie().Result; if (apiResponse.Code != 0 || !apiResponse.Data.IsLogin) { - this._logger.LogWarning("登录异常,Cookies可能失效了,请仔细检查Github Secrets中DEDEUSERID、SESSDATA、BILI_JCT三项的值是否正确"); + _logger.LogWarning("登录异常,Cookies可能失效了,请仔细检查Github Secrets中DEDEUSERID、SESSDATA、BILI_JCT三项的值是否正确"); return null; } UseInfo useInfo = apiResponse.Data; //用户名模糊处理 - this._logger.LogInformation("登录成功,用户名: {0}", useInfo.GetFuzzyUname()); - this._logger.LogInformation("硬币余额: {0}", useInfo.Money ?? 0); + _logger.LogInformation("登录成功,用户名: {0}", useInfo.GetFuzzyUname()); + _logger.LogInformation("硬币余额: {0}", useInfo.Money ?? 0); if (useInfo.Level_info.Current_level < 6) { - this._logger.LogInformation("距离升级到Lv{0}还有: {1}天", + _logger.LogInformation("距离升级到Lv{0}还有: {1}天", useInfo.Level_info.Current_level + 1, (useInfo.Level_info.GetNext_expLong() - useInfo.Level_info.Current_exp) / Constants.EveryDayExp); } else { - this._logger.LogInformation("当前等级Lv6,经验值为:{0}", useInfo.Level_info.Current_exp); + _logger.LogInformation("当前等级Lv6,经验值为:{0}", useInfo.Level_info.Current_exp); } return useInfo; @@ -63,7 +63,7 @@ public UseInfo LoginByCookie() public DailyTaskInfo GetDailyTaskStatus() { DailyTaskInfo result = new DailyTaskInfo(); - BiliApiResponse apiResponse = this._dailyTaskApi.GetDailyTaskRewardInfo().Result; + BiliApiResponse apiResponse = _dailyTaskApi.GetDailyTaskRewardInfo().Result; if (apiResponse.Code == 0) { //_logger.LogInformation("请求本日任务完成状态成功"); @@ -71,8 +71,8 @@ public DailyTaskInfo GetDailyTaskStatus() } else { - this._logger.LogWarning("获取今日任务完成状态失败:{result}", apiResponse.ToJson()); - result = this._dailyTaskApi.GetDailyTaskRewardInfo().Result.Data; + _logger.LogWarning("获取今日任务完成状态失败:{result}", apiResponse.ToJson()); + result = _dailyTaskApi.GetDailyTaskRewardInfo().Result.Data; //todo:偶发性请求失败,再请求一次,这么写很丑陋,待用polly再框架层面实现 } From 8db9fc98ffa3e5a096a33e9b3ecb1f826902a72d Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Thu, 10 Dec 2020 10:14:23 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E6=94=B9=E6=8E=89=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E4=BA=89=E8=AE=AE=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiliBiliAgent/Dtos/UseInfo.cs | 20 +-- .../DailyTaskAppService.cs | 64 ++++---- ...iablesExcludeEmptyConfigurationProvider.cs | 26 ++-- ...ariablesExcludeEmptyConfigurationSource.cs | 2 +- .../AccountDomainService.cs | 2 +- .../ChargeDomainService.cs | 36 ++--- .../VideoDomainService.cs | 140 +++++++++--------- .../VipPrivilegeDomainService.cs | 24 +-- .../JsonSerializerOptionsBuilder.cs | 6 +- .../JsonSerializerOptionsBuilderExtesions.cs | 2 +- .../Ray.BiliBiliTool.Infrastructure.csproj | 1 - .../Ray.BiliBiliTool.Util.csproj | 2 +- 12 files changed, 162 insertions(+), 163 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs index 5bef7f6..2bfc3ae 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UseInfo.cs @@ -38,12 +38,12 @@ public class UseInfo public string GetFuzzyUname() { StringBuilder sb = new StringBuilder(); - int s1 = this.Uname.Length / 2; + int s1 = Uname.Length / 2; int s2 = (s1 + 1) / 2; - for (int i = 0 ; i < this.Uname.Length ; i++) + for (int i = 0 ; i < Uname.Length ; i++) { if (i >= s2 && i < s1 + s2) sb.Append("*"); - else sb.Append(this.Uname[i]); + else sb.Append(Uname[i]); } return sb.ToString(); @@ -59,10 +59,10 @@ public string GetFuzzyUname() /// public int GetVipType() { - if (this.VipStatus == 1) + if (VipStatus == 1) { //只有VipStatus为1的时候获取到VipType才是有效的。 - return this.VipType; + return VipType; } else { @@ -95,12 +95,12 @@ public class LevelInfo /// public object Next_exp { - get { return this._next_exp; } + get { return _next_exp; } set { bool isLong = long.TryParse(value.ToString(), out long exp); - if (isLong) { this._next_exp = exp; } - else this._next_exp = long.MinValue; + if (isLong) { _next_exp = exp; } + else _next_exp = long.MinValue; } } @@ -110,8 +110,8 @@ public object Next_exp /// public long GetNext_expLong() { - if (this.Current_level == 6) return long.MaxValue; - else return this._next_exp; + if (Current_level == 6) return long.MaxValue; + else return _next_exp; } } diff --git a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs index 4ffc805..60131db 100644 --- a/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs @@ -30,43 +30,43 @@ public DailyTaskAppService( IChargeDomainService chargeDomainService, IOptionsMonitor securityOptions) { - this._logger = logger; - this._loginDomainService = loginDomainService; - this._videoDomainService = videoDomainService; - this._mangaDomainService = mangaDomainService; - this._liveDomainService = liveDomainService; - this._vipPrivilegeDomainService = vipPrivilegeDomainService; - this._chargeDomainService = chargeDomainService; - this._securityOptions = securityOptions.CurrentValue; + _logger = logger; + _loginDomainService = loginDomainService; + _videoDomainService = videoDomainService; + _mangaDomainService = mangaDomainService; + _liveDomainService = liveDomainService; + _vipPrivilegeDomainService = vipPrivilegeDomainService; + _chargeDomainService = chargeDomainService; + _securityOptions = securityOptions.CurrentValue; } public void DoDailyTask() { - if (this._securityOptions.IsSkipDailyTask) + if (_securityOptions.IsSkipDailyTask) { - this._logger.LogWarning("已配置为跳过每日任务"); + _logger.LogWarning("已配置为跳过每日任务"); return; } - this._logger.LogInformation("-----开始每日任务-----\r\n"); + _logger.LogInformation("-----开始每日任务-----\r\n"); UseInfo userInfo; DailyTaskInfo dailyTaskInfo; - userInfo = this.Login(); - dailyTaskInfo = this.GetDailyTaskStatus(); + userInfo = Login(); + dailyTaskInfo = GetDailyTaskStatus(); - this.WatchAndShareVideo(dailyTaskInfo); - this.AddCoinsForVideo(); - this.MangaSign(); - this.LiveSign(); - userInfo.Money = this.ExchangeSilver2Coin(); + WatchAndShareVideo(dailyTaskInfo); + AddCoinsForVideo(); + MangaSign(); + LiveSign(); + userInfo.Money = ExchangeSilver2Coin(); - this.ReceiveVipPrivilege(userInfo); - this.ReceiveMangaVipReward(userInfo); - this.Charge(userInfo); + ReceiveVipPrivilege(userInfo); + ReceiveMangaVipReward(userInfo); + Charge(userInfo); - this._logger.LogInformation("-----全部任务已执行结束-----\r\n"); + _logger.LogInformation("-----全部任务已执行结束-----\r\n"); } /// @@ -76,7 +76,7 @@ public void DoDailyTask() [TaskInterceptor("登录")] private UseInfo Login() { - UseInfo userInfo = this._loginDomainService.LoginByCookie(); + UseInfo userInfo = _loginDomainService.LoginByCookie(); if (userInfo == null) throw new Exception("登录失败,请检查Cookie");//终止流程 return userInfo; } @@ -88,7 +88,7 @@ private UseInfo Login() [TaskInterceptor(null, false)] private DailyTaskInfo GetDailyTaskStatus() { - return this._loginDomainService.GetDailyTaskStatus(); + return _loginDomainService.GetDailyTaskStatus(); } /// @@ -97,7 +97,7 @@ private DailyTaskInfo GetDailyTaskStatus() [TaskInterceptor("观看、分享视频", false)] private void WatchAndShareVideo(DailyTaskInfo dailyTaskInfo) { - this._videoDomainService.WatchAndShareVideo(dailyTaskInfo); + _videoDomainService.WatchAndShareVideo(dailyTaskInfo); } /// @@ -106,7 +106,7 @@ private void WatchAndShareVideo(DailyTaskInfo dailyTaskInfo) [TaskInterceptor("投币", false)] private void AddCoinsForVideo() { - this._videoDomainService.AddCoinsForVideo(); + _videoDomainService.AddCoinsForVideo(); } /// @@ -115,7 +115,7 @@ private void AddCoinsForVideo() [TaskInterceptor("直播中心签到", false)] private void LiveSign() { - this._liveDomainService.LiveSign(); + _liveDomainService.LiveSign(); } /// @@ -124,7 +124,7 @@ private void LiveSign() [TaskInterceptor("直播中心银瓜子兑换硬币", false)] private decimal ExchangeSilver2Coin() { - return this._liveDomainService.ExchangeSilver2Coin(); + return _liveDomainService.ExchangeSilver2Coin(); } /// @@ -133,7 +133,7 @@ private decimal ExchangeSilver2Coin() [TaskInterceptor("每月领取大会员福利", false)] private void ReceiveVipPrivilege(UseInfo userInfo) { - this._vipPrivilegeDomainService.ReceiveVipPrivilege(userInfo); + _vipPrivilegeDomainService.ReceiveVipPrivilege(userInfo); } /// @@ -142,7 +142,7 @@ private void ReceiveVipPrivilege(UseInfo userInfo) [TaskInterceptor("每月为自己充电", false)] private void Charge(UseInfo userInfo) { - this._chargeDomainService.Charge(userInfo); + _chargeDomainService.Charge(userInfo); } /// @@ -151,7 +151,7 @@ private void Charge(UseInfo userInfo) [TaskInterceptor("漫画签到", false)] private void MangaSign() { - this._mangaDomainService.MangaSign(); + _mangaDomainService.MangaSign(); } /// @@ -160,7 +160,7 @@ private void MangaSign() [TaskInterceptor("每月领取大会员漫画权益", false)] private void ReceiveMangaVipReward(UseInfo userInfo) { - this._mangaDomainService.ReceiveMangaVipReward(1, userInfo); + _mangaDomainService.ReceiveMangaVipReward(1, userInfo); } } } diff --git a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs index 2bcf130..2fde500 100644 --- a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs +++ b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs @@ -12,30 +12,30 @@ namespace Ray.BiliBiliTool.Config /// public class EnvironmentVariablesExcludeEmptyConfigurationProvider : EnvironmentVariablesConfigurationProvider { - private readonly string prefix; - private readonly Func, bool> startsWith; - private readonly Func, bool> removeNullValue; - private readonly Func, bool> fifter; - private readonly Func, KeyValuePair> removePrefix; + private readonly string _prefix; + private readonly Func, bool> _startsWith; + private readonly Func, bool> _removeNullValue; + private readonly Func, bool> _fifter; + private readonly Func, KeyValuePair> _removePrefix; public EnvironmentVariablesExcludeEmptyConfigurationProvider(string prefix = null) : base(prefix) { - this.prefix = prefix ?? string.Empty; - this.startsWith = c => c.Key.StartsWith(this.prefix, StringComparison.OrdinalIgnoreCase); - this.removeNullValue = c => !string.IsNullOrWhiteSpace(c.Value); - this.fifter = c => this.startsWith(c) && this.removeNullValue(c); + _prefix = prefix ?? string.Empty; + _startsWith = c => c.Key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase); + _removeNullValue = c => !string.IsNullOrWhiteSpace(c.Value); + _fifter = c => _startsWith(c) && _removeNullValue(c); - this.removePrefix = this.prefix.Length == 0 + _removePrefix = prefix.Length == 0 ? t => t - : t => t.NewKey(c => c.Substring(this.prefix.Length)); + : t => t.NewKey(c => c.Substring(prefix.Length)); } public override void Load() { Dictionary dictionary = Environment.GetEnvironmentVariables() .ToDictionary(otherAction: t => t - .Where(this.fifter) - .Select(this.removePrefix)); + .Where(_fifter) + .Select(_removePrefix)); base.Data = new Dictionary(dictionary, StringComparer.OrdinalIgnoreCase); } diff --git a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs index 08886a3..263c0bf 100644 --- a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs +++ b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs @@ -18,7 +18,7 @@ public class EnvironmentVariablesExcludeEmptyConfigurationSource : IConfiguratio public IConfigurationProvider Build(IConfigurationBuilder builder) { - return new EnvironmentVariablesExcludeEmptyConfigurationProvider(this.Prefix); + return new EnvironmentVariablesExcludeEmptyConfigurationProvider(Prefix); } } } diff --git a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs index b46fbd7..d459514 100644 --- a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs @@ -62,7 +62,7 @@ public UseInfo LoginByCookie() /// public DailyTaskInfo GetDailyTaskStatus() { - DailyTaskInfo result = new DailyTaskInfo(); + DailyTaskInfo result = new(); BiliApiResponse apiResponse = _dailyTaskApi.GetDailyTaskRewardInfo().Result; if (apiResponse.Code == 0) { diff --git a/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs b/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs index 24b8c43..cc24c71 100644 --- a/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs @@ -23,10 +23,10 @@ public ChargeDomainService(ILogger logger, IDailyTaskApi dailyTaskApi, IOptionsMonitor cookieOptions) { - this._logger = logger; - this._dailyTaskOptions = dailyTaskOptions.CurrentValue; - this._dailyTaskApi = dailyTaskApi; - this._cookieOptions = cookieOptions.CurrentValue; + _logger = logger; + _dailyTaskOptions = dailyTaskOptions.CurrentValue; + _dailyTaskApi = dailyTaskApi; + _cookieOptions = cookieOptions.CurrentValue; } /// @@ -35,19 +35,19 @@ public ChargeDomainService(ILogger logger, /// public void Charge(UseInfo userInfo) { - if (this._dailyTaskOptions.DayOfAutoCharge == 0) + if (_dailyTaskOptions.DayOfAutoCharge == 0) { - this._logger.LogInformation("已配置为不进行自动充电,跳过充电任务"); + _logger.LogInformation("已配置为不进行自动充电,跳过充电任务"); return; } - int targetDay = this._dailyTaskOptions.DayOfAutoCharge == -1 + int targetDay = _dailyTaskOptions.DayOfAutoCharge == -1 ? DateTime.Today.LastDayOfMonth().Day - : this._dailyTaskOptions.DayOfAutoCharge; + : _dailyTaskOptions.DayOfAutoCharge; if (DateTime.Today.Day != targetDay) { - this._logger.LogInformation("目标充电日期为{targetDay}号,今天是{today}号,跳过充电任务", targetDay, DateTime.Today.Day); + _logger.LogInformation("目标充电日期为{targetDay}号,今天是{today}号,跳过充电任务", targetDay, DateTime.Today.Day); return; } @@ -55,7 +55,7 @@ public void Charge(UseInfo userInfo) decimal couponBalance = userInfo.Wallet.Coupon_balance; if (couponBalance < 2) { - this._logger.LogInformation("不是年度大会员或已过期,无法充电"); + _logger.LogInformation("不是年度大会员或已过期,无法充电"); return; } @@ -63,29 +63,29 @@ public void Charge(UseInfo userInfo) int vipType = userInfo.GetVipType(); if (vipType != 2) { - this._logger.LogInformation("不是年度大会员或已过期,无法充电"); + _logger.LogInformation("不是年度大会员或已过期,无法充电"); return; } - BiliApiResponse response = this._dailyTaskApi.Charge(couponBalance * 10, this._cookieOptions.UserId, this._cookieOptions.UserId, this._cookieOptions.BiliJct).Result; + BiliApiResponse response = _dailyTaskApi.Charge(couponBalance * 10, _cookieOptions.UserId, _cookieOptions.UserId, _cookieOptions.BiliJct).Result; if (response.Code == 0) { if (response.Data.Status == 4) { - this._logger.LogInformation("给自己充电成功啦,送的B币券没有浪费哦"); - this._logger.LogInformation("本次给自己充值了: {num}个电池哦", couponBalance * 10); + _logger.LogInformation("给自己充电成功啦,送的B币券没有浪费哦"); + _logger.LogInformation("本次给自己充值了: {num}个电池哦", couponBalance * 10); //获取充电留言token - this.ChargeComments(response.Data.Order_no); + ChargeComments(response.Data.Order_no); } else { - this._logger.LogDebug("充电失败了啊 原因:{reason}", response.ToJson()); + _logger.LogDebug("充电失败了啊 原因:{reason}", response.ToJson()); } } else { - this._logger.LogDebug("充电失败了啊 原因:{reason}", response.Message); + _logger.LogDebug("充电失败了啊 原因:{reason}", response.Message); } } @@ -95,7 +95,7 @@ public void Charge(UseInfo userInfo) /// public void ChargeComments(string token) { - this._dailyTaskApi.ChargeComment(token, "Ray.BiliBiliTool自动充电", this._cookieOptions.BiliJct); + _dailyTaskApi.ChargeComment(token, "Ray.BiliBiliTool自动充电", _cookieOptions.BiliJct); } } } diff --git a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs index 3fc5d5e..2e0b0b2 100644 --- a/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs @@ -32,13 +32,13 @@ public VideoDomainService(ILogger logger, ICoinDomainService coinDomainService, IRelationApi relationApi) { - this._logger = logger; - this._dailyTaskApi = dailyTaskApi; - this._biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; - this._dailyTaskOptions = dailyTaskOptions.CurrentValue; - this._accountApi = accountApi; - this._coinDomainService = coinDomainService; - this._relationApi = relationApi; + _logger = logger; + _dailyTaskApi = dailyTaskApi; + _biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; + _dailyTaskOptions = dailyTaskOptions.CurrentValue; + _accountApi = accountApi; + _coinDomainService = coinDomainService; + _relationApi = relationApi; } /// @@ -47,7 +47,7 @@ public VideoDomainService(ILogger logger, /// public string GetRandomVideo() { - return this.RegionRanking().Item1; + return RegionRanking().Item1; } public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) @@ -56,18 +56,18 @@ public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) if (!dailyTaskStatus.Watch || !dailyTaskStatus.Share) { - targetVideo = this.GetRandomVideoForWatch(); - this._logger.LogInformation("获取随机视频:{title}", targetVideo.Item2); + targetVideo = GetRandomVideoForWatch(); + _logger.LogInformation("获取随机视频:{title}", targetVideo.Item2); } if (!dailyTaskStatus.Watch) - this.WatchVideo(targetVideo.Item1, targetVideo.Item2); + WatchVideo(targetVideo.Item1, targetVideo.Item2); else - this._logger.LogInformation("今天已经观看过了,不需要再看啦"); + _logger.LogInformation("今天已经观看过了,不需要再看啦"); if (!dailyTaskStatus.Share) - this.ShareVideo(targetVideo.Item1, targetVideo.Item2); + ShareVideo(targetVideo.Item1, targetVideo.Item2); else - this._logger.LogInformation("今天已经分享过了,不要再分享啦"); + _logger.LogInformation("今天已经分享过了,不要再分享啦"); } /// @@ -76,15 +76,15 @@ public void WatchAndShareVideo(DailyTaskInfo dailyTaskStatus) public void WatchVideo(string aid, string title = "") { int playedTime = new Random().Next(1, 90); - BiliApiResponse apiResponse = this._dailyTaskApi.UploadVideoHeartbeat(aid, playedTime).Result; + BiliApiResponse apiResponse = _dailyTaskApi.UploadVideoHeartbeat(aid, playedTime).Result; if (apiResponse.Code == 0) { - this._logger.LogInformation("视频播放成功,已观看到第{playedTime}秒", playedTime); + _logger.LogInformation("视频播放成功,已观看到第{playedTime}秒", playedTime); } else { - this._logger.LogDebug("视频播放失败,原因:{msg}", apiResponse.Message); + _logger.LogDebug("视频播放失败,原因:{msg}", apiResponse.Message); } } @@ -94,16 +94,16 @@ public void WatchVideo(string aid, string title = "") /// 视频aid public void ShareVideo(string aid, string title = "") { - BiliApiResponse apiResponse = this._dailyTaskApi.ShareVideo(aid, this._biliBiliCookieOptions.BiliJct).Result; + BiliApiResponse apiResponse = _dailyTaskApi.ShareVideo(aid, _biliBiliCookieOptions.BiliJct).Result; if (apiResponse.Code == 0) { - this._logger.LogInformation("视频分享成功"); + _logger.LogInformation("视频分享成功"); } else { - this._logger.LogInformation("视频分享失败,原因: {msg}", apiResponse.Message); - this._logger.LogDebug("开发者提示: 如果是csrf校验失败请检查BILI_JCT参数是否正确或者失效"); + _logger.LogInformation("视频分享失败,原因: {msg}", apiResponse.Message); + _logger.LogDebug("开发者提示: 如果是csrf校验失败请检查BILI_JCT参数是否正确或者失效"); } } @@ -114,15 +114,15 @@ public void ShareVideo(string aid, string title = "") /// public bool CanDonatedCoinsForVideo(string aid) { - int multiply = this._dailyTaskApi.GetDonatedCoinsForVideo(aid).Result.Data.Multiply; + int multiply = _dailyTaskApi.GetDonatedCoinsForVideo(aid).Result.Data.Multiply; if (multiply < 2) { - this._logger.LogDebug("已为Av" + aid + "投过" + multiply + "枚硬币,可以继续投币"); + _logger.LogDebug("已为Av" + aid + "投过" + multiply + "枚硬币,可以继续投币"); return true; } else { - this._logger.LogDebug("已为Av" + aid + " 投过2枚硬币,不能再投币啦"); + _logger.LogDebug("已为Av" + aid + " 投过2枚硬币,不能再投币啦"); return false; } } @@ -132,24 +132,24 @@ public bool CanDonatedCoinsForVideo(string aid) /// public void AddCoinsForVideo() { - int needCoins = this.GetNeedDonateCoins(out int alreadyCoins, out int targetCoins); - this._logger.LogInformation("今日已投{already}枚硬币,目标是投{target}枚硬币", alreadyCoins, targetCoins); + int needCoins = GetNeedDonateCoins(out int alreadyCoins, out int targetCoins); + _logger.LogInformation("今日已投{already}枚硬币,目标是投{target}枚硬币", alreadyCoins, targetCoins); if (needCoins <= 0) { - this._logger.LogInformation("已经完成投币任务,今天不需要再投啦"); + _logger.LogInformation("已经完成投币任务,今天不需要再投啦"); return; } - this._logger.LogInformation("还需再投{need}枚硬币", needCoins); + _logger.LogInformation("还需再投{need}枚硬币", needCoins); //投币前硬币余额 - decimal coinBalance = this._coinDomainService.GetCoinBalance(); - this._logger.LogInformation("投币前余额为 : {coinBalance}", coinBalance); + decimal coinBalance = _coinDomainService.GetCoinBalance(); + _logger.LogInformation("投币前余额为 : {coinBalance}", coinBalance); if (coinBalance <= 0) { - this._logger.LogInformation("因硬币余额不足,今日暂不执行投币任务"); + _logger.LogInformation("因硬币余额不足,今日暂不执行投币任务"); return; } @@ -157,7 +157,7 @@ public void AddCoinsForVideo() if (coinBalance < needCoins) { int.TryParse(decimal.Truncate(coinBalance).ToString(), out needCoins); - this._logger.LogInformation("因硬币余额不足,目标投币数调整为: {needCoins}", needCoins); + _logger.LogInformation("因硬币余额不足,目标投币数调整为: {needCoins}", needCoins); } int successCoins = 0; @@ -166,17 +166,17 @@ public void AddCoinsForVideo() { tryCount++; - Tuple video = this.TryGetCanDonatedVideo(); + Tuple video = TryGetCanDonatedVideo(); if (video == null) { if (tryCount <= 10) continue; - this._logger.LogInformation("尝试投币次数超过10次,投币任务终止"); + _logger.LogInformation("尝试投币次数超过10次,投币任务终止"); break; } - this._logger.LogDebug("正在为视频“{title}”投币", video.Item2); + _logger.LogDebug("正在为视频“{title}”投币", video.Item2); - bool isSuccess = this.AddCoinsForVideo(video.Item1, 1, this._dailyTaskOptions.SelectLike, video.Item2); + bool isSuccess = AddCoinsForVideo(video.Item1, 1, _dailyTaskOptions.SelectLike, video.Item2); if (isSuccess) { successCoins++; @@ -184,12 +184,12 @@ public void AddCoinsForVideo() if (tryCount > 10) { - this._logger.LogInformation("尝试投币次数超过10次,投币任务终止"); + _logger.LogInformation("尝试投币次数超过10次,投币任务终止"); break; } } - this._logger.LogInformation("投币任务完成,余额为: {money}", this._accountApi.GetCoinBalance().Result.Data.Money); + _logger.LogInformation("投币任务完成,余额为: {money}", _accountApi.GetCoinBalance().Result.Data.Money); } /// @@ -201,23 +201,23 @@ public void AddCoinsForVideo() /// 是否投币成功 public bool AddCoinsForVideo(string aid, int multiply, bool select_like, string title = "") { - BiliApiResponse result = this._dailyTaskApi.AddCoinForVideo(aid, multiply, select_like ? 1 : 0, this._biliBiliCookieOptions.BiliJct).Result; + BiliApiResponse result = _dailyTaskApi.AddCoinForVideo(aid, multiply, select_like ? 1 : 0, _biliBiliCookieOptions.BiliJct).Result; if (result.Code == 0) { - this._logger.LogInformation("为“{title}”投币成功", title); + _logger.LogInformation("为“{title}”投币成功", title); return true; } if (result.Code == -111) { string errorMsg = $"投币异常,Cookie配置项[BiliJct]错误或已过期,请检查并更新。接口返回:{result.Message}"; - this._logger.LogError(errorMsg); + _logger.LogError(errorMsg); throw new Exception(errorMsg); } else { - this._logger.LogInformation("为“{title}”投币失败,原因:{msg}", title, result.Message); + _logger.LogInformation("为“{title}”投币失败,原因:{msg}", title, result.Message); return false; } } @@ -231,22 +231,22 @@ public Tuple TryGetCanDonatedVideo() Tuple result = null; //如果配置upID,则从up中随机尝试获取10次 - if (this._dailyTaskOptions.SupportUpIdList.Count > 0) + if (_dailyTaskOptions.SupportUpIdList.Count > 0) { - result = this.TryGetCanDonatedVideoByUp(10); + result = TryGetCanDonatedVideoByUp(10); if (result != null) return result; } //然后从特别关注列表尝试获取10次 - result = this.TryGetCanDonatedVideoBySpecialUps(10); + result = TryGetCanDonatedVideoBySpecialUps(10); if (result != null) return result; //然后从普通关注列表获取10次 - result = this.TryGetCanDonatedVideoByFollowingUps(10); + result = TryGetCanDonatedVideoByFollowingUps(10); if (result != null) return result; //最后从排行榜尝试5次 - result = this.TryGetNotDonatedVideoByRegion(5); + result = TryGetNotDonatedVideoByRegion(5); return result; } @@ -259,9 +259,9 @@ public Tuple TryGetCanDonatedVideo() public Tuple TryGetCanDonatedVideoByUp(int tryCount) { //是否配置了up主 - if (this._dailyTaskOptions.SupportUpIdList.Count == 0) return null; + if (_dailyTaskOptions.SupportUpIdList.Count == 0) return null; - return this.TryGetCanDonateVideoByUps(this._dailyTaskOptions.SupportUpIdList, tryCount); ; + return TryGetCanDonateVideoByUps(_dailyTaskOptions.SupportUpIdList, tryCount); ; } /// @@ -275,10 +275,10 @@ public Tuple TryGetCanDonatedVideoBySpecialUps(int tryCount) Dictionary videoCountDic = new Dictionary(); //获取特别关注列表 - BiliApiResponse> specials = this._relationApi.GetSpecialFollowings().Result; + BiliApiResponse> specials = _relationApi.GetSpecialFollowings().Result; if (specials.Data == null || specials.Data.Count == 0) return null; - return this.TryGetCanDonateVideoByUps(specials.Data.Select(x => x.Mid).ToList(), tryCount); + return TryGetCanDonateVideoByUps(specials.Data.Select(x => x.Mid).ToList(), tryCount); } /// @@ -292,10 +292,10 @@ public Tuple TryGetCanDonatedVideoByFollowingUps(int tryCount) Dictionary videoCountDic = new Dictionary(); //获取特别关注列表 - BiliApiResponse result = this._relationApi.GetFollowings(this._biliBiliCookieOptions.UserId).Result; + BiliApiResponse result = _relationApi.GetFollowings(_biliBiliCookieOptions.UserId).Result; if (result.Data.Total == 0) return null; - return this.TryGetCanDonateVideoByUps(result.Data.List.Select(x => x.Mid).ToList(), tryCount); + return TryGetCanDonateVideoByUps(result.Data.List.Select(x => x.Mid).ToList(), tryCount); } /// @@ -319,13 +319,13 @@ private Tuple TryGetCanDonateVideoByUps(List upIds, int tr long randomUpId = upIds[new Random().Next(0, upIds.Count)]; if (!videoCountDic.TryGetValue(randomUpId, out int videoCount)) { - videoCount = this.GetVidoeCountOfUp(randomUpId); + videoCount = GetVidoeCountOfUp(randomUpId); videoCountDic.Add(randomUpId, videoCount); } if (videoCount == 0) continue; - UpVideoInfo videoInfo = this.GetRandomVideoOfUp(randomUpId, videoCount); - if (!this.CanDonatedCoinsForVideo(videoInfo.Aid.ToString())) continue; + UpVideoInfo videoInfo = GetRandomVideoOfUp(randomUpId, videoCount); + if (!CanDonatedCoinsForVideo(videoInfo.Aid.ToString())) continue; return Tuple.Create(videoInfo.Aid.ToString(), videoInfo.Title); } @@ -343,8 +343,8 @@ public Tuple TryGetNotDonatedVideoByRegion(int tryCount) for (int i = 0 ; i < tryCount ; i++) { - Tuple video = this.RegionRanking(); - if (!this.CanDonatedCoinsForVideo(video.Item1)) continue; + Tuple video = RegionRanking(); + if (!CanDonatedCoinsForVideo(video.Item1)) continue; return video; } @@ -355,17 +355,17 @@ public List GetRandomVideosOfUps() { List re = new List(); - int configUpsCount = this._dailyTaskOptions.SupportUpIdList.Count; + int configUpsCount = _dailyTaskOptions.SupportUpIdList.Count; if (configUpsCount == 0) return re; - long upId = this._dailyTaskOptions.SupportUpIdList[new Random().Next(0, configUpsCount)]; - int count = this.GetVidoeCountOfUp(upId); + long upId = _dailyTaskOptions.SupportUpIdList[new Random().Next(0, configUpsCount)]; + int count = GetVidoeCountOfUp(upId); int targetNum = 10; if (count < 10) targetNum = count; for (int i = 0 ; i < targetNum ; i++) { - UpVideoInfo videoInfo = this.GetRandomVideoOfUp(upId, count); + UpVideoInfo videoInfo = GetRandomVideoOfUp(upId, count); if (re.Count(x => x.Aid == videoInfo.Aid) == 0) re.Add(videoInfo); } @@ -375,7 +375,7 @@ public List GetRandomVideosOfUps() private UpVideoInfo GetRandomVideoOfUp(long upId, int total) { int pageNum = new Random().Next(1, total + 1); - BiliApiResponse re = this._dailyTaskApi.SearchVideosByUpId(upId, 1, pageNum).Result; + BiliApiResponse re = _dailyTaskApi.SearchVideosByUpId(upId, 1, pageNum).Result; if (re.Code != 0) { @@ -392,7 +392,7 @@ private UpVideoInfo GetRandomVideoOfUp(long upId, int total) /// private int GetVidoeCountOfUp(long upId) { - BiliApiResponse re = this._dailyTaskApi.SearchVideosByUpId(upId, 1, 1).Result; + BiliApiResponse re = _dailyTaskApi.SearchVideosByUpId(upId, 1, 1).Result; if (re.Code != 0) { throw new Exception(re.Message); @@ -414,7 +414,7 @@ private Tuple RegionRanking() int[] arr = { 1, 3, 4, 5, 160, 22, 119 }; int rid = arr[new Random().Next(arr.Length - 1)]; - BiliApiResponse> apiResponse = this._dailyTaskApi.GetRegionRankingVideos(rid, 3).Result; + BiliApiResponse> apiResponse = _dailyTaskApi.GetRegionRankingVideos(rid, 3).Result; //_logger.LogInformation("获取分区:{rid}的{day}日top10榜单成功", rid, day); RankingInfo data = apiResponse.Data[new Random().Next(apiResponse.Data.Count)]; @@ -433,9 +433,9 @@ private int GetNeedDonateCoins(out int alreadyCoins, out int targetCoins) int needCoins = 0; //获取自定义配置投币数 - int configCoins = this._dailyTaskOptions.NumberOfCoins; + int configCoins = _dailyTaskOptions.NumberOfCoins; //已投的硬币 - alreadyCoins = this._coinDomainService.GetDonatedCoins(); + alreadyCoins = _coinDomainService.GetDonatedCoins(); //目标 targetCoins = configCoins > Constants.MaxNumberOfDonateCoins ? Constants.MaxNumberOfDonateCoins @@ -450,13 +450,13 @@ private int GetNeedDonateCoins(out int alreadyCoins, out int targetCoins) private Tuple GetRandomVideoForWatch() { - List list = this.GetRandomVideosOfUps(); + List list = GetRandomVideosOfUps(); if (list.Count > 0) return Tuple.Create(list.First().Aid.ToString(), list.First().Title); - return this.RegionRanking(); + return RegionRanking(); } #endregion private } -} +} \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs b/src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs index 48a2f03..624ebf7 100644 --- a/src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs +++ b/src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs @@ -23,10 +23,10 @@ public VipPrivilegeDomainService(ILogger logger, IOptionsMonitor biliBiliCookieOptions, IOptionsMonitor dailyTaskOptions) { - this._logger = logger; - this._dailyTaskApi = dailyTaskApi; - this._dailyTaskOptions = dailyTaskOptions.CurrentValue; - this._biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; + _logger = logger; + _dailyTaskApi = dailyTaskApi; + _dailyTaskOptions = dailyTaskOptions.CurrentValue; + _biliBiliCookieOptions = biliBiliCookieOptions.CurrentValue; } /// @@ -35,19 +35,19 @@ public VipPrivilegeDomainService(ILogger logger, /// public void ReceiveVipPrivilege(UseInfo useInfo) { - if (this._dailyTaskOptions.DayOfReceiveVipPrivilege == 0) + if (_dailyTaskOptions.DayOfReceiveVipPrivilege == 0) { - this._logger.LogInformation("已配置为不进行自动领取会员权益,跳过领取任务"); + _logger.LogInformation("已配置为不进行自动领取会员权益,跳过领取任务"); return; } - int targetDay = this._dailyTaskOptions.DayOfReceiveVipPrivilege == -1 + int targetDay = _dailyTaskOptions.DayOfReceiveVipPrivilege == -1 ? 1 - : this._dailyTaskOptions.DayOfReceiveVipPrivilege; + : _dailyTaskOptions.DayOfReceiveVipPrivilege; if (DateTime.Today.Day != targetDay) { - this._logger.LogInformation("目标领取日期为{targetDay}号,今天是{day}号,跳过领取任务", targetDay, DateTime.Today.Day); + _logger.LogInformation("目标领取日期为{targetDay}号,今天是{day}号,跳过领取任务", targetDay, DateTime.Today.Day); return; } @@ -56,12 +56,12 @@ public void ReceiveVipPrivilege(UseInfo useInfo) if (vipType == 2) { - this.ReceiveVipPrivilege(1); - this.ReceiveVipPrivilege(2); + ReceiveVipPrivilege(1); + ReceiveVipPrivilege(2); } else { - this._logger.LogInformation("普通会员和月度大会员每月不赠送B币券,所以不需要领取权益喽"); + _logger.LogInformation("普通会员和月度大会员每月不赠送B币券,所以不需要领取权益喽"); } } diff --git a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs index 9cdcdb8..1dca23b 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs +++ b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs @@ -22,11 +22,11 @@ static JsonSerializerOptionsBuilder() /// public static JsonSerializerOptions DefaultOptions; - public List> buildActionList; + public List> BuildActionList { get; } private JsonSerializerOptionsBuilder() { - this.buildActionList = new List>(); + BuildActionList = new List>(); } public static JsonSerializerOptionsBuilder Create() @@ -38,7 +38,7 @@ public JsonSerializerOptions Build() { JsonSerializerOptions options = new();//这里没有使用 JsonSerializerDefaults.General 避免后续版本更新后设置改变 - foreach (Action item in this.buildActionList) + foreach (Action item in BuildActionList) { item?.Invoke(options); } diff --git a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs index 4dac523..461e181 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs +++ b/src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtesions.cs @@ -14,7 +14,7 @@ private static JsonSerializerOptionsBuilder SetActionBase( { builder.CheckNullWithException(nameof(builder)); action.CheckNullWithException(nameof(action)); - builder.buildActionList.Add(action); + builder.BuildActionList.Add(action); return builder; } diff --git a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj index a0a34e8..9116b35 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj +++ b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj @@ -2,7 +2,6 @@ net5.0 - diff --git a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj index 095e5c2..e86e4e4 100644 --- a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj +++ b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + net5.0 From 074efc0c14430cdd5f022ae95deb9e3501c8879c Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Thu, 10 Dec 2020 10:36:41 +0800 Subject: [PATCH 20/21] =?UTF-8?q?=E5=BF=BD=E7=95=A5appsettings.PRD.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 80ad371..7184bed 100644 --- a/.gitignore +++ b/.gitignore @@ -357,3 +357,5 @@ MigrationBackup/ .idea/ /src/Ray.BiliBiliTool.Console/Properties/launchSettings.json +/src/Ray.BiliBiliTool.Console/appsettings.PRD.json + From 92d99e7c41a0f8a251eaf14b04a6c2715c1737d3 Mon Sep 17 00:00:00 2001 From: hjkl950217 <584880422@qq.com> Date: Thu, 10 Dec 2020 14:42:10 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E5=88=A0=E9=99=A4Uitl=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ray.BiliBiliTool.sln | 19 ++++++------------- .../Ray.BiliBiliTool.Config.csproj | 1 - .../Extensions/DateTimeExtension.cs | 0 .../Extensions/IDictionaryExtensions.cs | 0 .../Extensions/KeyValuePairExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 0 .../Extensions/StringExtensions.cs | 0 .../Extensions/TypeExtensions.cs | 0 .../Ray.BiliBiliTool.Infrastructure.csproj | 5 +---- .../Ray.BiliBiliTool.Util.csproj | 10 ---------- .../InfrastructureTest.csproj} | 0 .../UnitTest1.cs | 0 12 files changed, 7 insertions(+), 28 deletions(-) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/DateTimeExtension.cs (100%) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/IDictionaryExtensions.cs (100%) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/KeyValuePairExtensions.cs (100%) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/ObjectExtensions.cs (100%) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/StringExtensions.cs (100%) rename src/{Ray.BiliBiliTool.Util => Ray.BiliBiliTool.Infrastructure}/Extensions/TypeExtensions.cs (100%) delete mode 100644 src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj rename test/{UtilTest/UtilTest.csproj => InfrastructureTest/InfrastructureTest.csproj} (100%) rename test/{UtilTest => InfrastructureTest}/UnitTest1.cs (100%) diff --git a/Ray.BiliBiliTool.sln b/Ray.BiliBiliTool.sln index fdac25d..e9d82b9 100644 --- a/Ray.BiliBiliTool.sln +++ b/Ray.BiliBiliTool.sln @@ -44,9 +44,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Util", "src\Ray.BiliBiliTool.Util\Ray.BiliBiliTool.Util.csproj", "{B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UtilTest", "test\UtilTest\UtilTest.csproj", "{6A7B2E22-387E-41FB-BE5B-0252129683D9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InfrastructureTest", "test\InfrastructureTest\InfrastructureTest.csproj", "{AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -102,14 +100,10 @@ Global {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Debug|Any CPU.Build.0 = Debug|Any CPU {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F}.Release|Any CPU.Build.0 = Release|Any CPU - {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00}.Release|Any CPU.Build.0 = Release|Any CPU - {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A7B2E22-387E-41FB-BE5B-0252129683D9}.Release|Any CPU.Build.0 = Release|Any CPU + {AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -131,8 +125,7 @@ Global {191C48BD-5CB5-42CA-B394-7A4A9BFA6275} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D} {7105652A-B1C1-4F9E-BA38-8034BC8B26B4} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D} {ECEEFE3F-F39F-44EE-8FA2-D5CDBB25397F} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} - {B6FEA041-F3EA-4F16-BFFE-8005EFA05E00} = {110D3D21-8E9B-45AB-9667-6DA1DB3862AC} - {6A7B2E22-387E-41FB-BE5B-0252129683D9} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} + {AE6A5DBE-E9EA-49C1-AB6C-7F01B2F19A8B} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {197319DA-1148-4A99-847C-8B270B6A29AB} diff --git a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj index 9467385..69e4ac8 100644 --- a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj +++ b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj @@ -15,7 +15,6 @@ - diff --git a/src/Ray.BiliBiliTool.Util/Extensions/DateTimeExtension.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/DateTimeExtension.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/DateTimeExtension.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/DateTimeExtension.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/IDictionaryExtensions.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/IDictionaryExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/IDictionaryExtensions.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/IDictionaryExtensions.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/KeyValuePairExtensions.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/KeyValuePairExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/KeyValuePairExtensions.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/KeyValuePairExtensions.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/ObjectExtensions.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/ObjectExtensions.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/StringExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/StringExtensions.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/StringExtensions.cs diff --git a/src/Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs b/src/Ray.BiliBiliTool.Infrastructure/Extensions/TypeExtensions.cs similarity index 100% rename from src/Ray.BiliBiliTool.Util/Extensions/TypeExtensions.cs rename to src/Ray.BiliBiliTool.Infrastructure/Extensions/TypeExtensions.cs diff --git a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj index 9116b35..c2dd779 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj +++ b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj @@ -7,9 +7,6 @@ - - - - + \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj b/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj deleted file mode 100644 index e86e4e4..0000000 --- a/src/Ray.BiliBiliTool.Util/Ray.BiliBiliTool.Util.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - - net5.0 - - - - - - \ No newline at end of file diff --git a/test/UtilTest/UtilTest.csproj b/test/InfrastructureTest/InfrastructureTest.csproj similarity index 100% rename from test/UtilTest/UtilTest.csproj rename to test/InfrastructureTest/InfrastructureTest.csproj diff --git a/test/UtilTest/UnitTest1.cs b/test/InfrastructureTest/UnitTest1.cs similarity index 100% rename from test/UtilTest/UnitTest1.cs rename to test/InfrastructureTest/UnitTest1.cs