diff --git a/ArchiSteamFarm.sln.DotSettings b/ArchiSteamFarm.sln.DotSettings index 9a909bdea..624a28628 100644 --- a/ArchiSteamFarm.sln.DotSettings +++ b/ArchiSteamFarm.sln.DotSettings @@ -616,6 +616,7 @@ limitations under the License. GC GID HTML + IASF ID IP IPC @@ -690,6 +691,7 @@ limitations under the License. True True True + True True True True diff --git a/ArchiSteamFarm/Json/Steam.cs b/ArchiSteamFarm/Json/Steam.cs index 040ac61c4..0ff958327 100644 --- a/ArchiSteamFarm/Json/Steam.cs +++ b/ArchiSteamFarm/Json/Steam.cs @@ -22,7 +22,9 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.ComponentModel; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.Linq; using ArchiSteamFarm.Localization; using JetBrains.Annotations; @@ -97,7 +99,7 @@ namespace ArchiSteamFarm.Json { #pragma warning disable IDE0051 [JsonProperty(PropertyName = "amount", Required = Required.Always)] private string AmountText { - get => Amount.ToString(); + get => Amount.ToString(CultureInfo.InvariantCulture); set { if (string.IsNullOrEmpty(value)) { @@ -120,7 +122,7 @@ namespace ArchiSteamFarm.Json { #pragma warning disable IDE0052 [JsonProperty(PropertyName = "assetid", Required = Required.DisallowNull)] private string AssetIDText { - get => AssetID.ToString(); + get => AssetID.ToString(CultureInfo.InvariantCulture); set { if (string.IsNullOrEmpty(value)) { @@ -162,7 +164,7 @@ namespace ArchiSteamFarm.Json { #pragma warning disable IDE0051 [JsonProperty(PropertyName = "contextid", Required = Required.DisallowNull)] private string ContextIDText { - get => ContextID.ToString(); + get => ContextID.ToString(CultureInfo.InvariantCulture); set { if (string.IsNullOrEmpty(value)) { @@ -210,8 +212,20 @@ namespace ArchiSteamFarm.Json { // Constructed from trades being received or plugins public Asset(uint appID, ulong contextID, ulong classID, uint amount, ulong instanceID = 0, ulong assetID = 0, bool marketable = true, bool tradable = true, ImmutableHashSet? tags = null, uint realAppID = 0, EType type = EType.Unknown, ERarity rarity = ERarity.Unknown) { - if ((appID == 0) || (contextID == 0) || (classID == 0) || (amount == 0)) { - throw new ArgumentNullException(nameof(appID) + " || " + nameof(contextID) + " || " + nameof(classID) + " || " + nameof(amount)); + if (appID == 0) { + throw new ArgumentOutOfRangeException(nameof(appID)); + } + + if (contextID == 0) { + throw new ArgumentOutOfRangeException(nameof(contextID)); + } + + if (classID == 0) { + throw new ArgumentOutOfRangeException(nameof(classID)); + } + + if (amount == 0) { + throw new ArgumentOutOfRangeException(nameof(amount)); } AppID = appID; @@ -226,7 +240,7 @@ namespace ArchiSteamFarm.Json { Type = type; Rarity = rarity; - if ((tags != null) && (tags.Count > 0)) { + if (tags?.Count > 0) { Tags = tags; } } @@ -239,19 +253,15 @@ namespace ArchiSteamFarm.Json { public sealed class Tag { [JsonProperty(PropertyName = "category", Required = Required.Always)] [PublicAPI] - public readonly string? Identifier; + public string? Identifier { get; private set; } [JsonProperty(PropertyName = "internal_name", Required = Required.Always)] [PublicAPI] - public readonly string? Value; + public string? Value { get; private set; } internal Tag(string identifier, string value) { - if (string.IsNullOrEmpty(identifier) || string.IsNullOrEmpty(value)) { - throw new ArgumentNullException(nameof(identifier) + " || " + nameof(value)); - } - - Identifier = identifier; - Value = value; + Identifier = !string.IsNullOrEmpty(identifier) ? identifier : throw new ArgumentNullException(nameof(identifier)); + Value = !string.IsNullOrEmpty(value) ? value : throw new ArgumentNullException(nameof(value)); } [JsonConstructor] @@ -288,7 +298,7 @@ namespace ArchiSteamFarm.Json { [SuppressMessage("ReSharper", "ClassCannotBeInstantiated")] public class BooleanResponse { [JsonProperty(PropertyName = "success", Required = Required.Always)] - public readonly bool Success; + public bool Success { get; private set; } [JsonConstructor] protected BooleanResponse() { } @@ -298,7 +308,7 @@ namespace ArchiSteamFarm.Json { [SuppressMessage("ReSharper", "ClassCannotBeInstantiated")] public class EResultResponse { [JsonProperty(PropertyName = "success", Required = Required.Always)] - public readonly EResult Result; + public EResult Result { get; private set; } [JsonConstructor] protected EResultResponse() { } @@ -306,15 +316,6 @@ namespace ArchiSteamFarm.Json { // REF: https://developer.valvesoftware.com/wiki/Steam_Web_API/IEconService#CEcon_TradeOffer public sealed class TradeOffer { - [PublicAPI] - public readonly ulong OtherSteamID64; - - [PublicAPI] - public readonly ETradeOfferState State; - - [PublicAPI] - public readonly ulong TradeOfferID; - [PublicAPI] public IReadOnlyCollection ItemsToGiveReadOnly => ItemsToGive; @@ -324,10 +325,27 @@ namespace ArchiSteamFarm.Json { internal readonly HashSet ItemsToGive = new HashSet(); internal readonly HashSet ItemsToReceive = new HashSet(); + [PublicAPI] + public ulong OtherSteamID64 { get; private set; } + + [PublicAPI] + public ETradeOfferState State { get; private set; } + + [PublicAPI] + public ulong TradeOfferID { get; private set; } + // Constructed from trades being received internal TradeOffer(ulong tradeOfferID, uint otherSteamID3, ETradeOfferState state) { - if ((tradeOfferID == 0) || (otherSteamID3 == 0) || !Enum.IsDefined(typeof(ETradeOfferState), state)) { - throw new ArgumentNullException(nameof(tradeOfferID) + " || " + nameof(otherSteamID3) + " || " + nameof(state)); + if (tradeOfferID == 0) { + throw new ArgumentOutOfRangeException(nameof(tradeOfferID)); + } + + if (otherSteamID3 == 0) { + throw new ArgumentOutOfRangeException(nameof(otherSteamID3)); + } + + if (!Enum.IsDefined(typeof(ETradeOfferState), state)) { + throw new InvalidEnumArgumentException(nameof(state), (int) state, typeof(ETradeOfferState)); } TradeOfferID = tradeOfferID; @@ -411,7 +429,7 @@ namespace ArchiSteamFarm.Json { case "droprate_2": return Asset.ERarity.Rare; default: - ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); break; } @@ -434,7 +452,7 @@ namespace ArchiSteamFarm.Json { switch (tag.Identifier) { case "Game": if (string.IsNullOrEmpty(tag.Value) || (tag.Value!.Length <= 4) || !tag.Value.StartsWith("app_", StringComparison.Ordinal)) { - ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); break; } @@ -472,7 +490,7 @@ namespace ArchiSteamFarm.Json { case "cardborder_1": return Asset.EType.FoilTradingCard; default: - ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); return Asset.EType.Unknown; } @@ -510,7 +528,7 @@ namespace ArchiSteamFarm.Json { case "item_class_15": return Asset.EType.AnimatedAvatar; default: - ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); return Asset.EType.Unknown; } @@ -712,8 +730,28 @@ namespace ArchiSteamFarm.Json { // Constructed from privacy change request internal PrivacySettings(ArchiHandler.EPrivacySetting profile, ArchiHandler.EPrivacySetting ownedGames, ArchiHandler.EPrivacySetting playtime, ArchiHandler.EPrivacySetting friendsList, ArchiHandler.EPrivacySetting inventory, ArchiHandler.EPrivacySetting inventoryGifts) { - if ((profile == ArchiHandler.EPrivacySetting.Unknown) || (ownedGames == ArchiHandler.EPrivacySetting.Unknown) || (playtime == ArchiHandler.EPrivacySetting.Unknown) || (friendsList == ArchiHandler.EPrivacySetting.Unknown) || (inventory == ArchiHandler.EPrivacySetting.Unknown) || (inventoryGifts == ArchiHandler.EPrivacySetting.Unknown)) { - throw new ArgumentNullException(nameof(profile) + " || " + nameof(ownedGames) + " || " + nameof(playtime) + " || " + nameof(friendsList) + " || " + nameof(inventory) + " || " + nameof(inventoryGifts)); + if ((profile == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), profile)) { + throw new InvalidEnumArgumentException(nameof(profile), (int) profile, typeof(ArchiHandler.EPrivacySetting)); + } + + if ((ownedGames == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), ownedGames)) { + throw new InvalidEnumArgumentException(nameof(ownedGames), (int) ownedGames, typeof(ArchiHandler.EPrivacySetting)); + } + + if ((playtime == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), playtime)) { + throw new InvalidEnumArgumentException(nameof(playtime), (int) playtime, typeof(ArchiHandler.EPrivacySetting)); + } + + if ((friendsList == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), friendsList)) { + throw new InvalidEnumArgumentException(nameof(friendsList), (int) friendsList, typeof(ArchiHandler.EPrivacySetting)); + } + + if ((inventory == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), inventory)) { + throw new InvalidEnumArgumentException(nameof(inventory), (int) inventory, typeof(ArchiHandler.EPrivacySetting)); + } + + if ((inventoryGifts == ArchiHandler.EPrivacySetting.Unknown) || !Enum.IsDefined(typeof(ArchiHandler.EPrivacySetting), inventoryGifts)) { + throw new InvalidEnumArgumentException(nameof(inventoryGifts), (int) inventoryGifts, typeof(ArchiHandler.EPrivacySetting)); } Profile = profile; diff --git a/ArchiSteamFarm/NLog/ArchiLogger.cs b/ArchiSteamFarm/NLog/ArchiLogger.cs index f6d174ffa..e351e5fc2 100644 --- a/ArchiSteamFarm/NLog/ArchiLogger.cs +++ b/ArchiSteamFarm/NLog/ArchiLogger.cs @@ -20,6 +20,7 @@ // limitations under the License. using System; +using System.Globalization; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -122,12 +123,16 @@ namespace ArchiSteamFarm.NLog { throw new ArgumentNullException(nameof(nullObjectName)); } - LogGenericError(string.Format(Strings.ErrorObjectIsNull, nullObjectName), previousMethodName); + LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nullObjectName), previousMethodName); } internal void LogChatMessage(bool echo, string message, ulong chatGroupID = 0, ulong chatID = 0, ulong steamID = 0, [CallerMemberName] string? previousMethodName = null) { - if (string.IsNullOrEmpty(message) || (((chatGroupID == 0) || (chatID == 0)) && (steamID == 0))) { - throw new ArgumentNullException(nameof(message) + " || " + "((" + nameof(chatGroupID) + " || " + nameof(chatID) + ") && " + nameof(steamID) + ")"); + if (string.IsNullOrEmpty(message)) { + throw new ArgumentNullException(nameof(message)); + } + + if (((chatGroupID == 0) || (chatID == 0)) && (steamID == 0)) { + throw new InvalidOperationException("((" + nameof(chatGroupID) + " || " + nameof(chatID) + ") && " + nameof(steamID) + ")"); } StringBuilder loggedMessage = new StringBuilder(previousMethodName + "() " + message + " " + (echo ? "->" : "<-") + " "); @@ -165,7 +170,7 @@ namespace ArchiSteamFarm.NLog { } // Otherwise, we ran into fatal exception before logging module could even get initialized, so activate fallback logging that involves file and console - string message = string.Format(DateTime.Now + " " + Strings.ErrorEarlyFatalExceptionInfo, SharedInfo.Version) + Environment.NewLine; + string message = string.Format(CultureInfo.CurrentCulture, DateTime.Now + " " + Strings.ErrorEarlyFatalExceptionInfo, SharedInfo.Version) + Environment.NewLine; try { await RuntimeCompatibility.File.WriteAllTextAsync(SharedInfo.LogFile, message).ConfigureAwait(false); @@ -180,7 +185,7 @@ namespace ArchiSteamFarm.NLog { } while (true) { - message = string.Format(Strings.ErrorEarlyFatalExceptionPrint, previousMethodName, exception.Message, exception.StackTrace) + Environment.NewLine; + message = string.Format(CultureInfo.CurrentCulture, Strings.ErrorEarlyFatalExceptionPrint, previousMethodName, exception.Message, exception.StackTrace) + Environment.NewLine; try { await RuntimeCompatibility.File.AppendAllTextAsync(SharedInfo.LogFile, message).ConfigureAwait(false); diff --git a/ArchiSteamFarm/NLog/Logging.cs b/ArchiSteamFarm/NLog/Logging.cs index 4664281e4..d8427fe46 100644 --- a/ArchiSteamFarm/NLog/Logging.cs +++ b/ArchiSteamFarm/NLog/Logging.cs @@ -20,6 +20,8 @@ // limitations under the License. using System; +using System.ComponentModel; +using System.Globalization; using System.IO; using System.Linq; using System.Text; @@ -64,8 +66,12 @@ namespace ArchiSteamFarm.NLog { } internal static async Task GetUserInput(ASF.EUserInputType userInputType, string botName = SharedInfo.ASF) { - if ((userInputType == ASF.EUserInputType.None) || !Enum.IsDefined(typeof(ASF.EUserInputType), userInputType) || string.IsNullOrEmpty(botName)) { - throw new ArgumentNullException(nameof(userInputType) + " || " + nameof(botName)); + if ((userInputType == ASF.EUserInputType.None) || !Enum.IsDefined(typeof(ASF.EUserInputType), userInputType)) { + throw new InvalidEnumArgumentException(nameof(userInputType), (int) userInputType, typeof(ASF.EUserInputType)); + } + + if (string.IsNullOrEmpty(botName)) { + throw new ArgumentNullException(nameof(botName)); } if (ASF.GlobalConfig?.Headless ?? GlobalConfig.DefaultHeadless) { @@ -111,7 +117,7 @@ namespace ArchiSteamFarm.NLog { break; default: - ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(userInputType), userInputType)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(userInputType), userInputType)); return null; } @@ -212,7 +218,7 @@ namespace ArchiSteamFarm.NLog { internal static void StartInteractiveConsole() { if ((ASF.GlobalConfig?.SteamOwnerID ?? GlobalConfig.DefaultSteamOwnerID) == 0) { - ASF.ArchiLogger.LogGenericWarning(string.Format(Strings.InteractiveConsoleNotAvailable, nameof(ASF.GlobalConfig.SteamOwnerID))); + ASF.ArchiLogger.LogGenericWarning(string.Format(CultureInfo.CurrentCulture, Strings.InteractiveConsoleNotAvailable, nameof(ASF.GlobalConfig.SteamOwnerID))); return; } diff --git a/ArchiSteamFarm/NLog/SteamTarget.cs b/ArchiSteamFarm/NLog/SteamTarget.cs index daecfb16f..7852a23ba 100644 --- a/ArchiSteamFarm/NLog/SteamTarget.cs +++ b/ArchiSteamFarm/NLog/SteamTarget.cs @@ -21,6 +21,7 @@ using System; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.Linq; using System.Threading.Tasks; using ArchiSteamFarm.Localization; @@ -61,7 +62,7 @@ namespace ArchiSteamFarm.NLog { base.Write(logEvent); - if ((SteamID == 0) || (Bot.Bots == null) || (Bot.Bots.Count == 0)) { + if ((SteamID == 0) || (Bot.Bots == null) || (Bot.Bots.IsEmpty)) { return; } @@ -85,7 +86,7 @@ namespace ArchiSteamFarm.NLog { if (ChatGroupID != 0) { await SendGroupMessage(message, bot).ConfigureAwait(false); - } else if ((bot == null) || (bot.SteamID != SteamID)) { + } else if (bot?.SteamID != SteamID) { await SendPrivateMessage(message, bot).ConfigureAwait(false); } } @@ -104,7 +105,7 @@ namespace ArchiSteamFarm.NLog { } if (!await bot.SendMessage(ChatGroupID, SteamID, message).ConfigureAwait(false)) { - bot.ArchiLogger.LogGenericTrace(string.Format(Strings.WarningFailedWithError, nameof(Bot.SendMessage))); + bot.ArchiLogger.LogGenericTrace(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(Bot.SendMessage))); } } @@ -122,7 +123,7 @@ namespace ArchiSteamFarm.NLog { } if (!await bot.SendMessage(SteamID, message).ConfigureAwait(false)) { - bot.ArchiLogger.LogGenericTrace(string.Format(Strings.WarningFailedWithError, nameof(Bot.SendMessage))); + bot.ArchiLogger.LogGenericTrace(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(Bot.SendMessage))); } } } diff --git a/ArchiSteamFarm/Plugins/PluginsCore.cs b/ArchiSteamFarm/Plugins/PluginsCore.cs index 2972ab973..b36a9af94 100644 --- a/ArchiSteamFarm/Plugins/PluginsCore.cs +++ b/ArchiSteamFarm/Plugins/PluginsCore.cs @@ -25,6 +25,7 @@ using System.Collections.Immutable; using System.Composition; using System.Composition.Convention; using System.Composition.Hosting; +using System.Globalization; using System.IO; using System.Linq; using System.Reflection; @@ -98,7 +99,7 @@ namespace ArchiSteamFarm.Plugins { return true; } - ASF.ArchiLogger.LogGenericInfo(string.Format(Strings.Initializing, nameof(Plugins))); + ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.Initializing, nameof(Plugins))); ConventionBuilder conventions = new ConventionBuilder(); conventions.ForTypesDerivedFrom().Export(); @@ -127,9 +128,9 @@ namespace ArchiSteamFarm.Plugins { try { string pluginName = plugin.Name; - ASF.ArchiLogger.LogGenericInfo(string.Format(Strings.PluginLoading, pluginName, plugin.Version)); + ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginLoading, pluginName, plugin.Version)); plugin.OnLoaded(); - ASF.ArchiLogger.LogGenericInfo(string.Format(Strings.PluginLoaded, pluginName)); + ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginLoaded, pluginName)); } catch (Exception e) { ASF.ArchiLogger.LogGenericException(e); invalidPlugins.Add(plugin); @@ -164,7 +165,7 @@ namespace ArchiSteamFarm.Plugins { if (Directory.Exists(pluginsPath)) { HashSet? loadedAssemblies = LoadAssembliesFrom(pluginsPath); - if ((loadedAssemblies != null) && (loadedAssemblies.Count > 0)) { + if (loadedAssemblies?.Count > 0) { assemblies = loadedAssemblies; } } @@ -174,8 +175,8 @@ namespace ArchiSteamFarm.Plugins { if (Directory.Exists(customPluginsPath)) { HashSet? loadedAssemblies = LoadAssembliesFrom(customPluginsPath); - if ((loadedAssemblies != null) && (loadedAssemblies.Count > 0)) { - if ((assemblies != null) && (assemblies.Count > 0)) { + if (loadedAssemblies?.Count > 0) { + if (assemblies?.Count > 0) { assemblies.UnionWith(loadedAssemblies); } else { assemblies = loadedAssemblies; @@ -199,8 +200,20 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotCommand(Bot bot, ulong steamID, string message, string[] args) { - if ((bot == null) || (steamID == 0) || !new SteamID(steamID).IsIndividualAccount || string.IsNullOrEmpty(message) || (args == null) || (args.Length == 0)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(steamID) + " || " + nameof(message) + " || " + nameof(args)); + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) { + throw new ArgumentOutOfRangeException(nameof(steamID)); + } + + if (string.IsNullOrEmpty(message)) { + throw new ArgumentNullException(nameof(message)); + } + + if ((args == null) || (args.Length == 0)) { + throw new ArgumentNullException(nameof(args)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -301,8 +314,12 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotFriendRequest(Bot bot, ulong steamID) { - if ((bot == null) || (steamID == 0) || !new SteamID(steamID).IsValid) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(steamID)); + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if ((steamID == 0) || !new SteamID(steamID).IsValid) { + throw new ArgumentOutOfRangeException(nameof(steamID)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -371,8 +388,16 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotMessage(Bot bot, ulong steamID, string message) { - if ((bot == null) || (steamID == 0) || !new SteamID(steamID).IsIndividualAccount || string.IsNullOrEmpty(message)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(steamID) + " || " + nameof(message)); + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) { + throw new ArgumentOutOfRangeException(nameof(steamID)); + } + + if (string.IsNullOrEmpty(message)) { + throw new ArgumentNullException(nameof(message)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -393,8 +418,12 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotSteamCallbacksInit(Bot bot, CallbackManager callbackManager) { - if ((bot == null) || (callbackManager == null)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(callbackManager)); + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if (callbackManager == null) { + throw new ArgumentNullException(nameof(callbackManager)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -431,8 +460,12 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotTradeOffer(Bot bot, Steam.TradeOffer tradeOffer) { - if ((bot == null) || (tradeOffer == null)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(tradeOffer)); + if ((bot == null)) { + throw new ArgumentNullException(nameof(bot)); + } + + if (tradeOffer == null) { + throw new ArgumentNullException(nameof(tradeOffer)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -453,8 +486,12 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotTradeOfferResults(Bot bot, IReadOnlyCollection tradeResults) { - if ((bot == null) || (tradeResults == null) || (tradeResults.Count == 0)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(tradeResults)); + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if ((tradeResults == null) || (tradeResults.Count == 0)) { + throw new ArgumentNullException(nameof(tradeResults)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -469,8 +506,12 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnBotUserNotifications(Bot bot, IReadOnlyCollection newNotifications) { - if ((bot == null) || (newNotifications == null) || (newNotifications.Count == 0)) { - throw new ArgumentNullException(nameof(bot) + " || " + nameof(newNotifications)); + if ((bot == null)) { + throw new ArgumentNullException(nameof(bot)); + } + + if ((newNotifications == null) || (newNotifications.Count == 0)) { + throw new ArgumentNullException(nameof(newNotifications)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -485,8 +526,16 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task OnPICSChanges(uint currentChangeNumber, IReadOnlyDictionary appChanges, IReadOnlyDictionary packageChanges) { - if ((currentChangeNumber == 0) || (appChanges == null) || (packageChanges == null)) { - throw new ArgumentNullException(nameof(currentChangeNumber) + " || " + nameof(appChanges) + " || " + nameof(packageChanges)); + if (currentChangeNumber == 0) { + throw new ArgumentOutOfRangeException(nameof(currentChangeNumber)); + } + + if (appChanges == null) { + throw new ArgumentNullException(nameof(appChanges)); + } + + if (packageChanges == null) { + throw new ArgumentNullException(nameof(packageChanges)); } if ((ActivePlugins == null) || (ActivePlugins.Count == 0)) { @@ -534,7 +583,7 @@ namespace ArchiSteamFarm.Plugins { try { assembly = Assembly.LoadFrom(assemblyPath); } catch (Exception e) { - ASF.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, assemblyPath)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsInvalid, assemblyPath)); ASF.ArchiLogger.LogGenericWarningException(e); continue; diff --git a/ArchiSteamFarm/SteamKit2/ServerRecordEndPoint.cs b/ArchiSteamFarm/SteamKit2/ServerRecordEndPoint.cs index 6733e7f89..d3105b998 100644 --- a/ArchiSteamFarm/SteamKit2/ServerRecordEndPoint.cs +++ b/ArchiSteamFarm/SteamKit2/ServerRecordEndPoint.cs @@ -20,6 +20,7 @@ // limitations under the License. using System; +using System.ComponentModel; using Newtonsoft.Json; using SteamKit2; @@ -35,8 +36,16 @@ namespace ArchiSteamFarm.SteamKit2 { internal readonly ProtocolTypes ProtocolTypes; internal ServerRecordEndPoint(string host, ushort port, ProtocolTypes protocolTypes) { - if (string.IsNullOrEmpty(host) || (port == 0) || (protocolTypes == 0)) { - throw new ArgumentNullException(nameof(host) + " || " + nameof(port) + " || " + nameof(protocolTypes)); + if (string.IsNullOrEmpty(host)) { + throw new ArgumentNullException(nameof(host)); + } + + if (port == 0) { + throw new ArgumentOutOfRangeException(nameof(port)); + } + + if (protocolTypes == 0) { + throw new InvalidEnumArgumentException(nameof(protocolTypes), (int) protocolTypes, typeof(ProtocolTypes)); } Host = host;