diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 79cf80a98..6c733c9fe 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -290,6 +290,33 @@ namespace ArchiSteamFarm { return result; } + internal async Task AddFreeLicense(uint subID) { + if (subID == 0) { + Bot.ArchiLogger.LogNullError(nameof(subID)); + return false; + } + + if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) { + return false; + } + + string sessionID = WebBrowser.CookieContainer.GetCookieValue(SteamCommunityURL, "sessionid"); + if (string.IsNullOrEmpty(sessionID)) { + Bot.ArchiLogger.LogNullError(nameof(sessionID)); + return false; + } + + string request = SteamStoreURL + "/checkout/addfreelicense"; + Dictionary data = new Dictionary(3) { + { "sessionid", sessionID }, + { "subid", subID.ToString() }, + { "action", "add_to_cart" } + }; + + HtmlDocument htmlDocument = await WebBrowser.UrlPostToHtmlDocumentRetry(request, data).ConfigureAwait(false); + return htmlDocument?.DocumentNode.SelectSingleNode("//div[@class='add_free_content_success_area']") != null; + } + internal async Task JoinGroup(ulong groupID) { if (groupID == 0) { Bot.ArchiLogger.LogNullError(nameof(groupID)); diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index c441a2f07..2df5ed3c4 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -1455,7 +1455,13 @@ namespace ArchiSteamFarm { break; } - result.AppendLine(Environment.NewLine + "Result: " + callback.Result + " | Granted apps: " + string.Join(", ", callback.GrantedApps) + " " + string.Join(", ", callback.GrantedPackages)); + if ((callback.GrantedApps.Count != 0) || (callback.GrantedPackages.Count != 0)) { + result.AppendLine(Environment.NewLine + "Result: " + callback.Result + " | Granted apps:" + (callback.GrantedApps.Count != 0 ? " " + string.Join(", ", callback.GrantedApps) : "") + (callback.GrantedPackages.Count != 0 ? " " + string.Join(", ", callback.GrantedPackages) : "")); + } else if (await ArchiWebHandler.AddFreeLicense(gameID).ConfigureAwait(false)) { + result.AppendLine(Environment.NewLine + "Result: " + EResult.OK + " | Granted apps: " + gameID); + } else { + result.AppendLine(Environment.NewLine + "Result: " + EResult.AccessDenied); + } } return result.ToString(); diff --git a/ArchiSteamFarm/WebBrowser.cs b/ArchiSteamFarm/WebBrowser.cs index cedc00cbb..ea7d658a0 100644 --- a/ArchiSteamFarm/WebBrowser.cs +++ b/ArchiSteamFarm/WebBrowser.cs @@ -242,6 +242,22 @@ namespace ArchiSteamFarm { return false; } + internal async Task UrlPostToHtmlDocumentRetry(string request, ICollection> data = null, string referer = null) { + if (string.IsNullOrEmpty(request)) { + ArchiLogger.LogNullError(nameof(request)); + return null; + } + + string content = await UrlPostToContentRetry(request, data, referer).ConfigureAwait(false); + if (string.IsNullOrEmpty(content)) { + return null; + } + + HtmlDocument htmlDocument = new HtmlDocument(); + htmlDocument.LoadHtml(WebUtility.HtmlDecode(content)); + return htmlDocument; + } + internal async Task UrlPostToJsonResultRetry(string request, ICollection> data = null, string referer = null) { if (string.IsNullOrEmpty(request)) { ArchiLogger.LogNullError(nameof(request));