예제 #1
0
        internal void HandleCommand(Irc irc, string text)
        {
            string[] args = text.Split(' ');
            if (args[0].StartsWith("//") || !args[0].StartsWith("/"))
            {
                if (args[0].StartsWith("//"))
                {
                    args[0] = args[0].Replace("//", "/");
                }
                irc.SendMessage(String.Join(" ", args));
            }
            else if (args[0].StartsWith("/"))
            {
                var cmd = CommandList.Where(command => command.StartsWith(args[0])).ToList();

                if (cmd.Count > 1)
                {
                    irc.ClientMessage("Multiple matches found: " + args[0]);
                    irc.ClientMessage(String.Join(", ", cmd));
                    irc.ClientMessage("Type /help for a list of commands.");

                    return;
                }
                else if (cmd.Count == 1)
                {
                    ((Command)CommandTable[cmd[0]])(irc, args);
                }
                else
                {
                    irc.ClientMessage("Unknown Command: " + text);
                    irc.ClientMessage("Type /help for a list of commands.");
                }
            }
        }
예제 #2
0
        internal void ModeCommandHandler(Irc irc, string[] args)
        {
            if ((args.Length < 3) || (args.Length > 2 && !args[1].StartsWith("#")))
            {
                irc.ClientMessage("Command too short!");
                return;
            }

            var modeLine = "MODE ";

            if (args[1].StartsWith("#"))
            {
                modeLine += args[1] + " " + args[2];

                if (args.Length == 4)
                {
                    modeLine += " " + args[3];
                }
            }
            else
            {
                modeLine += irc.currentChannel + " " + args[1];

                if (args.Length == 3)
                {
                    modeLine += " " + args[2];
                }
            }

            Debug.WriteLine(modeLine);

            irc.WriteLine(modeLine);
        }
예제 #3
0
        internal void BanCommandHandler(Irc irc, string[] args)
        {
            if (args.Length != 2)
            {
                irc.ClientMessage("Wrong params: " + String.Join(" ", args));
                return;
            }

            string[] modeArgs;

            modeArgs = new string[] { "MODE", irc.currentChannel, "+b", args[1] + "!*@*" };

            ModeCommandHandler(irc, modeArgs);
        }
예제 #4
0
        internal void QuietCommandHandler(Irc irc, string[] args)
        {
            if (args.Length != 2)
            {
                irc.ClientMessage("Wrong params: " + String.Join(" ", args));
                return;
            }

            string[] modeArgs;
            if (args[0].ToLower().Contains("unmute"))
            {
                modeArgs = new string[] { "MODE", irc.currentChannel, "-q", args[1] + "!*@*" };
            }
            else
            {
                modeArgs = new string[] { "MODE", irc.currentChannel, "+q", args[1] + "!*@*" };
            }

            ModeCommandHandler(irc, modeArgs);
        }
예제 #5
0
 private void HelpCommandHandler(Irc irc, string[] args)
 {
     irc.ClientMessage("The following commands are available: ");
     irc.ClientMessage(String.Join(", ", CommandList));
 }
예제 #6
0
        public override Task <bool> HandleLine(IrcMessage parsedLine)
        {
            Debug.WriteLine(parsedLine.CommandMessage.Command + " - " + parsedLine.OriginalMessage);

            if (parsedLine.CommandMessage.Parameters.Count > 2)
            {
                var channel = parsedLine.CommandMessage.Parameters[0];

                if (parsedLine.CommandMessage.Parameters.Count == 3)
                {
                    var currentPrefix = Irc.ChannelList[channel].Store.GetPrefix(parsedLine.CommandMessage.Parameters[2]);
                    var prefix        = "";
                    var mode          = parsedLine.CommandMessage.Parameters[1];
                    switch (mode)
                    {
                    case "+o":
                        if (currentPrefix.Length > 0 && currentPrefix[0] == '+')
                        {
                            prefix = "@+";
                        }
                        else
                        {
                            prefix = "@";
                        }

                        break;

                    case "-o":
                        if (currentPrefix.Length > 1 && currentPrefix[1] == '+')
                        {
                            prefix = "+";
                        }
                        else
                        {
                            prefix = "";
                        }

                        break;

                    case "+v":
                        if (currentPrefix.Length > 0 && currentPrefix[0] == '@')
                        {
                            prefix = "@+";
                        }
                        else
                        {
                            prefix = "+";
                        }

                        break;

                    case "-v":
                        if (currentPrefix.Length > 0 && currentPrefix[0] == '@')
                        {
                            prefix = "@";
                        }
                        else
                        {
                            prefix = "";
                        }

                        break;
                    }

                    Irc.ChannelList[channel].Store.ChangePrefix(parsedLine.CommandMessage.Parameters[2], prefix);
                }

                Irc.ClientMessage(channel, "Mode change: " + string.Join(" ", parsedLine.CommandMessage.Parameters));
            }

            return(Task.FromResult(true));
        }