From cb8668ffb8573d208be492a3251bfa18113f8a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Domeradzki?= Date: Sun, 31 Mar 2024 23:30:54 +0200 Subject: [PATCH] Resolve trade offers being stuck for too long when ASF API connection is down --- ArchiSteamFarm/Core/ArchiNet.cs | 8 +++++++- ArchiSteamFarm/Steam/Exchange/Trading.cs | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ArchiSteamFarm/Core/ArchiNet.cs b/ArchiSteamFarm/Core/ArchiNet.cs index 881a4f690..f884ecc27 100644 --- a/ArchiSteamFarm/Core/ArchiNet.cs +++ b/ArchiSteamFarm/Core/ArchiNet.cs @@ -184,7 +184,13 @@ internal static class ArchiNet { Uri request = new(URL, "/Api/BadBots"); - ObjectResponse>>? response = await ASF.WebBrowser.UrlGetToJsonObject>>(request, cancellationToken: cancellationToken).ConfigureAwait(false); + ObjectResponse>>? response = null; + + try { + response = await ASF.WebBrowser.UrlGetToJsonObject>>(request, cancellationToken: cancellationToken).ConfigureAwait(false); + } catch (OperationCanceledException e) { + ASF.ArchiLogger.LogGenericDebuggingException(e); + } if (response?.Content?.Result == null) { return (false, ASF.GlobalDatabase.CachedBadBots); diff --git a/ArchiSteamFarm/Steam/Exchange/Trading.cs b/ArchiSteamFarm/Steam/Exchange/Trading.cs index 3836e1419..e7826129e 100644 --- a/ArchiSteamFarm/Steam/Exchange/Trading.cs +++ b/ArchiSteamFarm/Steam/Exchange/Trading.cs @@ -396,7 +396,10 @@ public sealed class Trading : IDisposable { // Deny trades from bad steamIDs if user wishes to do so if (ASF.GlobalConfig?.FilterBadBots ?? GlobalConfig.DefaultFilterBadBots) { - bool? isBadBot = await ArchiNet.IsBadBot(tradeOffer.OtherSteamID64).ConfigureAwait(false); + // Allow no longer than 10 seconds timeout for BadBot call, as we don't want to hold the trade offer for too long + using CancellationTokenSource cts = new(TimeSpan.FromSeconds(10)); + + bool? isBadBot = await ArchiNet.IsBadBot(tradeOffer.OtherSteamID64, cts.Token).ConfigureAwait(false); if (isBadBot == true) { Bot.ArchiLogger.LogGenericDebug(string.Format(CultureInfo.CurrentCulture, Strings.BotTradeOfferResult, tradeOffer.TradeOfferID, ParseTradeResult.EResult.Blacklisted, $"{nameof(tradeOffer.OtherSteamID64)} {tradeOffer.OtherSteamID64}"));