diff --git a/ArchiSteamFarm/ArchiHandler.cs b/ArchiSteamFarm/ArchiHandler.cs index 70490691b..5f8c674a4 100644 --- a/ArchiSteamFarm/ArchiHandler.cs +++ b/ArchiSteamFarm/ArchiHandler.cs @@ -165,6 +165,19 @@ namespace ArchiSteamFarm { } } + internal sealed class RedeemGuestPassResponseCallback : CallbackMsg { + internal readonly EResult Result; + + internal RedeemGuestPassResponseCallback(JobID jobID, CMsgClientRedeemGuestPassResponse msg) { + if ((jobID == null) || (msg == null)) { + throw new ArgumentNullException(nameof(jobID) + " || " + nameof(msg)); + } + + JobID = jobID; + Result = (EResult) msg.eresult; + } + } + /* __ __ _ _ _ | \/ | ___ | |_ | |__ ___ __| | ___ @@ -251,6 +264,32 @@ namespace ArchiSteamFarm { Client.Send(request); } + internal async Task RedeemGuestPass(ulong guestPassID) { + if (guestPassID == 0) { + Logging.LogNullError(nameof(guestPassID), Bot.BotName); + return null; + } + + if (!Client.IsConnected) { + return null; + } + + ClientMsgProtobuf request = new ClientMsgProtobuf(EMsg.ClientRedeemGuestPass) { + SourceJobID = Client.GetNextJobID() + }; + + request.Body.guest_pass_id = guestPassID; + + Client.Send(request); + + try { + return await new AsyncJob(Client, request.SourceJobID); + } catch (Exception e) { + Logging.LogGenericException(e, Bot.BotName); + return null; + } + } + internal async Task RedeemKey(string key) { if (string.IsNullOrEmpty(key)) { Logging.LogNullError(nameof(key), Bot.BotName); @@ -305,6 +344,9 @@ namespace ArchiSteamFarm { case EMsg.ClientPurchaseResponse: HandlePurchaseResponse(packetMsg); break; + case EMsg.ClientRedeemGuestPassResponse: + HandleRedeemGuestPassResponse(packetMsg); + break; case EMsg.ClientUserNotifications: HandleUserNotifications(packetMsg); break; @@ -351,6 +393,16 @@ namespace ArchiSteamFarm { Client.PostCallback(new PurchaseResponseCallback(packetMsg.TargetJobID, response.Body)); } + private void HandleRedeemGuestPassResponse(IPacketMsg packetMsg) { + if (packetMsg == null) { + Logging.LogNullError(nameof(packetMsg), Bot.BotName); + return; + } + + ClientMsgProtobuf response = new ClientMsgProtobuf(packetMsg); + Client.PostCallback(new RedeemGuestPassResponseCallback(packetMsg.TargetJobID, response.Body)); + } + private void HandleUserNotifications(IPacketMsg packetMsg) { if (packetMsg == null) { Logging.LogNullError(nameof(packetMsg), Bot.BotName); diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index abeb45fc6..dde40039c 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -247,30 +247,6 @@ namespace ArchiSteamFarm { return true; } - internal async Task AcceptGift(ulong gid) { - if (gid == 0) { - Logging.LogNullError(nameof(gid), Bot.BotName); - return false; - } - - if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) { - return false; - } - - string sessionID = WebBrowser.CookieContainer.GetCookieValue(SteamCommunityURL, "sessionid"); - if (string.IsNullOrEmpty(sessionID)) { - Logging.LogNullError(nameof(sessionID), Bot.BotName); - return false; - } - - string request = SteamCommunityURL + "/gifts/" + gid + "/acceptunpack"; - Dictionary data = new Dictionary(1) { - { "sessionid", sessionID } - }; - - return await WebBrowser.UrlPostRetry(request, data).ConfigureAwait(false); - } - internal async Task JoinGroup(ulong groupID) { if (groupID == 0) { Logging.LogNullError(nameof(groupID), Bot.BotName); diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 9d07084c4..b35444b18 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -1736,26 +1736,21 @@ namespace ArchiSteamFarm { return; } - if (!ArchiWebHandler.Ready) { - for (byte i = 0; (i < Program.GlobalConfig.HttpTimeout) && !ArchiWebHandler.Ready; i++) { - await Task.Delay(1000).ConfigureAwait(false); - } - - if (!ArchiWebHandler.Ready) { - return; - } - } - foreach (ulong gid in callback.GuestPasses.Select(guestPass => guestPass["gid"].AsUnsignedLong()).Where(gid => (gid != 0) && !HandledGifts.Contains(gid))) { HandledGifts.Add(gid); Logging.LogGenericInfo("Accepting gift: " + gid + "...", BotName); await LimitGiftsRequestsAsync().ConfigureAwait(false); - if (await ArchiWebHandler.AcceptGift(gid).ConfigureAwait(false)) { - Logging.LogGenericInfo("Success!", BotName); + ArchiHandler.RedeemGuestPassResponseCallback response = await ArchiHandler.RedeemGuestPass(gid).ConfigureAwait(false); + if (response != null) { + if (response.Result == EResult.OK) { + Logging.LogGenericInfo("Success!"); + } else { + Logging.LogGenericInfo("Failed with error: " + response.Result); + } } else { - Logging.LogGenericInfo("Failed!", BotName); + Logging.LogGenericInfo("Failed!"); } } }