示例#1
0
        public CommandOutput ParseCommand(string sender, string fromChannel, string text, bool isTrustedUser)
        {
            var output = new CommandOutput {
                Type = CommandType.NormalOutput
            };

            try
            {
                HandleCommand(text, sender, fromChannel, output, isTrustedUser);
            }
            catch (Exception ex)
            {
                Controller.LogError(ex, text);

                output.Text.Add("I have encountered an error... please check the last command. This error has been logged.");
            }

            return(output);
        }
示例#2
0
        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);
                }
            }
        }