From f6a8d16c857445461caadf107eb104219fcf1618 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 20 Jun 2016 13:45:12 +0200 Subject: [PATCH] More fixes --- ArchiSteamFarm/ArchiWebHandler.cs | 26 ++++++++++++++++++++++---- ArchiSteamFarm/Bot.cs | 13 +++++++++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 8fd741e2d..b88a85a76 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -47,6 +47,8 @@ namespace ArchiSteamFarm { private readonly SemaphoreSlim SessionSemaphore = new SemaphoreSlim(1); private readonly WebBrowser WebBrowser; + internal bool Ready { get; private set; } + private ulong SteamID; private DateTime LastSessionRefreshCheck = DateTime.MinValue; @@ -117,7 +119,9 @@ namespace ArchiSteamFarm { WebBrowser = new WebBrowser(bot.BotName); } - internal bool Init(SteamClient steamClient, string webAPIUserNonce, string parentalPin) { + internal void OnDisconnected() => Ready = false; + + internal async Task Init(SteamClient steamClient, string webAPIUserNonce, string parentalPin) { if ((steamClient == null) || string.IsNullOrEmpty(webAPIUserNonce)) { Logging.LogNullError(nameof(steamClient) + " || " + nameof(webAPIUserNonce), Bot.BotName); return false; @@ -179,12 +183,17 @@ namespace ArchiSteamFarm { string steamLoginSecure = authResult["tokensecure"].Value; WebBrowser.CookieContainer.Add(new Cookie("steamLoginSecure", steamLoginSecure, "/", "." + SteamCommunityHost)); - WebBrowser.CookieContainer.Add(new Cookie("Steam_Language", "english", "/", "." + SteamCommunityHost)); - - if (!UnlockParentalAccount(parentalPin).Result) { + // Apparently Steam is too stupid to detect language from our headers, so we must ask for it explicitly + if (!await SetLanguage().ConfigureAwait(false)) { return false; } + // Unlock Steam Parental if needed + if (!await UnlockParentalAccount(parentalPin).ConfigureAwait(false)) { + return false; + } + + Ready = true; LastSessionRefreshCheck = DateTime.Now; return true; } @@ -935,5 +944,14 @@ namespace ArchiSteamFarm { Logging.LogGenericInfo("Success!", Bot.BotName); return true; } + + private async Task SetLanguage() { + string request = SteamCommunityURL + "/actions/SetLanguage"; + Dictionary data = new Dictionary(1) { + { "language", "english" } + }; + + return await WebBrowser.UrlPostRetry(request, data).ConfigureAwait(false); + } } } diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index a92a8797f..f92e46459 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -306,7 +306,7 @@ namespace ArchiSteamFarm { return false; } - if (ArchiWebHandler.Init(SteamClient, callback.Nonce, BotConfig.SteamParentalPIN)) { + if (await ArchiWebHandler.Init(SteamClient, callback.Nonce, BotConfig.SteamParentalPIN).ConfigureAwait(false)) { return true; } @@ -1452,6 +1452,7 @@ namespace ArchiSteamFarm { return; } + ArchiWebHandler.OnDisconnected(); Logging.LogGenericInfo("Disconnected from Steam!", BotName); FirstTradeSent = false; @@ -1503,6 +1504,14 @@ namespace ArchiSteamFarm { return; } + for (byte i = 0; (i < Program.GlobalConfig.HttpTimeout) && !ArchiWebHandler.Ready; i++) { + await Task.Delay(1000).ConfigureAwait(false); + } + + if (!ArchiWebHandler.Ready) { + return; + } + bool acceptedSomething = false; foreach (ulong gid in callback.GuestPasses.Select(guestPass => guestPass["gid"].AsUnsignedLong()).Where(gid => gid != 0)) { Logging.LogGenericInfo("Accepting gift: " + gid + "...", BotName); @@ -1698,7 +1707,7 @@ namespace ArchiSteamFarm { } } - if (!ArchiWebHandler.Init(SteamClient, callback.WebAPIUserNonce, BotConfig.SteamParentalPIN)) { + if (!await ArchiWebHandler.Init(SteamClient, callback.WebAPIUserNonce, BotConfig.SteamParentalPIN).ConfigureAwait(false)) { if (!await RefreshSession().ConfigureAwait(false)) { return; }