diff --git a/ArchiSteamFarm/Steam/Bot.cs b/ArchiSteamFarm/Steam/Bot.cs index 3900c13d0..39e0f89a9 100644 --- a/ArchiSteamFarm/Steam/Bot.cs +++ b/ArchiSteamFarm/Steam/Bot.cs @@ -1226,7 +1226,7 @@ namespace ArchiSteamFarm.Steam { gameName = string.Format(CultureInfo.CurrentCulture, BotConfig.CustomGamePlayedWhileFarming!, game.AppID, game.GameName); } - await ArchiHandler.PlayGames(game.PlayableAppID.ToEnumerable(), gameName).ConfigureAwait(false); + await ArchiHandler.PlayGames(new HashSet(1) { game.PlayableAppID }, gameName).ConfigureAwait(false); } internal async Task IdleGames(IReadOnlyCollection games) { @@ -1240,7 +1240,7 @@ namespace ArchiSteamFarm.Steam { gameName = string.Format(CultureInfo.CurrentCulture, BotConfig.CustomGamePlayedWhileFarming!, string.Join(", ", games.Select(game => game.AppID)), string.Join(", ", games.Select(game => game.GameName))); } - await ArchiHandler.PlayGames(games.Select(game => game.PlayableAppID), gameName).ConfigureAwait(false); + await ArchiHandler.PlayGames(games.Select(game => game.PlayableAppID).ToHashSet(), gameName).ConfigureAwait(false); } internal async Task ImportKeysToRedeem(string filePath) { diff --git a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs index 558af88c2..7e4e91521 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs @@ -471,7 +471,7 @@ namespace ArchiSteamFarm.Steam.Integration { return response.Result == EResult.OK; } - internal async Task PlayGames(IEnumerable gameIDs, string? gameName = null) { + internal async Task PlayGames(IReadOnlyCollection gameIDs, string? gameName = null) { if (gameIDs == null) { throw new ArgumentNullException(nameof(gameIDs)); } @@ -512,11 +512,17 @@ namespace ArchiSteamFarm.Steam.Integration { maxGamesCount++; } - foreach (uint gameID in gameIDs.Where(gameID => gameID != 0)) { - request.Body.games_played.Add(new CMsgClientGamesPlayed.GamePlayed { game_id = new GameID(gameID) }); + if (gameIDs.Count > 0) { +#pragma warning disable CA1508 // False positive, not every IReadOnlyCollection is ISet + IEnumerable uniqueValidGameIDs = (gameIDs as ISet ?? gameIDs.Distinct()).Where(gameID => gameID > 0); +#pragma warning restore CA1508 // False positive, not every IReadOnlyCollection is ISet - if (request.Body.games_played.Count >= maxGamesCount) { - break; + foreach (uint gameID in uniqueValidGameIDs) { + request.Body.games_played.Add(new CMsgClientGamesPlayed.GamePlayed { game_id = new GameID(gameID) }); + + if (request.Body.games_played.Count >= maxGamesCount) { + break; + } } } diff --git a/ArchiSteamFarm/Steam/Interaction/Actions.cs b/ArchiSteamFarm/Steam/Interaction/Actions.cs index f35f25127..5a8b3ce40 100644 --- a/ArchiSteamFarm/Steam/Interaction/Actions.cs +++ b/ArchiSteamFarm/Steam/Interaction/Actions.cs @@ -201,7 +201,7 @@ namespace ArchiSteamFarm.Steam.Interaction { // We add extra delay because OnFarmingStopped() also executes PlayGames() // Despite of proper order on our end, Steam network might not respect it await Task.Delay(Bot.CallbackSleep).ConfigureAwait(false); - await Bot.ArchiHandler.PlayGames(Enumerable.Empty(), Bot.BotConfig.CustomGamePlayedWhileIdle).ConfigureAwait(false); + await Bot.ArchiHandler.PlayGames(Array.Empty(), Bot.BotConfig.CustomGamePlayedWhileIdle).ConfigureAwait(false); } if (resumeInSeconds > 0) {