diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 656d3412e..02ecb6a5b 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -1411,14 +1411,7 @@ namespace ArchiSteamFarm { return; } - string response = await Commands.Response(steamID, message).ConfigureAwait(false); - - // We respond with null when user is not authorized (and similar) - if (string.IsNullOrEmpty(response)) { - return; - } - - await SendMessage(chatGroupID, chatID, response).ConfigureAwait(false); + await Commands.HandleMessage(chatGroupID, chatID, steamID, message).ConfigureAwait(false); } private async Task HandleMessage(ulong steamID, string message) { @@ -1428,14 +1421,7 @@ namespace ArchiSteamFarm { return; } - string response = await Commands.Response(steamID, message).ConfigureAwait(false); - - // We respond with null when user is not authorized (and similar) - if (string.IsNullOrEmpty(response)) { - return; - } - - await SendMessage(steamID, response).ConfigureAwait(false); + await Commands.HandleMessage(steamID, message).ConfigureAwait(false); } private async Task HeartBeat() { diff --git a/ArchiSteamFarm/Commands.cs b/ArchiSteamFarm/Commands.cs index a8a71e926..2850f4ee8 100644 --- a/ArchiSteamFarm/Commands.cs +++ b/ArchiSteamFarm/Commands.cs @@ -71,8 +71,13 @@ namespace ArchiSteamFarm { return "<" + SharedInfo.ASF + "> " + response; } + [Obsolete("Use Response(steamID, message) instead, useCommandPrefix is obsolete and no longer used (same as false), this method will be removed in the next ASF version.", true)] [PublicAPI] + [SuppressMessage("ReSharper", "MethodOverloadWithOptionalParameter")] public async Task Response(ulong steamID, string message, bool useCommandPrefix = true) { + // TODO: Delete the method entirely in the next ASF version + ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningDeprecated, "[API] Response(steamID, message, useCommandPrefix)", "[API] Response(steamID, message)")); + if ((steamID == 0) || string.IsNullOrEmpty(message)) { Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message)); @@ -89,6 +94,17 @@ namespace ArchiSteamFarm { message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length); } + return await Response(steamID, message).ConfigureAwait(false); + } + + [PublicAPI] + public async Task Response(ulong steamID, string message) { + if ((steamID == 0) || string.IsNullOrEmpty(message)) { + Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message)); + + return null; + } + string[] args = message.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries); switch (args.Length) { @@ -371,6 +387,88 @@ namespace ArchiSteamFarm { } } + internal async Task HandleMessage(ulong steamID, string message) { + if ((steamID == 0) || string.IsNullOrEmpty(message)) { + Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message)); + + return; + } + + if (!string.IsNullOrEmpty(ASF.GlobalConfig.CommandPrefix)) { + if (!message.StartsWith(ASF.GlobalConfig.CommandPrefix, StringComparison.OrdinalIgnoreCase)) { + string pluginsResponse = await Core.OnBotMessage(Bot, steamID, message).ConfigureAwait(false); + + if (!string.IsNullOrEmpty(pluginsResponse)) { + await Bot.SendMessage(steamID, pluginsResponse).ConfigureAwait(false); + } + + return; + } + + message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length); + } + + bool feedback = Bot.HasPermission(steamID, BotConfig.EPermission.FamilySharing); + + if (feedback) { + await Bot.SendMessage(steamID, FormatBotResponse(Strings.PleaseWait)).ConfigureAwait(false); + } + + string response = await Response(steamID, message).ConfigureAwait(false); + + if (string.IsNullOrEmpty(response)) { + if (!feedback) { + return; + } + + Bot.ArchiLogger.LogNullError(nameof(response)); + response = FormatBotResponse(Strings.UnknownCommand); + } + + await Bot.SendMessage(steamID, response).ConfigureAwait(false); + } + + internal async Task HandleMessage(ulong chatGroupID, ulong chatID, ulong steamID, string message) { + if ((chatGroupID == 0) || (chatID == 0) || (steamID == 0) || string.IsNullOrEmpty(message)) { + Bot.ArchiLogger.LogNullError(nameof(chatGroupID) + " || " + nameof(chatID) + " || " + nameof(steamID) + " || " + nameof(message)); + + return; + } + + if (!string.IsNullOrEmpty(ASF.GlobalConfig.CommandPrefix)) { + if (!message.StartsWith(ASF.GlobalConfig.CommandPrefix, StringComparison.OrdinalIgnoreCase)) { + string pluginsResponse = await Core.OnBotMessage(Bot, steamID, message).ConfigureAwait(false); + + if (!string.IsNullOrEmpty(pluginsResponse)) { + await Bot.SendMessage(chatGroupID, chatID, pluginsResponse).ConfigureAwait(false); + } + + return; + } + + message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length); + } + + bool feedback = Bot.HasPermission(steamID, BotConfig.EPermission.FamilySharing); + + if (feedback) { + await Bot.SendMessage(chatGroupID, chatID, FormatBotResponse(Strings.PleaseWait)).ConfigureAwait(false); + } + + string response = await Response(steamID, message).ConfigureAwait(false); + + if (string.IsNullOrEmpty(response)) { + if (!feedback) { + return; + } + + Bot.ArchiLogger.LogNullError(nameof(response)); + response = FormatBotResponse(Strings.UnknownCommand); + } + + await Bot.SendMessage(chatGroupID, chatID, response).ConfigureAwait(false); + } + internal void OnNewLicenseList() { lock (CachedGamesOwned) { CachedGamesOwned.Clear(); diff --git a/ArchiSteamFarm/IPC/Controllers/Api/CommandController.cs b/ArchiSteamFarm/IPC/Controllers/Api/CommandController.cs index a6854a1fd..b08149818 100644 --- a/ArchiSteamFarm/IPC/Controllers/Api/CommandController.cs +++ b/ArchiSteamFarm/IPC/Controllers/Api/CommandController.cs @@ -59,7 +59,7 @@ namespace ArchiSteamFarm.IPC.Controllers.Api { command = command.Substring(ASF.GlobalConfig.CommandPrefix.Length); } - string response = await targetBot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, command, false).ConfigureAwait(false); + string response = await targetBot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, command).ConfigureAwait(false); return Ok(new GenericResponse(response)); } diff --git a/ArchiSteamFarm/Localization/Strings.Designer.cs b/ArchiSteamFarm/Localization/Strings.Designer.cs index b4f832876..66f470a92 100644 --- a/ArchiSteamFarm/Localization/Strings.Designer.cs +++ b/ArchiSteamFarm/Localization/Strings.Designer.cs @@ -1170,6 +1170,15 @@ namespace ArchiSteamFarm.Localization { } } + /// + /// Wyszukuje zlokalizowany ciąg podobny do ciągu Please wait.... + /// + public static string PleaseWait { + get { + return ResourceManager.GetString("PleaseWait", resourceCulture); + } + } + /// /// Wyszukuje zlokalizowany ciąg podobny do ciągu {0} has been loaded successfully!. /// diff --git a/ArchiSteamFarm/Localization/Strings.resx b/ArchiSteamFarm/Localization/Strings.resx index c5d7aecd3..a7280f91f 100644 --- a/ArchiSteamFarm/Localization/Strings.resx +++ b/ArchiSteamFarm/Localization/Strings.resx @@ -693,4 +693,7 @@ StackTrace: You've loaded one or more of custom plugins into the ASF. Since we're unable to offer a support for modded setups, please reach the appropriate developers of the plugins that you decided to use in case of any issues. + + Please wait... + \ No newline at end of file