From 176c26df51deac52729ebddebf2ca540c7d4025d Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Fri, 1 Dec 2023 10:43:06 +0800 Subject: [PATCH] sign-in endpoints --- .../Snap.Hutao/View/Page/TestPage.xaml | 65 +++++++++------- .../DailyNote/DailyNoteWebViewerSource.cs | 2 +- src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs | 77 ++++++++----------- .../Web/Hoyolab/PlayerUidExtension.cs | 11 ++- .../Takumi/Event/BbsSignReward/Award.cs | 2 +- .../Takumi/Event/BbsSignReward/ExtraAward.cs | 13 ++++ .../Event/BbsSignReward/ExtraAwardInfo.cs | 22 ++++++ .../Takumi/Event/BbsSignReward/Reward.cs | 6 ++ .../Event/BbsSignReward/ShortActInfo.cs | 21 +++++ .../Event/BbsSignReward/ShortExtraAward.cs | 27 +++++++ .../Event/BbsSignReward/SignInClient.cs | 37 +++++++-- .../Takumi/Event/BbsSignReward/SignInData.cs | 2 +- .../Event/BbsSignReward/SignInResult.cs | 21 +---- .../Event/BbsSignReward/SignInRewardInfo.cs | 30 +------- .../Request/NameValueCollectionExtension.cs | 2 +- 15 files changed, 207 insertions(+), 131 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAward.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAwardInfo.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortActInfo.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortExtraAward.cs diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/TestPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/TestPage.xaml index fd034633..0ab1ee34 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/TestPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/TestPage.xaml @@ -24,20 +24,15 @@ - - - - - - - - - - - + + + + + + @@ -50,22 +45,34 @@ - - - - - - - - - - + Placement="Full"> + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/DailyNote/DailyNoteWebViewerSource.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/DailyNote/DailyNoteWebViewerSource.cs index 4207da74..623a92c7 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/DailyNote/DailyNoteWebViewerSource.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/DailyNote/DailyNoteWebViewerSource.cs @@ -18,7 +18,7 @@ internal sealed class DailyNoteWebViewerSource : IWebViewerSource public string GetSource(UserAndUid userAndUid) { - string query = userAndUid.Uid.ToQueryString(); + string query = userAndUid.Uid.ToRoleIdServerQueryString(); return $"https://webstatic.mihoyo.com/app/community-game-records/index.html?bbs_presentation_style=fullscreen#/ys/daily/?{query}"; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs index 038eeed5..64ffdee8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs @@ -144,49 +144,6 @@ internal static class ApiEndpoints } #endregion - #region ApiTakumiEventBbsSignReward - - /// - /// 签到活动Id - /// - public const string SignInRewardActivityId = "e202009291139501"; - - /// - /// 签到 - /// - public const string SignInRewardHome = $"{ApiTakumi}/event/bbs_sign_reward/home?act_id={SignInRewardActivityId}"; - - /// - /// 签到 - /// - public const string SignInRewardSign = $"{ApiTakumi}/event/bbs_sign_reward/sign"; - - /// - /// 补签 - /// - public const string SignInRewardReSign = $"{ApiTakumi}/event/bbs_sign_reward/resign"; - - /// - /// 补签信息 - /// - /// uid - /// 补签信息字符串 - public static string SignInRewardResignInfo(in PlayerUid uid) - { - return $"{ApiTakumi}/event/bbs_sign_reward/resign_info?act_id={SignInRewardActivityId}®ion={uid.Region}&uid={uid.Value}"; - } - - /// - /// 签到信息 - /// - /// uid - /// 签到信息字符串 - public static string SignInRewardInfo(in PlayerUid uid) - { - return $"{ApiTakumi}/event/bbs_sign_reward/info?act_id={SignInRewardActivityId}®ion={uid.Region}&uid={uid.Value}"; - } - #endregion - #region ApiTakumiEventCalculate /// @@ -253,6 +210,34 @@ internal static class ApiEndpoints public const string CalculateWeaponList = $"{ApiTakumiEventCalculate}/v1/weapon/list"; #endregion + #region ApiTakumiEventLuna + public const string LunaActivityId = "e202311201442471"; + + public static string LunaHome(string languageCode) + { + return $"{ApiTakumiEventLuna}/home?lang={languageCode}&act_id={LunaActivityId}"; + } + + public const string LunaSign = $"{ApiTakumiEventLuna}/sign"; + + public const string LunaReSign = $"{ApiTakumiEventLuna}/resign"; + + public static string LunaExtraAward(in PlayerUid uid, string languageCode) + { + return $"{ApiTakumiEventLuna}/home?act_id={LunaActivityId}&{uid.ToUidRegionQueryString()}&lang={languageCode}"; + } + + public static string LunaResignInfo(in PlayerUid uid) + { + return $"{ApiTakumiEventLuna}/resign_info?act_id={LunaActivityId}&{uid.ToUidRegionQueryString()}"; + } + + public static string LunaInfo(in PlayerUid uid, string languageCode) + { + return $"{ApiTakumiEventLuna}/info?lang={languageCode}&act_id={LunaActivityId}&{uid.ToUidRegionQueryString()}"; + } + #endregion + #region AppAuthApi /// @@ -382,16 +367,14 @@ internal static class ApiEndpoints private const string ApiTakumiEvent = $"{ApiTakumi}/event"; private const string ApiTakumiEventCalculate = $"{ApiTakumiEvent}/e20200928calculate"; + private const string ApiTakumiEventLuna = $"{ApiTakumiEvent}/luna"; private const string ApiTakumiRecord = "https://api-takumi-record.mihoyo.com"; private const string ApiTakumiRecordApi = $"{ApiTakumiRecord}/game_record/app/genshin/api"; private const string ApiTakumiRecordAapi = $"{ApiTakumiRecord}/game_record/app/genshin/aapi"; - /// - /// Referer: https://app.mihoyo.com - /// - public const string AppMihoyoReferer = "https://app.mihoyo.com"; private const string AppAuthApi = $"{AppMihoyoReferer}/account/auth/api"; + public const string AppMihoyoReferer = "https://app.mihoyo.com"; private const string BbsApi = "https://bbs-api.mihoyo.com"; private const string BbsApiUserApi = $"{BbsApi}/user/wapi"; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUidExtension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUidExtension.cs index ffabae36..538827a8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUidExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUidExtension.cs @@ -8,7 +8,7 @@ namespace Snap.Hutao.Web.Hoyolab; internal static class PlayerUidExtension { - public static string ToQueryString(this in PlayerUid playerUid) + public static string ToRoleIdServerQueryString(this in PlayerUid playerUid) { NameValueCollection collection = []; collection.Set("role_id", playerUid.Value); @@ -16,4 +16,13 @@ internal static class PlayerUidExtension return collection.ToQueryString(); } + + public static string ToUidRegionQueryString(this in PlayerUid playerUid) + { + NameValueCollection collection = []; + collection.Set("uid", playerUid.Value); + collection.Set("region", playerUid.Region); + + return collection.ToQueryString(); + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Award.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Award.cs index 255112da..dc7765d8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Award.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Award.cs @@ -6,7 +6,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; /// /// 奖励物品 /// -internal sealed class Award +internal class Award { /// /// 图标 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAward.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAward.cs new file mode 100644 index 00000000..00e3382d --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAward.cs @@ -0,0 +1,13 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; + +internal sealed class ExtraAward : Award +{ + [JsonPropertyName("id")] + public int Id { get; set; } + + [JsonPropertyName("sign_day")] + public int SignDay { get; set; } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAwardInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAwardInfo.cs new file mode 100644 index 00000000..c778128d --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ExtraAwardInfo.cs @@ -0,0 +1,22 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; + +internal sealed class ExtraAwardInfo +{ + [JsonPropertyName("awards")] + public List Awards { get; set; } = default!; + + [JsonPropertyName("total_cnt")] + public int TotalCount { get; set; } + + [JsonPropertyName("ys_first_award")] + public bool YsFirstAward { get; set; } + + [JsonPropertyName("has_short_act")] + public bool HasShortAct { get; set; } + + [JsonPropertyName("short_act_info")] + public ShortActInfo ShortActInfo { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Reward.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Reward.cs index 1fb9bd1d..12f49d4f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Reward.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/Reward.cs @@ -17,9 +17,15 @@ internal sealed class Reward [JsonPropertyName("awards")] public List Awards { get; set; } = default!; + [JsonPropertyName("biz")] + public string Biz { get; set; } = default!; + /// /// 支持补签 /// [JsonPropertyName("resign")] public bool Resign { get; set; } + + [JsonPropertyName("short_extra_award")] + public ShortExtraAward ShortExtraAward { get; set; } = default!; } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortActInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortActInfo.cs new file mode 100644 index 00000000..29a286e3 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortActInfo.cs @@ -0,0 +1,21 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; + +internal sealed class ShortActInfo +{ + [JsonPropertyName("awards")] + public List Awards { get; set; } = default!; + + [JsonPropertyName("start_timestamp")] + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public long StartTimestamp { get; set; } + + [JsonPropertyName("end_timestamp")] + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public long EndTimestamp { get; set; } + + [JsonPropertyName("total_cnt")] + public int TotalCount { get; set; } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortExtraAward.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortExtraAward.cs new file mode 100644 index 00000000..858a1de6 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/ShortExtraAward.cs @@ -0,0 +1,27 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; + +internal sealed class ShortExtraAward +{ + [JsonPropertyName("has_extra_award")] + public bool HasExtraAward { get; set; } + + [JsonPropertyName("start_time")] + public string StartTime { get; set; } = default!; + + [JsonPropertyName("end_time")] + public string EndTime { get; set; } = default!; + + [JsonPropertyName("list")] + public List List { get; set; } = default!; + + [JsonPropertyName("start_timestamp")] + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public long StartTimestamp { get; set; } = default!; + + [JsonPropertyName("end_timestamp")] + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public long EndTimestamp { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInClient.cs index 8095921c..33f5c9d1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInClient.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; +using Snap.Hutao.Service.Metadata; using Snap.Hutao.ViewModel.User; using Snap.Hutao.Web.Hoyolab.DataSigning; using Snap.Hutao.Web.Hutao.Geetest; @@ -22,14 +23,33 @@ internal sealed partial class SignInClient : ISignInClient { private readonly IHttpRequestMessageBuilderFactory httpRequestMessageBuilderFactory; private readonly HomaGeetestClient homaGeetestClient; + private readonly MetadataOptions metadataOptions; private readonly ILogger logger; private readonly HttpClient httpClient; + public async ValueTask> GetExtraAwardInfoAsync(UserAndUid userAndUid, CancellationToken token = default) + { + HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() + .SetRequestUri(ApiEndpoints.LunaExtraAward(userAndUid.Uid, metadataOptions.LanguageCode)) + .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") + .Get(); + + await builder.SignDataAsync(DataSignAlgorithmVersion.Gen1, SaltType.LK2, true).ConfigureAwait(false); + + Response? resp = await builder + .TryCatchSendAsync>(httpClient, logger, token) + .ConfigureAwait(false); + + return Response.Response.DefaultIfNull(resp); + } + public async ValueTask> GetInfoAsync(UserAndUid userAndUid, CancellationToken token = default) { HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardInfo(userAndUid.Uid)) + .SetRequestUri(ApiEndpoints.LunaInfo(userAndUid.Uid, metadataOptions.LanguageCode)) .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .Get(); await builder.SignDataAsync(DataSignAlgorithmVersion.Gen1, SaltType.LK2, true).ConfigureAwait(false); @@ -44,8 +64,9 @@ internal sealed partial class SignInClient : ISignInClient public async ValueTask> GetResignInfoAsync(UserAndUid userAndUid, CancellationToken token = default) { HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardResignInfo(userAndUid.Uid)) + .SetRequestUri(ApiEndpoints.LunaResignInfo(userAndUid.Uid)) .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .Get(); await builder.SignDataAsync(DataSignAlgorithmVersion.Gen1, SaltType.LK2, true).ConfigureAwait(false); @@ -60,8 +81,9 @@ internal sealed partial class SignInClient : ISignInClient public async ValueTask> GetRewardAsync(Model.Entity.User user, CancellationToken token = default) { HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardHome) + .SetRequestUri(ApiEndpoints.LunaHome(metadataOptions.LanguageCode)) .SetUserCookieAndFpHeader(user, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .Get(); Response? resp = await builder @@ -74,8 +96,9 @@ internal sealed partial class SignInClient : ISignInClient public async ValueTask> ReSignAsync(UserAndUid userAndUid, CancellationToken token = default) { HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardReSign) + .SetRequestUri(ApiEndpoints.LunaReSign) .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .PostJson(new SignInData(userAndUid.Uid, false)); await builder.SignDataAsync(DataSignAlgorithmVersion.Gen1, SaltType.LK2, true).ConfigureAwait(false); @@ -90,8 +113,9 @@ internal sealed partial class SignInClient : ISignInClient public async ValueTask> SignAsync(UserAndUid userAndUid, CancellationToken token = default) { HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardSign) + .SetRequestUri(ApiEndpoints.LunaSign) .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .PostJson(new SignInData(userAndUid.Uid, false)); await builder.SignDataAsync(DataSignAlgorithmVersion.Gen1, SaltType.LK2, true).ConfigureAwait(false); @@ -107,8 +131,9 @@ internal sealed partial class SignInClient : ISignInClient if (verifyResponse is { Code: 0, Data: { Validate: string validate, Challenge: string challenge } }) { HttpRequestMessageBuilder verifiedBuilder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(ApiEndpoints.SignInRewardSign) + .SetRequestUri(ApiEndpoints.LunaSign) .SetUserCookieAndFpHeader(userAndUid, CookieType.CookieToken) + .SetHeader("x-rpc-signgame", "hk4e") .SetXrpcChallenge(challenge, validate) .PostJson(new SignInData(userAndUid.Uid, false)); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs index 12714813..d3f5b4cd 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs @@ -16,7 +16,7 @@ internal sealed class SignInData [SuppressMessage("", "SH002")] public SignInData(PlayerUid uid, bool isOversea) { - ActivityId = isOversea ? ApiOsEndpoints.SignInRewardActivityId : ApiEndpoints.SignInRewardActivityId; + ActivityId = isOversea ? ApiOsEndpoints.SignInRewardActivityId : ApiEndpoints.LunaActivityId; Region = uid.Region; Uid = uid.Value; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInResult.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInResult.cs index 274be2c9..50920133 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInResult.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInResult.cs @@ -3,38 +3,23 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; -/// -/// 签到结果 -/// internal sealed class SignInResult { - /// - /// 通常是 "" - /// [JsonPropertyName("code")] public string Code { get; set; } = default!; - /// - /// 通常是 0 - /// [JsonPropertyName("risk_code")] public int RiskCode { get; set; } - /// - /// 通常是 "" - /// [JsonPropertyName("gt")] public string Gt { get; set; } = default!; - /// - /// 通常是 "" - /// [JsonPropertyName("challenge")] public string Challenge { get; set; } = default!; - /// - /// 通常是 "" - /// [JsonPropertyName("success")] public int Success { get; set; } + + [JsonPropertyName("is_risk")] + public bool IsRisk { get; set; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInRewardInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInRewardInfo.cs index b11ed1c1..2ee32a28 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInRewardInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInRewardInfo.cs @@ -3,14 +3,8 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.BbsSignReward; -/// -/// 签到信息 -/// internal sealed class SignInRewardInfo { - /// - /// 累积签到天数 - /// [JsonPropertyName("total_sign_day")] public int TotalSignDay { get; set; } @@ -20,33 +14,17 @@ internal sealed class SignInRewardInfo [JsonPropertyName("today")] public string? Today { get; set; } - /// - /// 今日是否已签到 - /// [JsonPropertyName("is_sign")] public bool IsSign { get; set; } - /// - /// ? - /// [JsonPropertyName("is_sub")] public bool IsSub { get; set; } - /// - /// 是否首次绑定 - /// - [JsonPropertyName("first_bind")] - public bool FirstBind { get; set; } + public string Region { get; set; } = default!; - /// - /// 是否为当月第一次 - /// - [JsonPropertyName("month_first")] - public bool MonthFirst { get; set; } - - /// - /// 漏签天数 - /// [JsonPropertyName("sign_cnt_missed")] public int SignCountMissed { get; set; } + + [JsonPropertyName("short_sign_day")] + public int ShortSignDay { get; set; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Request/NameValueCollectionExtension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Request/NameValueCollectionExtension.cs index 660a28c0..8375b0ef 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Request/NameValueCollectionExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Request/NameValueCollectionExtension.cs @@ -24,7 +24,7 @@ internal static class NameValueCollectionExtension string? key = keys[i]; if (collection.GetValues(key) is { } values) { - foreach (string value in values) + foreach (ref readonly string value in values.AsSpan()) { if (!string.IsNullOrEmpty(key)) {