From 1e03077dc73605450ae5f52abf57ca0c7d0604c6 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Thu, 25 Aug 2022 20:38:37 +0200 Subject: [PATCH] Implement local response of Fail/AlreadyPurchases for addlicense --- ArchiSteamFarm/Steam/Interaction/Commands.cs | 16 +++++++++++++++- ArchiSteamFarm/Storage/GlobalDatabase.cs | 6 +++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/ArchiSteamFarm/Steam/Interaction/Commands.cs b/ArchiSteamFarm/Steam/Interaction/Commands.cs index e101f6fb2..a5238ff02 100644 --- a/ArchiSteamFarm/Steam/Interaction/Commands.cs +++ b/ArchiSteamFarm/Steam/Interaction/Commands.cs @@ -649,6 +649,14 @@ public sealed class Commands { switch (type.ToUpperInvariant()) { case "A" or "APP": + HashSet? packageIDs = ASF.GlobalDatabase?.GetPackageIDs(gameID, Bot.OwnedPackageIDs.Keys, 1); + + if (packageIDs is { Count: > 0 }) { + response.AppendLine(FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotAddLicense, $"app/{gameID}", $"{EResult.Fail}/{EPurchaseResultDetail.AlreadyPurchased}"))); + + break; + } + SteamApps.FreeLicenseCallback callback; try { @@ -664,6 +672,12 @@ public sealed class Commands { break; default: + if (Bot.OwnedPackageIDs.ContainsKey(gameID)) { + response.AppendLine(FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotAddLicense, $"sub/{gameID}", $"{EResult.Fail}/{EPurchaseResultDetail.AlreadyPurchased}"))); + + break; + } + (EResult result, EPurchaseResultDetail purchaseResult) = await Bot.ArchiWebHandler.AddFreeLicense(gameID).ConfigureAwait(false); response.AppendLine(FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotAddLicense, $"sub/{gameID}", $"{result}/{purchaseResult}"))); @@ -1938,7 +1952,7 @@ public sealed class Commands { switch (type.ToUpperInvariant()) { case "A" or "APP" when uint.TryParse(game, out uint appID) && (appID > 0): - HashSet? packageIDs = ASF.GlobalDatabase?.GetPackageIDs(appID, Bot.OwnedPackageIDs.Keys); + HashSet? packageIDs = ASF.GlobalDatabase?.GetPackageIDs(appID, Bot.OwnedPackageIDs.Keys, 1); if (packageIDs?.Count > 0) { if ((gamesOwned != null) && gamesOwned.TryGetValue(appID, out string? cachedGameName)) { diff --git a/ArchiSteamFarm/Storage/GlobalDatabase.cs b/ArchiSteamFarm/Storage/GlobalDatabase.cs index ae6455091..e378950e6 100644 --- a/ArchiSteamFarm/Storage/GlobalDatabase.cs +++ b/ArchiSteamFarm/Storage/GlobalDatabase.cs @@ -236,7 +236,7 @@ public sealed class GlobalDatabase : SerializableFile { return globalDatabase; } - internal HashSet GetPackageIDs(uint appID, IEnumerable packageIDs) { + internal HashSet GetPackageIDs(uint appID, IEnumerable packageIDs, int limit = int.MaxValue) { if (appID == 0) { throw new ArgumentOutOfRangeException(nameof(appID)); } @@ -251,6 +251,10 @@ public sealed class GlobalDatabase : SerializableFile { } result.Add(packageID); + + if (result.Count >= limit) { + return result; + } } return result;