private async Task ParseActiveTrades() { if (string.IsNullOrEmpty(Bot.BotConfig.SteamApiKey)) { return; } HashSet <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetTradeOffers(); if ((tradeOffers == null) || (tradeOffers.Count == 0)) { return; } if (tradeOffers.RemoveWhere(tradeoffer => (tradeoffer.State != Steam.TradeOffer.ETradeOfferState.Active) || IgnoredTrades.Contains(tradeoffer.TradeOfferID)) > 0) { tradeOffers.TrimExcess(); if (tradeOffers.Count == 0) { return; } } List <Task <ParseTradeResult> > tasks = tradeOffers.Select(ParseTrade).ToList(); ParseTradeResult[] results = await Task.WhenAll(tasks).ConfigureAwait(false); if (results.Any(result => result == ParseTradeResult.AcceptedWithItemLose)) { await Task.Delay(1000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment HashSet <ulong> tradeIDs = new HashSet <ulong>(tradeOffers.Select(tradeOffer => tradeOffer.TradeOfferID)); await Bot.AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, 0, tradeIDs).ConfigureAwait(false); } }
private async Task ParseActiveTrades() { if (string.IsNullOrEmpty(Bot.BotConfig.SteamApiKey)) { return; } HashSet <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetTradeOffers(); if ((tradeOffers == null) || (tradeOffers.Count == 0)) { return; } tradeOffers.RemoveWhere(tradeoffer => tradeoffer.State != Steam.TradeOffer.ETradeOfferState.Active); tradeOffers.TrimExcess(); if (tradeOffers.Count == 0) { return; } await tradeOffers.ForEachAsync(ParseTrade).ConfigureAwait(false); await Bot.AcceptConfirmations(true, Confirmation.ConfirmationType.Trade).ConfigureAwait(false); }
private async Task ParseActiveTrades() { List <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetTradeOffers(); if (tradeOffers == null) { return; } await tradeOffers.ForEachAsync(ParseTrade).ConfigureAwait(false); await Bot.AcceptConfirmations(true, Confirmation.ConfirmationType.Trade).ConfigureAwait(false); }
private async Task ParseActiveTrades() { if (string.IsNullOrEmpty(Bot.BotConfig.SteamApiKey)) { return; } HashSet <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetActiveTradeOffers(); if ((tradeOffers == null) || (tradeOffers.Count == 0)) { return; } if (tradeOffers.RemoveWhere(tradeoffer => IgnoredTrades.Contains(tradeoffer.TradeOfferID)) > 0) { if (tradeOffers.Count == 0) { return; } } ParseTradeResult[] results = await Task.WhenAll(tradeOffers.Select(ParseTrade)).ConfigureAwait(false); if (Bot.HasMobileAuthenticator) { HashSet <ulong> acceptedWithItemLoseTradeIDs = new HashSet <ulong>(results.Where(result => (result != null) && (result.Result == ParseTradeResult.EResult.AcceptedWithItemLose)).Select(result => result.TradeID)); if (acceptedWithItemLoseTradeIDs.Count > 0) { await Task.Delay(1000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment await Bot.AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, 0, acceptedWithItemLoseTradeIDs).ConfigureAwait(false); } } if (results.Any(result => (result != null) && ((result.Result == ParseTradeResult.EResult.AcceptedWithItemLose) || (result.Result == ParseTradeResult.EResult.AcceptedWithoutItemLose)))) { // If we finished a trade, perform a loot if user wants to do so await Bot.LootIfNeeded().ConfigureAwait(false); } }
private async Task ParseActiveTrades() { List <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetTradeOffers(); if (tradeOffers == null) { return; } List <Task> tasks = new List <Task>(); foreach (Steam.TradeOffer tradeOffer in tradeOffers) { if (tradeOffer.trade_offer_state == Steam.TradeOffer.ETradeOfferState.Active) { tasks.Add(Task.Run(async() => await ParseTrade(tradeOffer).ConfigureAwait(false))); } } await Task.WhenAll(tasks).ConfigureAwait(false); await Bot.AcceptConfirmations(Confirmation.ConfirmationType.Trade).ConfigureAwait(false); }