From 5954df7ac5c467b7e2baf590158f124ffa55580f Mon Sep 17 00:00:00 2001 From: Ilia Date: Sat, 25 Feb 2017 17:52:06 +0200 Subject: [PATCH 1/2] !input command --- ArchiSteamFarm/Bot.cs | 37 +++++++++++++++++++++++++++++++++++++ ArchiSteamFarm/Program.cs | 25 ++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 0e9e25b89..07b980ade 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -663,6 +663,14 @@ namespace ArchiSteamFarm { } return await ResponseRedeem(steamID, args[1], ERedeemFlags.ForceForwarding | ERedeemFlags.SkipInitial).ConfigureAwait(false); + case "!INPUT": + if(args.Length > 3) { + return ResponseInput(steamID, args[1], args[2], args[3]); + } else if(args.Length == 3) { + return ResponseInput(steamID, BotName, args[1], args[2]); + } + + return ResponseUnknown(steamID); case "!RESUME": return await ResponseResume(steamID, args[1]).ConfigureAwait(false); case "!START": @@ -2638,6 +2646,35 @@ namespace ArchiSteamFarm { return FormatStaticResponse(Strings.Done); } + private string ResponseInput(ulong steamID, string botName, string propertyName, string inputValue) { + if(steamID == 0) { + ASF.ArchiLogger.LogNullError(nameof(steamID)); + return null; + } + + if(!IsOwner(steamID)) { + return null; + } + + if(!Program.GlobalConfig.Headless) { + //TODO: l10n + return "Avaliable only in headless mode!"; + } + + ASF.EUserInputType inputType = ASF.EUserInputType.Unknown; + + if (!Enum.TryParse(propertyName, out inputType) || inputType == ASF.EUserInputType.Unknown ) { + return ResponseUnknown(steamID); + } + + if (String.IsNullOrEmpty(inputValue)) { + return ResponseUnknown(steamID); + } + + Program.SetUserInput(inputType, botName, inputValue); + + return FormatStaticResponse(Strings.Done); + } private static string ResponseRestart(ulong steamID) { if (steamID == 0) { diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index e4cfe8366..076222363 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -52,6 +52,8 @@ namespace ArchiSteamFarm { private static bool ShutdownSequenceInitialized; + private static Dictionary, string> UserInputs = new Dictionary, string>(); + internal static async Task Exit(byte exitCode = 0) { if (exitCode != 0) { ASF.ArchiLogger.LogGenericError(Strings.ErrorExitingWithNonZeroErrorCode); @@ -66,12 +68,20 @@ namespace ArchiSteamFarm { return null; } + string result; + if (GlobalConfig.Headless || !Runtime.IsUserInteractive) { + var userInputKey = new KeyValuePair(botName, userInputType); + if (UserInputs.ContainsKey(userInputKey)) { + result = UserInputs[userInputKey]; + UserInputs.Remove(userInputKey); + return result; + } + ASF.ArchiLogger.LogGenericWarning(Strings.ErrorUserInputRunningInHeadlessMode); return null; } - string result; lock (ConsoleLock) { Logging.OnUserInputStart(); switch (userInputType) { @@ -114,6 +124,19 @@ namespace ArchiSteamFarm { return !string.IsNullOrEmpty(result) ? result.Trim() : null; } + internal static void SetUserInput(ASF.EUserInputType userInputType, string botName, string userInputValue) { + if (String.IsNullOrEmpty(botName) || String.IsNullOrEmpty(userInputValue) || userInputType == ASF.EUserInputType.Unknown) { + ASF.ArchiLogger.LogGenericWarning(Strings.ErrorObjectIsNull); + return; + } + var userInputKey = new KeyValuePair(botName, userInputType); + if (UserInputs.ContainsKey(userInputKey)) { + UserInputs[userInputKey] = userInputValue; + } else { + UserInputs.Add(userInputKey, userInputValue); + } + } + internal static async Task Restart() { if (!await InitShutdownSequence().ConfigureAwait(false)) { return; From d3c3bcec8f7de702b92d32574e2399b07c7b316f Mon Sep 17 00:00:00 2001 From: Ilia Date: Sat, 25 Feb 2017 18:06:15 +0200 Subject: [PATCH 2/2] SetUserInput for GUI --- GUI/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/GUI/Program.cs b/GUI/Program.cs index 32d5740e1..ae7a37f45 100644 --- a/GUI/Program.cs +++ b/GUI/Program.cs @@ -29,6 +29,7 @@ namespace ArchiSteamFarm { } internal static string GetUserInput(ASF.EUserInputType userInputType, string botName = SharedInfo.ASF, string extraInformation = null) => null; // TODO + internal static string SetUserInput(ASF.EUserInputType userInputType, string botName, string userInputValue, string extraInformation = null) => null; // TODO internal static async Task InitASF() { ASF.ArchiLogger.LogGenericInfo("ASF V" + SharedInfo.Version);