Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
        }