From fce12a9565d34247970256aa5ae8f3c200ff27c6 Mon Sep 17 00:00:00 2001 From: Chr_ Date: Thu, 14 Sep 2023 09:59:35 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=96=B0=E5=A2=9E=20`CLAIM20TH`=20?= =?UTF-8?q?=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ASFEnhance/ASFEnhance.cs | 8 +++ ASFEnhance/Account/Command.cs | 18 ++--- ASFEnhance/Event/Command.cs | 62 +++++++++++++++-- ASFEnhance/Event/WebRequest.cs | 34 +++++++-- ASFEnhance/Localization/Langs.Designer.cs | 81 ++++++++++++++++++++++ ASFEnhance/Localization/Langs.en-US.resx | 27 ++++++++ ASFEnhance/Localization/Langs.resx | 27 ++++++++ ASFEnhance/Localization/Langs.ru-RU.resx | 27 ++++++++ ASFEnhance/Localization/Langs.zh-Hans.resx | 30 ++++++++ Directory.Build.props | 2 +- 10 files changed, 292 insertions(+), 24 deletions(-) diff --git a/ASFEnhance/ASFEnhance.cs b/ASFEnhance/ASFEnhance.cs index c96080f5..fdfb9503 100644 --- a/ASFEnhance/ASFEnhance.cs +++ b/ASFEnhance/ASFEnhance.cs @@ -215,6 +215,10 @@ public Task OnLoaded() case "CI" when access >= EAccess.Operator: return await Event.Command.ResponseClaimItem(bot).ConfigureAwait(false); + case "CLAIM20TH" when access >= EAccess.Operator: + case "C20" when access >= EAccess.Operator: + return await Event.Command.ResponseClaim20Th(bot).ConfigureAwait(false); + //Shortcut case "P": return await bot.Commands.Response(access, "POINTS", steamId).ConfigureAwait(false); @@ -431,6 +435,10 @@ public Task OnLoaded() case "CI" when access >= EAccess.Operator: return await Event.Command.ResponseClaimItem(Utilities.GetArgsAsText(args, 1, ",")).ConfigureAwait(false); + case "CLAIM20TH" when access >= EAccess.Operator: + case "C20" when access >= EAccess.Operator: + return await Event.Command.ResponseClaim20Th(Utilities.GetArgsAsText(args, 1, ",")).ConfigureAwait(false); + //Shortcut case "AL": return await bot.Commands.Response(access, "ADDLICENSE " + Utilities.GetArgsAsText(message, 1), steamId).ConfigureAwait(false); diff --git a/ASFEnhance/Account/Command.cs b/ASFEnhance/Account/Command.cs index 04db809d..b332ca39 100644 --- a/ASFEnhance/Account/Command.cs +++ b/ASFEnhance/Account/Command.cs @@ -729,7 +729,7 @@ private static string NotificationTargetToString(NotificationTarget target) if (string.IsNullOrEmpty(apiKey)) { - return bot.FormatBotResponse("网络错误"); + return bot.FormatBotResponse(Langs.NetworkError); } var result = await WebRequest.GetPlayerBans(bot, apiKey, steamId ?? bot.SteamID).ConfigureAwait(false); @@ -741,7 +741,7 @@ private static string NotificationTargetToString(NotificationTarget target) if (result.Players?.Any() != true) { - return bot.FormatBotResponse("未查询到封禁信息"); + return bot.FormatBotResponse(Langs.NoUserFound); } var sb = new StringBuilder(); @@ -749,23 +749,23 @@ private static string NotificationTargetToString(NotificationTarget target) var player = result.Players.First(); - sb.AppendLine(string.Format("SteamId: {0}", player.SteamId)); - sb.AppendLine(string.Format("社区封禁: {0}", Bool2Str(player.CommunityBanned))); - sb.AppendLine(string.Format("市场封禁: {0}", player.EconomyBan == "none" ? "×" : player.EconomyBan)); - sb.Append(string.Format("VAC封禁: {0}", Bool2Str(player.VACBanned))); + sb.AppendLine(string.Format(Langs.BanSteamId, player.SteamId)); + sb.AppendLine(string.Format(Langs.BanCommunity, Bool2Str(player.CommunityBanned))); + sb.AppendLine(string.Format(Langs.BanEconomy, player.EconomyBan == "none" ? "×" : player.EconomyBan)); + sb.Append(string.Format(Langs.BanVAC, Bool2Str(player.VACBanned))); if (player.VACBanned) { - sb.AppendLine(string.Format(" {0} bans, {1} days since last ban", player.NumberOfVACBans, player.DaysSinceLastBan)); + sb.AppendLine(string.Format(Langs.BanVACCount, player.NumberOfVACBans, player.DaysSinceLastBan)); } else { sb.AppendLine(); } var gameban = player.NumberOfGameBans > 0; - sb.Append(string.Format("游戏封禁: {0}", Bool2Str(gameban))); + sb.Append(string.Format(Langs.BanGame, Bool2Str(gameban))); if (gameban) { - sb.AppendLine(string.Format(" {0} bans", player.NumberOfGameBans)); + sb.AppendLine(string.Format(Langs.BanGameCount, player.NumberOfGameBans)); } else { diff --git a/ASFEnhance/Event/Command.cs b/ASFEnhance/Event/Command.cs index 3797dcf9..ea065921 100644 --- a/ASFEnhance/Event/Command.cs +++ b/ASFEnhance/Event/Command.cs @@ -47,7 +47,7 @@ internal static class Command throw new ArgumentNullException(nameof(botNames)); } - HashSet? bots = Bot.GetBots(botNames); + var bots = Bot.GetBots(botNames); if ((bots == null) || (bots.Count == 0)) { @@ -102,7 +102,7 @@ internal static class Command throw new ArgumentNullException(nameof(botNames)); } - HashSet? bots = Bot.GetBots(botNames); + var bots = Bot.GetBots(botNames); if ((bots == null) || (bots.Count == 0)) { @@ -170,7 +170,7 @@ internal static class Command throw new ArgumentNullException(nameof(botNames)); } - HashSet? bots = Bot.GetBots(botNames); + var bots = Bot.GetBots(botNames); if ((bots == null) || (bots.Count == 0)) { @@ -239,7 +239,7 @@ internal static class Command throw new ArgumentNullException(nameof(botNames)); } - HashSet? bots = Bot.GetBots(botNames); + var bots = Bot.GetBots(botNames); if ((bots == null) || (bots.Count == 0)) { @@ -272,8 +272,6 @@ internal static class Command return bot.FormatBotResponse(Langs.NetworkError); } - ASFLogger.LogGenericInfo(token); - await WebRequest.ClaimDailySticker(bot, token).ConfigureAwait(false); return bot.FormatBotResponse(Langs.Done); @@ -292,7 +290,7 @@ internal static class Command throw new ArgumentNullException(nameof(botNames)); } - HashSet? bots = Bot.GetBots(botNames); + var bots = Bot.GetBots(botNames); if ((bots == null) || (bots.Count == 0)) { @@ -305,4 +303,54 @@ internal static class Command return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null; } + + + internal static async Task ResponseClaim20Th(Bot bot) + { + if (!bot.IsConnectedAndLoggedOn) + { + return bot.FormatBotResponse(Strings.BotNotConnected); + } + + var (_, token) = await bot.ArchiWebHandler.CachedAccessToken.GetValue().ConfigureAwait(false); + + if (string.IsNullOrEmpty(token)) + { + return bot.FormatBotResponse(Langs.NetworkError); + } + + var defIds = new List { 241812, 241811, 241810, 241809, 241807, 241808 }; + + var results = await Utilities.InParallel(defIds.Select(id => WebRequest.RedeenPointShopItem(bot, token, id))).ConfigureAwait(false); + + var count = 0; + foreach (var result in results) + { + if (result) count++; + } + + return bot.FormatBotResponse(string.Format(Langs.SendRequestSuccess, count)); + } + + + internal static async Task ResponseClaim20Th(string botNames) + { + if (string.IsNullOrEmpty(botNames)) + { + throw new ArgumentNullException(nameof(botNames)); + } + + var bots = Bot.GetBots(botNames); + + if ((bots == null) || (bots.Count == 0)) + { + return FormatStaticResponse(string.Format(Strings.BotNotFound, botNames)); + } + + IList results = await Utilities.InParallel(bots.Select(bot => ResponseClaim20Th(bot))).ConfigureAwait(false); + + List responses = new(results.Where(result => !string.IsNullOrEmpty(result))!); + + return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null; + } } diff --git a/ASFEnhance/Event/WebRequest.cs b/ASFEnhance/Event/WebRequest.cs index 18bae028..85d989fd 100644 --- a/ASFEnhance/Event/WebRequest.cs +++ b/ASFEnhance/Event/WebRequest.cs @@ -1,6 +1,7 @@ using AngleSharp.Dom; using ArchiSteamFarm.Steam; using ArchiSteamFarm.Steam.Integration; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace ASFEnhance.Event; @@ -15,9 +16,9 @@ internal static class WebRequest /// internal static async Task DoEventTask(Bot bot, string clan_accountid, uint door_index) { - Uri request = new(SteamStoreURL, "/saleaction/ajaxopendoor"); + var request = new Uri(SteamStoreURL, "/saleaction/ajaxopendoor"); - Dictionary data = new(3) { + var data = new Dictionary(3) { {"door_index", door_index.ToString()}, {"clan_accountid", clan_accountid}, }; @@ -33,7 +34,7 @@ internal static async Task DoEventTask(Bot bot, string clan_accountid, uint door /// internal static async Task FetchEventToken(Bot bot, string salePage) { - Uri request = new(SteamStoreURL, $"/sale/{salePage}"); + var request = new Uri(SteamStoreURL, $"/sale/{salePage}"); var response = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession(request).ConfigureAwait(false); @@ -58,7 +59,7 @@ internal static async Task DoEventTask(Bot bot, string clan_accountid, uint door /// internal static async Task FetchEventToken(Bot bot, string developer, string salePage) { - Uri request = new(SteamStoreURL, $"/developer/{developer}/sale/{salePage}"); + var request = new Uri(SteamStoreURL, $"/developer/{developer}/sale/{salePage}"); var response = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession(request).ConfigureAwait(false); @@ -81,7 +82,7 @@ internal static async Task DoEventTask(Bot bot, string clan_accountid, uint door /// internal static async Task FetchToken(Bot bot) { - Uri request = new(SteamStoreURL, "/category/sports"); + var request = new Uri(SteamStoreURL, "/category/sports"); var response = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession(request, referer: request).ConfigureAwait(false); @@ -105,11 +106,30 @@ internal static async Task DoEventTask(Bot bot, string clan_accountid, uint door /// internal static async Task ClaimDailySticker(Bot bot, string token) { - Uri request = new($"https://api.steampowered.com/ISaleItemRewardsService/ClaimItem/v1?access_token={token}"); - Uri referer = new(SteamStoreURL, "/sale/16212626125"); + var request = new Uri(SteamApiURL, $"/ISaleItemRewardsService/ClaimItem/v1?access_token={token}"); + var referer = new Uri(SteamStoreURL, "/sale/16212626125"); await bot.ArchiWebHandler.UrlPostWithSession(request, referer: referer, session: ArchiWebHandler.ESession.None).ConfigureAwait(false); return true; } + + /// + /// 领取点数商店物品 + /// + /// + /// + /// + internal static async Task RedeenPointShopItem(Bot bot, string token, int defId) + { + var request = new Uri(SteamApiURL, $"/ILoyaltyRewardsService/RedeemPoints/v1?access_token={token}"); + + var data = new Dictionary(1) { + {"defId", defId.ToString()}, + }; + + var result = await bot.ArchiWebHandler.UrlPostWithSession(request, referer: SteamStoreURL, data: data, session: ArchiWebHandler.ESession.None).ConfigureAwait(false); + + return result; + } } diff --git a/ASFEnhance/Localization/Langs.Designer.cs b/ASFEnhance/Localization/Langs.Designer.cs index b2c63bc3..281d4799 100644 --- a/ASFEnhance/Localization/Langs.Designer.cs +++ b/ASFEnhance/Localization/Langs.Designer.cs @@ -555,6 +555,69 @@ internal static string AvailableAreaHeader { } } + /// + /// 查找类似 社区封禁: {0} 的本地化字符串。 + /// + internal static string BanCommunity { + get { + return ResourceManager.GetString("BanCommunity", resourceCulture); + } + } + + /// + /// 查找类似 市场封禁: {0} 的本地化字符串。 + /// + internal static string BanEconomy { + get { + return ResourceManager.GetString("BanEconomy", resourceCulture); + } + } + + /// + /// 查找类似 游戏封禁: {0} 的本地化字符串。 + /// + internal static string BanGame { + get { + return ResourceManager.GetString("BanGame", resourceCulture); + } + } + + /// + /// 查找类似 {0} 个封禁 的本地化字符串。 + /// + internal static string BanGameCount { + get { + return ResourceManager.GetString("BanGameCount", resourceCulture); + } + } + + /// + /// 查找类似 SteamId: {0} 的本地化字符串。 + /// + internal static string BanSteamId { + get { + return ResourceManager.GetString("BanSteamId", resourceCulture); + } + } + + /// + /// 查找类似 VAC封禁: {0} 的本地化字符串。 + /// + internal static string BanVAC { + get { + return ResourceManager.GetString("BanVAC", resourceCulture); + } + } + + /// + /// 查找类似 {0} 个封禁, 最后封禁于 {1} 天前 的本地化字符串。 + /// + internal static string BanVACCount { + get { + return ResourceManager.GetString("BanVACCount", resourceCulture); + } + } + /// /// 查找类似 无法添加自己为好友 的本地化字符串。 /// @@ -1437,6 +1500,15 @@ internal static string NotFollowAnyCurator { } } + /// + /// 查找类似 未查询到用户信息 的本地化字符串。 + /// + internal static string NoUserFound { + get { + return ResourceManager.GetString("NoUserFound", resourceCulture); + } + } + /// /// 查找类似 , 客户端通知, 手机应用通知 的本地化字符串。 /// @@ -2067,6 +2139,15 @@ internal static string SendFriendRequestSuccess { } } + /// + /// 查找类似 成功发送 {0} 个请求 的本地化字符串。 + /// + internal static string SendRequestSuccess { + get { + return ResourceManager.GetString("SendRequestSuccess", resourceCulture); + } + } + /// /// 查找类似 结算货币设置: {0} 的本地化字符串。 /// diff --git a/ASFEnhance/Localization/Langs.en-US.resx b/ASFEnhance/Localization/Langs.en-US.resx index 01bcd358..0979d3fc 100644 --- a/ASFEnhance/Localization/Langs.en-US.resx +++ b/ASFEnhance/Localization/Langs.en-US.resx @@ -1047,4 +1047,31 @@ , Push notification in the Mobile App + + SteamId: {0} + + + {0} bans, last banned since {1} days + + + VAC banned: {0} + + + {0} bans + + + Game banned: {0} + + + Economy banned: {0} + + + Community banned: {0} + + + No user data found + + + Send {0} requests successful + \ No newline at end of file diff --git a/ASFEnhance/Localization/Langs.resx b/ASFEnhance/Localization/Langs.resx index d8a60874..a5235ec0 100644 --- a/ASFEnhance/Localization/Langs.resx +++ b/ASFEnhance/Localization/Langs.resx @@ -1047,4 +1047,31 @@ , 客户端通知, 手机应用通知 + + 成功发送 {0} 个请求 + + + 未查询到用户信息 + + + SteamId: {0} + + + 社区封禁: {0} + + + VAC封禁: {0} + + + 市场封禁: {0} + + + {0} 个封禁, 最后封禁于 {1} 天前 + + + 游戏封禁: {0} + + + {0} 个封禁 + \ No newline at end of file diff --git a/ASFEnhance/Localization/Langs.ru-RU.resx b/ASFEnhance/Localization/Langs.ru-RU.resx index de9fba8b..d4ebea88 100644 --- a/ASFEnhance/Localization/Langs.ru-RU.resx +++ b/ASFEnhance/Localization/Langs.ru-RU.resx @@ -1047,4 +1047,31 @@ , Всплывающее уведомление в клиенте Steam, Push-уведомление в мобильном приложении + + SteamId: {0} + + + {0} bans, last banned since {1} days + + + VAC banned: {0} + + + {0} bans + + + Game banned: {0} + + + Economy banned: {0} + + + Community banned: {0} + + + No user data found + + + Send {0} requests successful + \ No newline at end of file diff --git a/ASFEnhance/Localization/Langs.zh-Hans.resx b/ASFEnhance/Localization/Langs.zh-Hans.resx index 1865e2eb..c1f06fbc 100644 --- a/ASFEnhance/Localization/Langs.zh-Hans.resx +++ b/ASFEnhance/Localization/Langs.zh-Hans.resx @@ -1044,4 +1044,34 @@ , 客户端通知 + + 社区封禁: {0} + + + 市场封禁: {0} + + + 游戏封禁: {0} + + + {0} 个封禁 + + + SteamId: {0} + + + VAC封禁: {0} + + + {0} 个封禁, 最后封禁于 {1} 天前 + + + 未查询到用户信息 + + + , 手机应用通知 + + + 成功发送 {0} 个请求 + \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 465ae1b2..a2f8ef20 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 1.8.10.0 + 1.8.11.0