private void HandleCommand(string text, string sender, string fromChannel, CommandOutput output, bool isTrustedUser) { string command = text.Split(' ')[0].Substring(1); string parameters = ""; if (text.IndexOf(' ') > 0) { parameters = text.Substring(text.IndexOf(' ')).Trim(); } var matchedCommand = MatchCommand(command); // I want to keep "!add" as a command. if (matchedCommand.Count > 1 && matchedCommand.Contains("add")) { matchedCommand.Clear(); matchedCommand.Add("add"); } if (matchedCommand.Count == 1) { output.MatchedCommand = true; switch (matchedCommand[0]) { case "add": if (sender == "dessyreqt") { var newCommand = parameters.Substring(0, parameters.IndexOf(' ')).Trim(); var newText = parameters.Substring(parameters.IndexOf(' ')).Trim(); CustomCommands.Add(newCommand, newText); } break; case "delete": if (sender == "dessyreqt") { CustomCommands.Delete(parameters); } break; case "drops": if (parameters.Length > 2) { output.Text.AddRange(OutputDrops(parameters)); } break; case "summon": var channel = SummonToChannel(parameters); if (channel != "") { output.Text.Add(SummonToChannel(parameters)); output.Type = CommandType.JoinChannel; } break; case "randnum": case "randomnumber": output.Text.Add(GetRandomNumber(parameters).ToString()); break; case "randlist": case "randomlist": case "randomizelist": output.Text.Add(GetRandomList(parameters)); break; case "fight": output.Text.AddRange(GetFightInfo(parameters)); break; case "addquote": if (isTrustedUser && Quotes.Validate(parameters)) { Quotes.Add(parameters); output.Text.Add(string.Format("Quote added! {0} quotes in the database.", Quotes.GetCount())); } break; case "quote": var quote = Quotes.GetRandom(); int quoteId; if (parameters.Length > 0 && int.TryParse(parameters, out quoteId)) { var tempQuote = new Quote { QuoteId = quoteId, QuoteText = Quotes.Get(quoteId) }; if (tempQuote.QuoteText != null) { quote = tempQuote; } } lastQuote[fromChannel] = quote.QuoteId; output.Text.Add(FormatQuote(quote)); break; case "delquote": if (isTrustedUser) { if (parameters.Length > 0 && int.TryParse(parameters, out quoteId)) { Quotes.Delete(quoteId); output.Text.Add("That terrible quote has been deleted. Good riddance!"); } else if (lastQuote.ContainsKey(fromChannel)) { Quotes.Delete(lastQuote[fromChannel]); output.Text.Add("That terrible quote has been deleted. Good riddance!"); } } break; case "insult": var insultTo = GetInsultTarget(sender, fromChannel, parameters); var insult = Insults.Get(); output.Text.Add(string.Format("{0}, you're nothing but {1}", insultTo, insult)); break; case "compliment": var complimentTo = GetInsultTarget(sender, fromChannel, parameters); var compliment = Insults.Get(); output.Text.Add(string.Format("{0}, you're decent for {1}", complimentTo, compliment)); break; case "listquotes": if (isTrustedUser) { output.Text.Add(ListQuotes()); } break; case "addc": if (isTrustedUser) { var newCommand = string.Format("{0}+{1}", parameters.Substring(0, parameters.IndexOf(' ')).Trim().Replace("+", ""), fromChannel); var newText = parameters.Substring(parameters.IndexOf(' ')).Trim(); CustomCommands.Add(newCommand, newText); } break; case "delc": if (isTrustedUser) { var commandName = string.Format("{0}+{1}", parameters, fromChannel); CustomCommands.Delete(commandName); } break; } } else if (matchedCommand.Count == 0) { var commandOutput = CustomCommands.Get(string.Format("{0}+{1}", command, fromChannel)); if (commandOutput != null) { commandOutput = commandOutput.Replace("{sender}", sender); commandOutput = commandOutput.Replace("{streamer}", fromChannel.Remove(0, 1)); commandOutput = commandOutput.Replace("{oatsavgceres}", OatsCeres.GetAvgTime()); output.Text.Add(commandOutput); } else if ((commandOutput = CustomCommands.Get(command)) != null) { commandOutput = commandOutput.Replace("{sender}", sender); commandOutput = commandOutput.Replace("{streamer}", fromChannel.Remove(0, 1)); output.Text.Add(commandOutput); } } }