public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string args = e.Command.ArgumentsAsString; if (string.IsNullOrEmpty(args) == true) { BotProgram.QueueMessage("Usage: \"Input\""); return; } //Parse the input (bool valid, List <List <Parser.Input> > inputList, bool containsStartInput, int durationCounter) parsedData = default; try { string parse_message = Parser.Expandify(Parser.PopulateMacros(args)); parsedData = Parser.Parse(parse_message); } catch { parsedData.valid = false; } if (parsedData.valid == false) { BotProgram.QueueMessage("Invalid input. Note that length cannot be determined for dynamic macros without inputs filled in."); return; } BotProgram.QueueMessage($"Total length: {parsedData.durationCounter}ms"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string[] validInputs = InputGlobals.CurrentConsole.ValidInputs; if (validInputs == null || validInputs.Length == 0) { BotProgram.QueueMessage($"Interesting! There are no valid inputs for {InputGlobals.CurrentConsoleVal}?!"); return; } StrBuilder.Clear(); StrBuilder.Append("Valid inputs for ").Append(InputGlobals.CurrentConsoleVal.ToString()).Append(": "); for (int i = 0; i < validInputs.Length; i++) { StrBuilder.Append(validInputs[i]).Append(", "); } //Remove trailing comma StrBuilder.Remove(StrBuilder.Length - 2, 2); string validInputsStr = StrBuilder.ToString(); BotProgram.QueueMessage(validInputsStr); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string logMessage = e.Command.ArgumentsAsString; if (string.IsNullOrEmpty(logMessage) == true) { BotProgram.QueueMessage("Please enter a message for the log."); return; } DateTime curTime = DateTime.UtcNow; //Add a new log GameLog newLog = new GameLog(); newLog.LogMessage = logMessage; newLog.User = e.Command.ChatMessage.Username; string date = curTime.ToShortDateString(); string time = curTime.ToLongTimeString(); newLog.DateTimeString = $"{date} at {time}"; BotProgram.BotData.Logs.Add(newLog); BotProgram.SaveBotData(); BotProgram.QueueMessage("Successfully logged message!"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count > 1) { BotProgram.QueueMessage("Usage: \"username\""); return; } string username = string.Empty; //If no arguments are specified, use the name of the user who performed the command if (args.Count == 0) { username = e.Command.ChatMessage.Username; } else { username = args[0]; } User user = BotProgram.GetUser(username, false); if (user == null) { BotProgram.QueueMessage($"User does not exist in database!"); return; } //Print the user's information BotProgram.QueueMessage($"User: {user.Name} | Level: {user.Level} | Total Inputs: {user.ValidInputs} | Total Messages: {user.TotalMessages}"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string displayLower = e.Command.ChatMessage.DisplayName.ToLower(); if (GroupDuelCommand.UsersInDuel.ContainsKey(displayLower) == false) { BotProgram.QueueMessage("You're not in the group duel!"); return; } else { long betAmt = GroupDuelCommand.UsersInDuel[displayLower]; GroupDuelCommand.UsersInDuel.Remove(displayLower); BotProgram.QueueMessage($"{e.Command.ChatMessage.DisplayName} has backed out of the group duel and retained their {betAmt} credit(s)!"); //Check for ending the group duel if there are no longer enough participants if (GroupDuelCommand.DuelStarted == true && GroupDuelCommand.UsersInDuel.Count < GroupDuelCommand.MinUsersForDuel) { GroupDuelCommand.StopGroupDuel(); int count = GroupDuelCommand.UsersInDuel.Count; BotProgram.QueueMessage($"Oh no! The group duel has ended since there no longer enough participants. {GroupDuelCommand.MinUsersForDuel - count} more is/are required to start it up again!"); } } }
public override void HandleArgsOnConsoleChange(List <string> arguments) { if (arguments?.Count == 0) { return; } for (int i = 0; i < arguments.Count; i++) { //Check for enum mode if (Enum.TryParse(arguments[i], true, out InputModes mode) == true) { InputMode = mode; BotProgram.QueueMessage($"Changed Wii input mode to {mode}!"); } //Kimimaru: I'm debating including the ability to set it by number, so we'll keep it commented until a decision is made //if (int.TryParse(arguments[i], out int inputMode) == true) //{ // InputModes newInputMode = (InputModes)inputMode; // InputMode = (InputModes)inputMode; // Console.WriteLine($"Changed Wii input mode to {newInputMode}"); //} } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { Expression exp = null; try { string expression = e.Command.ChatMessage.Message.Replace($"{Globals.CommandIdentifier}calculate", string.Empty); exp = new Expression(expression); exp.Options = EvaluateOptions.IgnoreCase; exp.EvaluateParameter += Exp_EvaluateParameter; exp.EvaluateFunction += Exp_EvaluateFunction; string finalExpr = exp.Evaluate().ToString(); //string finalExpr = CalculateTable.Compute(expression, null).ToString(); BotProgram.QueueMessage(finalExpr); } catch (Exception exc) { Console.WriteLine(exc.Message); BotProgram.QueueMessage(exc.Message);//"Sorry, I can't calculate that!"); } finally { if (exp != null) { exp.EvaluateParameter -= Exp_EvaluateParameter; exp.EvaluateFunction -= Exp_EvaluateFunction; } } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args == null || args.Count <= 0) { BotProgram.QueueMessage("Choose one or more people to high five!"); return; } string highFive = string.Empty; for (int i = 0; i < args.Count; i++) { int nextInd = i + 1; if (i > 0) { highFive += ", "; if (nextInd == args.Count) { highFive += "and "; } } highFive += args[i]; } BotProgram.QueueMessage($"{e.Command.ChatMessage.DisplayName} high fives {highFive}!"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { //Reload settings and bot data BotProgram.LoadSettingsAndBotData(); BotProgram.QueueMessage("Reloaded bot settings and data!"); }
private async void ExecuteCSharpScript(string code) { //Kimimaru: Store the default console output stream TextWriter defaultOut = Console.Out; try { //Kimimaru: Output any Console output to the chat //To do this, we're overriding the Console's output stream using (BotWriter writer = new BotWriter()) { Console.SetOut(writer); BotProgram.IgnoreConsoleLog = true; var script = await CSharpScript.RunAsync(code, ScriptCompileOptions); Console.SetOut(defaultOut); BotProgram.IgnoreConsoleLog = false; } } catch (CompilationErrorException exception) { BotProgram.QueueMessage($"Compiler error: {exception.Message}"); } //Regardless of what happens, return the output stream to the default finally { Console.SetOut(defaultOut); BotProgram.IgnoreConsoleLog = false; } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string msg = e.Command.ArgumentsAsString; if (msg == null) { msg = string.Empty; } BotProgram.BotData.GameMessage = msg; //Always save the message to a file so it updates on OBS /*For reading from this file on OBS: * 1. Create Text (GDI+) * 2. Check the box labeled "Read from file" * 3. Browse and select the file */ if (Globals.SaveToTextFile(MessageFile, BotProgram.BotData.GameMessage) == false) { BotProgram.QueueMessage($"Unable to save message to file"); } BotProgram.SaveBotData(); }
public void HandleCommand(object sender, OnChatCommandReceivedArgs e) { if (e == null || e.Command == null || e.Command.ChatMessage == null) { Console.WriteLine($"{nameof(OnChatCommandReceivedArgs)} or its Command or ChatMessage is null! Not parsing command"); return; } string userToLower = e.Command.ChatMessage.DisplayName.ToLower(); //Don't handle certain users (Ex. MrMacroBot) if (ExemptUsers.Contains(userToLower) == true) { Console.WriteLine($"User {e.Command.ChatMessage.DisplayName} is exempt and I won't take commands from them"); return; } User user = BotProgram.GetOrAddUser(userToLower); string commandToLower = e.Command.CommandText.ToLower(); if (CommandDict.TryGetValue(commandToLower, out BaseCommand command) == true) { //Handle permissions if (user.Level >= command.AccessLevel) { command.ExecuteCommand(sender, e); } else { BotProgram.QueueMessage(INVALID_ACCESS_MESSAGE); } } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { int randinspiration = Rand.Next(0, RandomInspiration.Length); string message = RandomInspiration[randinspiration].Replace("{name}", e.Command.ChatMessage.DisplayName); BotProgram.QueueMessage(message); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> amount = e.Command.ArgumentsAsList; if (amount.Count != 1) { BotProgram.QueueMessage($"Sorry, please enter a valid bet amount!"); return; } if (long.TryParse(amount[0], out long creditBet) == true) { if (creditBet <= 0) { BotProgram.QueueMessage("Bet amount must be greater than 0!"); return; } string name = e.Command.ChatMessage.DisplayName; string nameToLower = name.ToLower(); User user = BotProgram.GetOrAddUser(nameToLower); long credits = user.Credits; if (creditBet > credits) { BotProgram.QueueMessage("Bet amount is greater than credits!"); } else { bool success = (Rand.Next(0, 2) == 0); string message = string.Empty; if (success) { credits += creditBet; message = $"{name} won {creditBet} credits :D !"; } else { credits -= creditBet; message = $"{name} lost {creditBet} credits :("; } BotProgram.QueueMessage(message); user.Credits = credits; BotProgram.SaveBotData(); } } else { BotProgram.QueueMessage($"Sorry, please enter a valid bet amount!"); } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; //If a username was specified, view that user's silenced state if (args.Count == 1) { string username = args[0].ToLowerInvariant(); User user = BotProgram.GetUser(username); if (user == null) { BotProgram.QueueMessage($"User does not exist in database!"); } else { if (user.Silenced == false) { BotProgram.QueueMessage($"User {username} is not currently silenced and can perform inputs."); } else { BotProgram.QueueMessage($"User {username} is currently silenced and cannot perform inputs."); } } return; } //No arguments, so print all users who are silenced if (BotProgram.BotData.SilencedUsers.Count == 0) { BotProgram.QueueMessage("No users are silenced. Hurray!"); return; } //Copy for safety in case this gets modified during iteration string[] silencedNames = new string[BotProgram.BotData.SilencedUsers.Count]; BotProgram.BotData.SilencedUsers.CopyTo(silencedNames); StrBuilder.Clear(); StrBuilder.Append("Currently silenced users: "); for (int i = 0; i < silencedNames.Length; i++) { StrBuilder.Append(silencedNames[i]).Append(", "); } //Remove trailing comma StrBuilder.Remove(StrBuilder.Length - 2, 2); string silencedStr = StrBuilder.ToString(); BotProgram.QueueMessage(silencedStr); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { if (string.IsNullOrEmpty(BotProgram.BotData.InfoMessage) == true) { BotProgram.QueueMessage(EmptyMessage); return; } BotProgram.QueueMessage(BotProgram.BotData.InfoMessage); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { if (BotProgram.BotData != null && BotProgram.BotData.JRData != null) { BotProgram.QueueMessage($"The biggest jump rope streak is {BotProgram.BotData.JRData.Streak}!"); } else { BotProgram.QueueMessage("Something went wrong - I can't find the highest Jump Rope streak!"); } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args == null || args.Count != 2) { BotProgram.QueueMessage("Please specify a single user followed by the amount of credits you wish to transfer!"); return; } string giver = e.Command.ChatMessage.DisplayName; string giverToLower = giver.ToLower(); string receiver = args[0]; string receiverToLower = receiver.ToLower(); if (giverToLower == receiverToLower) { BotProgram.QueueMessage("You cannot transfer points to yourself!"); return; } //If the user transferring points isn't in the database, add them User giverUser = BotProgram.GetOrAddUser(giverToLower); User receiverUser = BotProgram.GetUser(receiverToLower); if (receiverUser == null) { BotProgram.QueueMessage($"{receiver} is not in the database!"); return; } long transferAmount = -1L; bool success = long.TryParse(args[1], out transferAmount); if (success == false || transferAmount <= 0) { BotProgram.QueueMessage("Please specify a positive whole number of credits greater than 0!"); return; } if (giverUser.Credits < transferAmount) { BotProgram.QueueMessage("The transfer amount is greater than your credits!"); return; } giverUser.Credits -= transferAmount; receiverUser.Credits += transferAmount; BotProgram.SaveBotData(); BotProgram.QueueMessage($"{giver} has transferred {transferAmount} points to {receiver} :D !"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { string code = e.Command.ArgumentsAsString; if (string.IsNullOrEmpty(code) == true) { BotProgram.QueueMessage($"Usage: \"C# code\""); return; } ExecuteCSharpScript(code); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count < 2) { BotProgram.QueueMessage($"{Globals.CommandIdentifier}addmeme usage: memename memevalue"); return; } if (args[0].ElementAt(0) == Globals.CommandIdentifier) { BotProgram.QueueMessage($"Memes cannot start with \'{Globals.CommandIdentifier}\'"); return; } if (args[0].ElementAt(0) == Globals.MacroIdentifier) { BotProgram.QueueMessage($"Memes cannot start with \'{Globals.MacroIdentifier}\'"); return; } if (args[0].Length > MAX_MEME_LENGTH) { BotProgram.QueueMessage($"The max meme length is {MAX_MEME_LENGTH} characters!"); return; } string memeToLower = args[0].ToLower(); bool sendOverwritten = false; if (BotProgram.BotData.Memes.ContainsKey(memeToLower) == true) { BotProgram.BotData.Memes.Remove(memeToLower); sendOverwritten = true; } string actualMeme = e.Command.ArgumentsAsString.Remove(0, args[0].Length + 1); BotProgram.BotData.Memes.Add(memeToLower, actualMeme); BotProgram.SaveBotData(); if (sendOverwritten == true) { BotProgram.QueueMessage("Meme overwritten!"); } else { MemesCommand.CacheMemesString(); } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { if (BotProgram.BotData.Macros.Count == 0) { BotProgram.QueueMessage("There are no macros!"); return; } List <string> macros = BotProgram.BotData.Macros.Keys.ToList(); MultiMessageCache.Clear(); StrBuilder.Clear(); for (int i = 0; i < macros.Count; i++) { string macroName = macros[i]; int newLength = StrBuilder.Length + macroName.Length + 3; int maxLength = Globals.BotCharacterLimit; if (MultiMessageCache.Count == 0) { maxLength -= InitMessage.Length; } //Send in multiple messages if it exceeds the length if (newLength >= maxLength) { MultiMessageCache.Add(StrBuilder.ToString()); StrBuilder.Clear(); } StrBuilder.Append(macroName).Append(", "); } StrBuilder.Remove(StrBuilder.Length - 2, 2); MultiMessageCache.Add(StrBuilder.ToString()); for (int i = 0; i < MultiMessageCache.Count; i++) { if (i == 0) { BotProgram.QueueMessage($"{InitMessage}{MultiMessageCache[i]}"); } else { BotProgram.QueueMessage(MultiMessageCache[i]); } } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; //See the console if (args.Count == 0) { BotProgram.QueueMessage($"The current console is {InputGlobals.CurrentConsoleVal}. To set the console, add one as an argument: {GetValidConsoleStr()}"); return; } string consoleStr = args[0]; if (Enum.TryParse <InputGlobals.InputConsoles>(consoleStr, true, out InputGlobals.InputConsoles console) == false) { BotProgram.QueueMessage($"Please enter a valid console: {GetValidConsoleStr()}"); return; } if (console == InputGlobals.CurrentConsoleVal) { BotProgram.QueueMessage($"The current console is already {InputGlobals.CurrentConsoleVal}!"); return; } //First stop all inputs completely while changing consoles - we don't want data from other inputs remaining InputHandler.CancelRunningInputs(); //Wait until no inputs are running while (InputHandler.CurrentRunningInputs > 0) { } //Set console and buttons InputGlobals.SetConsole(console, args); for (int i = 0; i < VJoyController.Joysticks.Length; i++) { if (VJoyController.Joysticks[i].IsAcquired == true) { VJoyController.Joysticks[i].SetButtons(InputGlobals.CurrentConsoleVal); } } //Resume inputs InputHandler.ResumeRunningInputs(); BotProgram.QueueMessage($"Set console to {InputGlobals.CurrentConsoleVal} and reset all running inputs!"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count < 1) { BotProgram.QueueMessage("Usage: state #"); return; } string stateNumStr = args[0]; if (int.TryParse(stateNumStr, out int stateNum) == false) { BotProgram.QueueMessage("Invalid state number."); return; } string saveStateStr = $"savestate{stateNum}"; if (InputGlobals.CurrentConsole.ButtonInputMap.ContainsKey(saveStateStr) == false) { BotProgram.QueueMessage("Invalid state number."); return; } //Get the state log GameLog stateLog = null; if (BotProgram.BotData.SavestateLogs.TryGetValue(stateNum, out stateLog) == false) { BotProgram.QueueMessage("This state has not yet been saved!"); return; } string message = string.Empty; //Show the log message if one was input if (string.IsNullOrEmpty(stateLog.LogMessage) == false) { message = $"State {stateNum}, \"{stateLog.LogMessage}\", saved by {stateLog.User} on {stateLog.DateTimeString} (UTC)"; } else { message = $"State {stateNum}, saved by {stateLog.User} on {stateLog.DateTimeString} (UTC)"; } BotProgram.QueueMessage(message); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { BotProgram.QueueMessage(Messages[Attempts]); if (Attempts >= (Messages.Count - 2)) { BotProgram.QueueMessage(Messages[Attempts + 1]); Attempts = 0; } else { Attempts++; } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { if (MemesCache.Count == 0) { BotProgram.QueueMessage("There are none!"); return; } for (int i = 0; i < MemesCache.Count; i++) { string message = (i == 0) ? InitMessage : string.Empty; message += MemesCache[i]; BotProgram.QueueMessage(message); } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { if (e.Command.ChatMessage.Message.Length > 5) { string realMsg = e.Command.ChatMessage.Message.Remove(0, 5).Trim();// + ". The statement said to me expresses the views of the one instructing me, not myself :D"; if (realMsg.StartsWith("/") == true) { BotProgram.QueueMessage("I can't say any Twitch chat commands for you - no hard feelings!"); } else { BotProgram.QueueMessage(realMsg); } } }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count != 1) { BotProgram.QueueMessage("Usage: \"username\""); return; } string silencedName = args[0].ToLowerInvariant(); string selfName = e.Command.ChatMessage.Username.ToLowerInvariant(); if (silencedName == selfName) { BotProgram.QueueMessage("No use in silencing yourself, silly!"); return; } User user = BotProgram.GetUser(silencedName); if (user == null) { BotProgram.QueueMessage($"User does not exist in database!"); return; } if (user.Silenced == true) { BotProgram.QueueMessage($"User {silencedName} is already silenced!"); return; } //Make sure the user you're silencing is a lower level than you User selfUser = BotProgram.GetUser(selfName); if (selfUser.Level <= user.Level) { BotProgram.QueueMessage($"Cannot silence a user at or above your access level!"); return; } user.Silenced = true; BotProgram.BotData.SilencedUsers.Add(silencedName); BotProgram.SaveBotData(); BotProgram.QueueMessage($"User {silencedName} has been silenced and thus prevented from performing inputs."); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count == 0) { BotProgram.QueueMessage($"The max duration of an input sequence is {BotProgram.BotData.MaxInputDuration} milliseconds!"); return; } User user = BotProgram.GetOrAddUser(e.Command.ChatMessage.Username, false); //Disallow setting the duration if the user doesn't have a sufficient access level if (user.Level < SetAccessLevel) { BotProgram.QueueMessage(CommandHandler.INVALID_ACCESS_MESSAGE); return; } if (args.Count > 1) { BotProgram.QueueMessage($"Usage: \"duration (ms)\""); return; } if (int.TryParse(args[0], out int newMaxDur) == false) { BotProgram.QueueMessage("Please enter a valid number!"); return; } if (newMaxDur < 0) { BotProgram.QueueMessage("Cannot set a negative duration!"); return; } if (newMaxDur == BotProgram.BotData.MaxInputDuration) { BotProgram.QueueMessage("The duration is already this value!"); return; } BotProgram.BotData.MaxInputDuration = newMaxDur; BotProgram.SaveBotData(); BotProgram.QueueMessage($"Set max input sequence duration to {newMaxDur} milliseconds!"); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { List <string> args = e.Command.ArgumentsAsList; if (args.Count != 1) { BotProgram.QueueMessage("Usage: \"username\""); return; } string unsilencedName = args[0].ToLowerInvariant(); string selfName = e.Command.ChatMessage.Username.ToLowerInvariant(); if (unsilencedName == selfName) { BotProgram.QueueMessage("Nice try."); return; } User user = BotProgram.GetUser(unsilencedName); if (user == null) { BotProgram.QueueMessage($"User does not exist in database!"); return; } if (user.Silenced == false) { BotProgram.QueueMessage($"User {unsilencedName} is not silenced!"); return; } //Make sure the user you're silencing is a lower level than you User selfUser = BotProgram.GetUser(selfName); if (selfUser.Level <= user.Level) { BotProgram.QueueMessage($"Cannot unsilence a user at or above your access level!"); return; } user.Silenced = false; BotProgram.BotData.SilencedUsers.Remove(unsilencedName); BotProgram.SaveBotData(); BotProgram.QueueMessage($"User {unsilencedName} has been unsilenced and can perform inputs once again."); }
public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e) { int numLogs = BotProgram.BotData.Logs.Count; if (numLogs == 1) { BotProgram.QueueMessage("There is 1 game log!"); } else if (numLogs > 0) { BotProgram.QueueMessage($"There are {numLogs} game logs!"); } else { BotProgram.QueueMessage("There are no game logs!"); } }