Пример #1
0
        private string FormatResponse(string fromChannel, string sender, string text)
        {
            var retVal = Response;

            retVal = retVal.Replace("{sender}", sender);
            retVal = retVal.Replace("{SENDER}", sender.ToUpper());
            retVal = retVal.Replace("{streamer}", fromChannel.Remove(0, 1));
            retVal = retVal.Replace("{STREAMER}", fromChannel.Remove(0, 1).ToUpper());
            retVal = retVal.Replace("{oatsavgceres}", OatsCeres.GetAvgTime());

            foreach (Match match in Regex.Matches(retVal, "{randtime (?<Time>\\d+)}"))
            {
                var randTime = Randomizer.GetRandomizer().GetRandomTime(int.Parse(match.Groups["Time"].Value));

                retVal = retVal.Replace(match.Value, randTime.Hours > 0 ? randTime.ToString("h':'mm':'ss") : randTime.ToString("m':'ss"));
            }

            foreach (Match match in Regex.Matches(retVal, "{randnum (?<UpperBound>\\d+)}"))
            {
                var randNum = Randomizer.GetRandomizer().GetRandomNumber(int.Parse(match.Groups["UpperBound"].Value));

                retVal = retVal.Replace(match.Value, randNum.ToString());
            }

            foreach (Match match in Regex.Matches(retVal, "{randnum (?<LowerBound>\\d+) (?<UpperBound>\\d+)}"))
            {
                var randNum = Randomizer.GetRandomizer().GetRandomNumber(int.Parse(match.Groups["LowerBound"].Value), int.Parse(match.Groups["UpperBound"].Value));

                retVal = retVal.Replace(match.Value, randNum.ToString());
            }

            return(retVal);
        }
Пример #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);
                }
            }
        }