diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 4330e7e12..74bd458cc 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -423,9 +423,17 @@ namespace ArchiSteamFarm { return false; } - SteamTradeOfferRequest trade = new SteamTradeOfferRequest(); - foreach (SteamItem item in inventory) { - trade.me.assets.Add(new SteamItem() { + List trades = new List(); + + SteamTradeOfferRequest singleTrade = null; + for (ushort i = 0; i < inventory.Count; i++) { + if (i % Trading.MaxItemsPerTrade == 0) { + singleTrade = new SteamTradeOfferRequest(); + trades.Add(singleTrade); + } + + SteamItem item = inventory[i]; + singleTrade.me.assets.Add(new SteamItem() { appid = "753", contextid = "6", amount = item.amount, @@ -436,23 +444,25 @@ namespace ArchiSteamFarm { string referer = "https://steamcommunity.com/tradeoffer/new"; string request = referer + "/send"; - Dictionary data = new Dictionary() { - {"sessionid", sessionID}, - {"serverid", "1"}, - {"partner", partnerID.ToString()}, - {"tradeoffermessage", "Sent by ASF"}, - {"json_tradeoffer", JsonConvert.SerializeObject(trade)}, - {"trade_offer_create_params", string.IsNullOrEmpty(token) ? "" : string.Format("{{ \"trade_offer_access_token\":\"{0}\" }}", token)} // TODO: This should be rewrote - }; + foreach (SteamTradeOfferRequest trade in trades) { + Dictionary data = new Dictionary() { + {"sessionid", sessionID}, + {"serverid", "1"}, + {"partner", partnerID.ToString()}, + {"tradeoffermessage", "Sent by ASF"}, + {"json_tradeoffer", JsonConvert.SerializeObject(trade)}, + {"trade_offer_create_params", string.IsNullOrEmpty(token) ? "" : string.Format("{{ \"trade_offer_access_token\":\"{0}\" }}", token)} // TODO: This should be rewrote + }; - HttpResponseMessage response = null; - for (byte i = 0; i < WebBrowser.MaxRetries && response == null; i++) { - response = await WebBrowser.UrlPost(request, data, Cookie, referer).ConfigureAwait(false); - } + HttpResponseMessage response = null; + for (byte i = 0; i < WebBrowser.MaxRetries && response == null; i++) { + response = await WebBrowser.UrlPost(request, data, Cookie, referer).ConfigureAwait(false); + } - if (response == null) { - Logging.LogGenericWTF(Bot.BotName, "Request failed even after " + WebBrowser.MaxRetries + " tries"); - return false; + if (response == null) { + Logging.LogGenericWTF(Bot.BotName, "Request failed even after " + WebBrowser.MaxRetries + " tries"); + return false; + } } return true; diff --git a/ArchiSteamFarm/Trading.cs b/ArchiSteamFarm/Trading.cs index 6d1dc9ce3..5518e7d82 100644 --- a/ArchiSteamFarm/Trading.cs +++ b/ArchiSteamFarm/Trading.cs @@ -28,6 +28,8 @@ using System.Threading.Tasks; namespace ArchiSteamFarm { internal sealed class Trading { + internal const ushort MaxItemsPerTrade = 100; // TODO: This should be corrected later, https://github.com/JustArchi/ArchiSteamFarm/issues/81 + private readonly Bot Bot; private readonly SemaphoreSlim Semaphore = new SemaphoreSlim(1); private volatile byte ParsingTasks = 0;