Ejemplo n.º 1
0
        public static void cmdPart(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /part <channel> [reason]");
                return;
            }

            parts = Parameters.Split(null);

            if (parts.Length < 2)
            {
                aPage.MessageInfo("Usage: /part <channel> [reason]");
                return;
            }

            if (parts.Length == 2)
            {
                aPage.Server.IRCSend("PART " + parts[1]);
            }
            else
            {
                aPage.Server.IRCSend("PART " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2));
            }
        }
Ejemplo n.º 2
0
        // Format for command procedures:
        // private static void Cmd<cmdname>(string sender, string command, string[] parameters, mcPage page) { code... }

        #region "Numerics"
        #region "000 Series"
        private static void Cmd001(string prefix, string command, string[] parameters, mcPage page)
        {
            string[] userhost;
            //<- :devel.rburchell.org 001 w-mirc :Welcome to the Symmetic IRC Network [email protected]
            page.Server.ServerName             = prefix;                 /* this is a good time to find the real name */
            page.Server.ServerPage.MyNode.Text = page.Server.ServerName;
            page.Server.ServerPage.Text        = page.Server.ServerName; /* and make sure the node matches 8) */
            //split param 3 to get network name..
            userhost = parameters[1].Split(' ');

            if (System.IO.File.Exists(".\\networks\\" + userhost[3] + "\\network.dat"))
            {
                page.MessageInfo("Network " + userhost[3] + " is a known network.");
                /* We have a networks file. */
                mcNetwork NewNetwork = mcNetwork.GetNetwork(userhost[3]);
                page.Server.IRCSend("NICK " + NewNetwork.Nickname);
                /* assume that user/real is already valid. */
                //todo: add this to the list of servers?
                //page.Server.ServerSocket.RemoteHost
                foreach (string str in NewNetwork.Perform)
                {
                    if (str[0] != '#')
                    {
                        /* the "P" is stripped automagically */
                        page.MessageInfo("Doing PERFORM " + str);
                        page.Server.IRCSend(str);
                    }
                }
            }
            else
            {
                page.MessageInfo("Network " + userhost[3] + " is not a known network.");
            }
        }
Ejemplo n.º 3
0
 public static void cmdNick(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /nick <new_name>");
         return;
     }
     aPage.Server.IRCSend("NICK " + Parameters);
 }
Ejemplo n.º 4
0
 public static void cmdJoin(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /join <channel>");
         return;
     }
     aPage.Server.IRCSend("JOIN " + Parameters);
 }
Ejemplo n.º 5
0
 public static void cmdSay(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /say <text>");
         return;
     }
     aPage.Server.IRCSend("PRIVMSG " + aPage.Text + " :" + Parameters);
     aPage.MessageUser(aPage.Server.MyNickname, Parameters);
 }
Ejemplo n.º 6
0
        public static void cmdCTCPReply(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /ctcpreply <target> <ctcp>]");
                return;
            }

            parts = Parameters.Split(null);

            if (parts.Length < 3)
            {
                aPage.MessageInfo("Usage: /ctcpreply <target> <ctcp>");
                return;
            }

            aPage.Server.IRCSend("NOTICE " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2) + "");
            aPage.MessageNotice(aPage.Server.MyNickname, "CTCPREPLY " + parts[1] + " " + Parameters.Substring(parts[1].Length + 2));
        }
Ejemplo n.º 7
0
        public static void cmdMe(mcPage aPage, string Parameters)
        {
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /me <does stuff>");
                return;
            }

            aPage.Server.IRCSend("PRIVMSG " + aPage.Text + " :ACTION" + Parameters + "");
            aPage.MessageAction(aPage.Server.MyNickname, Parameters);
        }
Ejemplo n.º 8
0
        public static void cmdCTCPReply(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /ctcpreply <target> <ctcp>]");
                return;
            }

            parts = Parameters.Split(null);

            if(parts.Length < 3)
            {
                aPage.MessageInfo("Usage: /ctcpreply <target> <ctcp>");
                return;
            }

            aPage.Server.IRCSend("NOTICE " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2) + "");
            aPage.MessageNotice(aPage.Server.MyNickname, "CTCPREPLY " + parts[1] + " " + Parameters.Substring(parts[1].Length + 2));
        }
Ejemplo n.º 9
0
        public static void cmdMsg(mcPage aPage, string Parameters)
        {
            string[] parts;

            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /msg <nickname> <message>");
                return;
            }

            parts = Parameters.Split(null);

            if (parts.Length < 3)
            {
                aPage.MessageInfo("Usage: /msg <nickname> <message>");
                return;
            }

            aPage.Server.IRCSend("PRIVMSG " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2));
            aPage.MessagePrivate(parts[1], Parameters.Substring(parts[1].Length + 2));
        }
Ejemplo n.º 10
0
        private static void DefaultCommand(string prefix, string command, string[] parameters, mcPage page)
        {
            /* unknown numeric/command */
            string todisplay;

            todisplay = "UNKNOWN: :" + prefix + " " + command + " ";

            foreach (string str in parameters)
            {
                todisplay = todisplay + " " + str;
            }

            page.MessageInfo(todisplay);
        }
Ejemplo n.º 11
0
        public static void cmdCycle(mcPage aPage, string Parameters)
        {
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /cycle <channel>");
                return;
            }

            //hmm, shouldn't we be waiting for reciept of PART/JOIN
            //to display messages?
            aPage.Server.IRCSend("PART " + aPage.Text + " :Cycling channel.");
            aPage.MessageDisplay("<-- " + aPage.Server.MyNickname+" has left " + aPage.Text);
            aPage.Server.IRCSend("JOIN " + aPage.Text);
            aPage.MessageDisplay("--> " + aPage.Server.MyNickname+" has joined "+aPage.Text);
        }
Ejemplo n.º 12
0
        public static void cmdCycle(mcPage aPage, string Parameters)
        {
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /cycle <channel>");
                return;
            }

            //hmm, shouldn't we be waiting for reciept of PART/JOIN
            //to display messages?
            aPage.Server.IRCSend("PART " + aPage.Text + " :Cycling channel.");
            aPage.MessageDisplay("<-- " + aPage.Server.MyNickname + " has left " + aPage.Text);
            aPage.Server.IRCSend("JOIN " + aPage.Text);
            aPage.MessageDisplay("--> " + aPage.Server.MyNickname + " has joined " + aPage.Text);
        }
Ejemplo n.º 13
0
        public static void cmdQuery(mcPage aPage, string Parameters)
        {
            mcPage target;

            string[] parts;

            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /query <nickname>");
                return;
            }

            parts = Parameters.Split(null);

            target = aPage.Server.FindPage(parts[1]);
            if (target == null)
            {
                target           = aPage.Server.AddPage(parts[1], mcServer.PageType.Message);
                target.IsChannel = false;
            }
            target.DoFocus();
        }
Ejemplo n.º 14
0
        public static void cmdServer(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                return;
            }
            parts = Parameters.Split(null);
            if (parts.Length < 1 || parts.Length > 3)
            {
                aPage.MessageInfo("Usage: /server <server.name> [port]");
                return;
            }

            if (aPage.Server.Connected)
            {
                aPage.Server.Disconnect("Changing servers.");
            }

            aPage.Server.ServerName = parts[1];
            aPage.Server.ServerPort = (parts.Length == 3) ? System.Int32.Parse(parts[2]) : 6667;
            aPage.Server.Connect();
        }
Ejemplo n.º 15
0
 private static void Cmd004(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 004 w-mirc devel.rburchell.org Unreal3.2.3 iowghraAsORTVSxNCWqBzvdHtGpE lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGj
     page.MessageInfo(parameters[1] + " " + parameters[2] + " " + parameters[3] + " " + parameters[4]);
 }
Ejemplo n.º 16
0
 private static void Cmd422(string prefix, string command, string[] parameters, mcPage page)
 {
     /* no motd */
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 17
0
 // RPL_MOTDSTART
 private static void Cmd375(string prefix, string command, string[] parameters, mcPage page)
 {
     // ":- <Server> Message of the day - "
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 18
0
 private static void Cmd266(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 266 w00t_ :Current Global Users: 3  Max: 3
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 19
0
 private static void Cmd254(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 254 w00t_ 1 :channels formed
     page.MessageInfo(parameters[1] + " channel(s) formed");
 }
Ejemplo n.º 20
0
 private static void Cmd422(string prefix, string command, string[] parameters, mcPage page)
 {
     /* no motd */
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 21
0
        public static void cmdQuery(mcPage aPage, string Parameters)
        {
            mcPage target;
            string[] parts;

            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /query <nickname>");
                return;
            }

            parts = Parameters.Split(null);

            target = aPage.Server.FindPage(parts[1]);
            if (target == null)
            {
                target = aPage.Server.AddPage(parts[1], mcServer.PageType.Message);
                target.IsChannel = false;
            }
            target.DoFocus();
        }
Ejemplo n.º 22
0
 private static void Cmd254(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 254 w00t_ 1 :channels formed
     page.MessageInfo(parameters[1] + " channel(s) formed");
 }
Ejemplo n.º 23
0
 private static void Cmd255(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 255 w00t_ :I have 3 clients and 0 servers
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 24
0
 private static void Cmd266(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 266 w00t_ :Current Global Users: 3  Max: 3
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 25
0
        private static void DefaultCommand(string prefix, string command, string[] parameters, mcPage page)
        {
            /* unknown numeric/command */
            string todisplay;

            todisplay = "UNKNOWN: :" + prefix + " " + command + " ";

            foreach (string str in parameters)
            {
                todisplay = todisplay + " " + str;
            }

            page.MessageInfo(todisplay);
        }
Ejemplo n.º 26
0
        private static void CmdMODE(string prefix, string command, string[] parameters, mcPage page)
        {
            //:w00t!u@h MODE #test +oi Brik
            //:w00t!u@h MODE w00t +h
            mcPage target;
            string[] userhost;

            target = page.Server.FindPage(parameters[0]);
            userhost = prefix.Split('!');
            if (target == null)
            {
                /* setting modes on us, handle later */
                page.MessageInfo(userhost[0] + " sets mode " + parameters[1] + " on you");
                page.Server.ParseModes(parameters[1]);
                return;
            }

            bool adding = true;
            int j = 2;
            bool prefixmode = false;
            int n = 0;
            bool requiresparam;
            string myparams = null;

            for (n = 1; n < parameters.Length; n++)
                myparams = myparams + " " + parameters[n];

            target.MessageMode(userhost[0], userhost[1], myparams.Substring(1));

            foreach (char modechar in parameters[1])
            {
                switch (modechar)
                {
                    case '-':
                        adding = false;
                        break;
                    case '+':
                        adding = true;
                        break;
                    default:
                        /* first, determine if it's a prefix mode.. treat them differently. */
                        prefixmode = false;
                        for (n = 0; n < target.Server.ISupport.PREFIX_Modes.Length; n++)
                        {
                            if (modechar == target.Server.ISupport.PREFIX_Modes[n])
                            {
                                /* We are dealing with a prefix. */
                                prefixmode = true;
                                break;
                            }
                        }

                        if (prefixmode)
                        {
                            if (adding)
                            {
                                target.AddPrefix(parameters[j], target.Server.ISupport.PREFIX_Characters[n]);
                                j++;
                            }
                            else
                            {
                                target.RemovePrefix(parameters[j], target.Server.ISupport.PREFIX_Characters[n]);
                                j++;
                            }
                        }
                        else
                        {
                            if (target.Server.ISupport.CHANMODES[0].IndexOf(modechar) >= 0 || target.Server.ISupport.CHANMODES[1].IndexOf(modechar) >= 0 || (target.Server.ISupport.CHANMODES[2].IndexOf(modechar) >= 0 && adding)) {
                                requiresparam = true;
                            }
                            else
                            {
                                requiresparam = false;
                            }

                            if (adding)
                            {
                                if (requiresparam)
                                {
                                    target.AddMode(modechar, parameters[j], requiresparam);
                                    j++;
                                }
                                else
                                {
                                    target.AddMode(modechar, null, requiresparam);
                                }
                            }
                            else
                            {
                                if (requiresparam)
                                {
                                    target.RemoveMode(modechar, parameters[j]);
                                    j++;
                                }
                                else
                                {
                                    target.RemoveMode(modechar, null);
                                }
                            }
                        }
                        break;
                }

            }
        }
Ejemplo n.º 27
0
        public static void cmdMe(mcPage aPage, string Parameters)
        {
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /me <does stuff>");
                return;
            }

            aPage.Server.IRCSend("PRIVMSG " + aPage.Text + " :ACTION" + Parameters + "");
            aPage.MessageAction(aPage.Server.MyNickname, Parameters);
        }
Ejemplo n.º 28
0
 private static void Cmd003(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 003 w-mirc :This server was created Sat Apr 16 23:22:52 2005
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 29
0
 public static void cmdNick(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /nick <new_name>");
         return;
     }
     aPage.Server.IRCSend("NICK " + Parameters);
 }
Ejemplo n.º 30
0
 // RPL_LUSEROP
 private static void Cmd252(string sender, string command, string[] parameters, mcPage page)
 {
     // "<integer> :operator(s) online"
     page.MessageInfo(parameters[1] + " IRC operator(s) online");
 }
Ejemplo n.º 31
0
        public static void cmdServer(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                return;
            }
            parts = Parameters.Split(null);
            if(parts.Length < 1 || parts.Length > 3)
            {
                aPage.MessageInfo("Usage: /server <server.name> [port]");
                return;
            }

            if(aPage.Server.Connected)
                aPage.Server.Disconnect("Changing servers.");

            aPage.Server.ServerName = parts[1];
            aPage.Server.ServerPort = (parts.Length == 3) ? System.Int32.Parse(parts[2]) : 6667;
            aPage.Server.Connect();
        }
Ejemplo n.º 32
0
 private static void Cmd376(string prefix, string command, string[] parameters, mcPage page)
 {
     // RPL_ENDOFMOTD
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 33
0
 // RPL_MOTDSTART
 private static void Cmd375(string prefix, string command, string[] parameters, mcPage page)
 {
     // ":- <Server> Message of the day - "
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 34
0
 private static void Cmd253(string sender, string command, string[] parameters, mcPage page)
 {
     // "<integer> :unknown connection(s)"
     page.MessageInfo(parameters[1] + " unknown connection(s)");
 }
Ejemplo n.º 35
0
 private static void Cmd253(string sender, string command, string[] parameters, mcPage page)
 {
     // "<integer> :unknown connection(s)"
     page.MessageInfo(parameters[1] + " unknown connection(s)");
 }
Ejemplo n.º 36
0
 // RPL_LUSEROP
 private static void Cmd252(string sender, string command, string[] parameters, mcPage page)
 {
     // "<integer> :operator(s) online"
     page.MessageInfo(parameters[1] + " IRC operator(s) online");
 }
Ejemplo n.º 37
0
 private static void Cmd255(string sender, string command, string[] parameters, mcPage page)
 {
     //:devel.rburchell.org 255 w00t_ :I have 3 clients and 0 servers
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 38
0
        public static void MainParser(mcPage aPage, string CommandString)
        {
            System.Reflection.MethodInfo m;
            Type   t;
            string CurrentLine;

            string[] Lines;
            string   MyCmd;
            string   Parameters;
            int      i;
            int      a;

            CommandString = CommandString.Replace('\r', '\n');
            Lines         = CommandString.Split('\n');

            for (i = 0; i < Lines.Length; i++)
            {
                CurrentLine = Lines[i];
                if (CurrentLine.Length < 1)
                {
                    continue;
                }
                if (CurrentLine[0] == '/')
                {
                    a = CurrentLine.IndexOf(" ");
                    if (a == -1)
                    {
                        //one-word command, no params
                        MyCmd      = CurrentLine.Substring(1);
                        Parameters = null;
                    }
                    else
                    {
                        //more complex :/
                        MyCmd      = CurrentLine.Substring(1, a - 1);
                        Parameters = CurrentLine.Substring(a);
                    }
                    /* Try and invoke it now. */
                    mcCommands MyScript = new mcCommands();
                    t = MyScript.GetType();
                    m = t.GetMethod("cmd" + MyCmd, BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.IgnoreCase | BindingFlags.Public);
                    if (m == null)
                    {
                        /* no command, send it raw. */
                        aPage.Server.IRCSend(MyCmd + " " + Parameters);
                    }
                    else
                    {
                        try
                        {
                            object[] anObj = new object[] { aPage, Parameters };
                            m.Invoke(null, anObj);
                            anObj = null;
                        }
                        catch (TargetInvocationException ex)
                        {
                            aPage.MessageInfo("Scripting error, error dump follows:");
                            aPage.MessageInfo(ex.ToString());
                        }
                    }
                }
                else
                {
                    cmdSay(aPage, CurrentLine);
                }
            }
        }
Ejemplo n.º 39
0
 // RPL_MOTD
 private static void Cmd372(string prefix, string command, string[] parameters, mcPage page)
 {
     // ":- <text>"
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 40
0
 // RPL_LUSERCLIENT
 private static void Cmd251(string sender, string command, string[] parameters, mcPage page)
 {
     // ":There are <integer> users and <integer> services on <integer> servers"
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 41
0
 private static void Cmd376(string prefix, string command, string[] parameters, mcPage page)
 {
     // RPL_ENDOFMOTD
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 42
0
        private static void Cmd005(string prefix, string command, string[] parameters, mcPage page)
        {
            int i = 0;
            string todisplay = "Options: ";

            /* todo: do we need to support RPL_BOUNCE too? */
            //<- :devel.rburchell.org 005 w00t SAFELIST HCN MAXCHANNELS=10 CHANLIMIT=#:10 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 WALLCHOPS WATCH=128 :are supported by this Server
            //<- :devel.rburchell.org 005 w00t SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=beI,kfL,lj,psmntirRcOAQKVGCuzNSMTG NETWORK=Symmetic CASEMAPPING=ascii EXTBAN=~,cqnr ELIST=MNUCT STATUSMSG=~&@%+ EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP :are supported by this Server

            for (i = 1; i < parameters.Length - 1; i++)
            {
                string str = parameters[i];
                string[] tokens;

                if (str == null)
                    break;

                todisplay = todisplay + " " + parameters[i];
                tokens = str.Split("=".ToCharArray());

                switch (tokens[0])
                {
                    case "CHANMODES":
                        page.Server.ISupport.CHANMODES = tokens[1].Split(',');
                        break;
                    case "PREFIX":
                        /* tokens[1] is something like (ohv)@%+ */
                        tokens[1] = tokens[1].Substring(1, tokens[1].Length - 1);
                        /* now ohv)@%+ - find the ) in the middle */
                        int a = tokens[1].IndexOf(")");
                        /* split string into prefixchars and equivilant modes */
                        string modechars = tokens[1].Substring(0, a);
                        string prefixchars = tokens[1].Substring(a + 1);
                        if (modechars.Length != prefixchars.Length)
                        {
                            /* o_O I want to hear if this ever happens :P */
                            page.MessageInfo("Remote Server sent malformed 005 PREFIX token, ignoring. Please report this.");
                            continue;
                        }
                        page.Server.ISupport.PREFIX_Characters = prefixchars;
                        page.Server.ISupport.PREFIX_Modes = modechars;
                        break;
                    default:
                        if (page.Server.ISupport.Other.ContainsKey(tokens[0]))
                        {
                            if (tokens.Length > 1)
                            {
                                page.Server.ISupport.Other[tokens[0]] = tokens[1];
                            }
                        }
                        else
                        {
                            if (tokens.Length > 1)
                            {
                                // Has a value.
                                page.Server.ISupport.Other.Add(tokens[0], tokens[1]);
                            }
                            else
                            {
                                // No value.
                                page.Server.ISupport.Other.Add(tokens[0], null);
                            }
                        }
                        break;
                }
            }
            todisplay = todisplay + " " + parameters[i++];
            page.MessageInfo(todisplay);
        }
Ejemplo n.º 43
0
        private static void CmdMODE(string prefix, string command, string[] parameters, mcPage page)
        {
            //:w00t!u@h MODE #test +oi Brik
            //:w00t!u@h MODE w00t +h
            mcPage target;

            string[] userhost;

            target   = page.Server.FindPage(parameters[0]);
            userhost = prefix.Split('!');
            if (target == null)
            {
                /* setting modes on us, handle later */
                page.MessageInfo(userhost[0] + " sets mode " + parameters[1] + " on you");
                page.Server.ParseModes(parameters[1]);
                return;
            }

            bool   adding     = true;
            int    j          = 2;
            bool   prefixmode = false;
            int    n          = 0;
            bool   requiresparam;
            string myparams = null;

            for (n = 1; n < parameters.Length; n++)
            {
                myparams = myparams + " " + parameters[n];
            }

            target.MessageMode(userhost[0], userhost[1], myparams.Substring(1));

            foreach (char modechar in parameters[1])
            {
                switch (modechar)
                {
                case '-':
                    adding = false;
                    break;

                case '+':
                    adding = true;
                    break;

                default:
                    /* first, determine if it's a prefix mode.. treat them differently. */
                    prefixmode = false;
                    for (n = 0; n < target.Server.ISupport.PREFIX_Modes.Length; n++)
                    {
                        if (modechar == target.Server.ISupport.PREFIX_Modes[n])
                        {
                            /* We are dealing with a prefix. */
                            prefixmode = true;
                            break;
                        }
                    }

                    if (prefixmode)
                    {
                        if (adding)
                        {
                            target.AddPrefix(parameters[j], target.Server.ISupport.PREFIX_Characters[n]);
                            j++;
                        }
                        else
                        {
                            target.RemovePrefix(parameters[j], target.Server.ISupport.PREFIX_Characters[n]);
                            j++;
                        }
                    }
                    else
                    {
                        if (target.Server.ISupport.CHANMODES[0].IndexOf(modechar) >= 0 || target.Server.ISupport.CHANMODES[1].IndexOf(modechar) >= 0 || (target.Server.ISupport.CHANMODES[2].IndexOf(modechar) >= 0 && adding))
                        {
                            requiresparam = true;
                        }
                        else
                        {
                            requiresparam = false;
                        }

                        if (adding)
                        {
                            if (requiresparam)
                            {
                                target.AddMode(modechar, parameters[j], requiresparam);
                                j++;
                            }
                            else
                            {
                                target.AddMode(modechar, null, requiresparam);
                            }
                        }
                        else
                        {
                            if (requiresparam)
                            {
                                target.RemoveMode(modechar, parameters[j]);
                                j++;
                            }
                            else
                            {
                                target.RemoveMode(modechar, null);
                            }
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 44
0
 private static void Cmd002(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 002 w-mirc :Your host is devel.rburchell.org, running version Unreal3.2.3
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 45
0
 public static void cmdJoin(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /join <channel>");
         return;
     }
     aPage.Server.IRCSend("JOIN " + Parameters);
 }
Ejemplo n.º 46
0
 private static void Cmd002(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 002 w-mirc :Your host is devel.rburchell.org, running version Unreal3.2.3
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 47
0
        public static void cmdMsg(mcPage aPage, string Parameters)
        {
            string[] parts;

            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /msg <nickname> <message>");
                return;
            }

            parts = Parameters.Split(null);

            if(parts.Length < 3)
            {
                aPage.MessageInfo("Usage: /msg <nickname> <message>");
                return;
            }

            aPage.Server.IRCSend("PRIVMSG " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2));
            aPage.MessagePrivate(parts[1], Parameters.Substring(parts[1].Length + 2));
        }
Ejemplo n.º 48
0
 private static void Cmd003(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 003 w-mirc :This server was created Sat Apr 16 23:22:52 2005
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 49
0
        public static void cmdPart(mcPage aPage, string Parameters)
        {
            string[] parts;
            if (Parameters == null)
            {
                aPage.MessageInfo("Usage: /part <channel> [reason]");
                return;
            }

            parts = Parameters.Split(null);

            if(parts.Length < 2)
            {
                aPage.MessageInfo("Usage: /part <channel> [reason]");
                return;
            }

            if(parts.Length == 2)
            {
                aPage.Server.IRCSend("PART " + parts[1]);
            }
            else
            {
                aPage.Server.IRCSend("PART " + parts[1] + " :" + Parameters.Substring(parts[1].Length + 2));
            }
        }
Ejemplo n.º 50
0
 private static void Cmd004(string prefix, string command, string[] parameters, mcPage page)
 {
     //<- :devel.rburchell.org 004 w-mirc devel.rburchell.org Unreal3.2.3 iowghraAsORTVSxNCWqBzvdHtGpE lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGj
     page.MessageInfo(parameters[1] + " " + parameters[2] + " " + parameters[3] + " " + parameters[4]);
 }
Ejemplo n.º 51
0
 public static void cmdSay(mcPage aPage, string Parameters)
 {
     if (Parameters == null)
     {
         aPage.MessageInfo("Usage: /say <text>");
         return;
     }
     aPage.Server.IRCSend("PRIVMSG " + aPage.Text + " :" + Parameters);
     aPage.MessageUser(aPage.Server.MyNickname, Parameters);
 }
Ejemplo n.º 52
0
        private static void Cmd005(string prefix, string command, string[] parameters, mcPage page)
        {
            int    i         = 0;
            string todisplay = "Options: ";

            /* todo: do we need to support RPL_BOUNCE too? */
            //<- :devel.rburchell.org 005 w00t SAFELIST HCN MAXCHANNELS=10 CHANLIMIT=#:10 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 WALLCHOPS WATCH=128 :are supported by this Server
            //<- :devel.rburchell.org 005 w00t SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=beI,kfL,lj,psmntirRcOAQKVGCuzNSMTG NETWORK=Symmetic CASEMAPPING=ascii EXTBAN=~,cqnr ELIST=MNUCT STATUSMSG=~&@%+ EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP :are supported by this Server

            for (i = 1; i < parameters.Length - 1; i++)
            {
                string   str = parameters[i];
                string[] tokens;

                if (str == null)
                {
                    break;
                }

                todisplay = todisplay + " " + parameters[i];
                tokens    = str.Split("=".ToCharArray());

                switch (tokens[0])
                {
                case "CHANMODES":
                    page.Server.ISupport.CHANMODES = tokens[1].Split(',');
                    break;

                case "PREFIX":
                    /* tokens[1] is something like (ohv)@%+ */
                    tokens[1] = tokens[1].Substring(1, tokens[1].Length - 1);
                    /* now ohv)@%+ - find the ) in the middle */
                    int a = tokens[1].IndexOf(")");
                    /* split string into prefixchars and equivilant modes */
                    string modechars   = tokens[1].Substring(0, a);
                    string prefixchars = tokens[1].Substring(a + 1);
                    if (modechars.Length != prefixchars.Length)
                    {
                        /* o_O I want to hear if this ever happens :P */
                        page.MessageInfo("Remote Server sent malformed 005 PREFIX token, ignoring. Please report this.");
                        continue;
                    }
                    page.Server.ISupport.PREFIX_Characters = prefixchars;
                    page.Server.ISupport.PREFIX_Modes      = modechars;
                    break;

                default:
                    if (page.Server.ISupport.Other.ContainsKey(tokens[0]))
                    {
                        if (tokens.Length > 1)
                        {
                            page.Server.ISupport.Other[tokens[0]] = tokens[1];
                        }
                    }
                    else
                    {
                        if (tokens.Length > 1)
                        {
                            // Has a value.
                            page.Server.ISupport.Other.Add(tokens[0], tokens[1]);
                        }
                        else
                        {
                            // No value.
                            page.Server.ISupport.Other.Add(tokens[0], null);
                        }
                    }
                    break;
                }
            }
            todisplay = todisplay + " " + parameters[i++];
            page.MessageInfo(todisplay);
        }
Ejemplo n.º 53
0
        public static void MainParser(mcPage aPage, string CommandString)
        {
            System.Reflection.MethodInfo m;
            Type t;
            string CurrentLine;
            string[] Lines;
            string MyCmd;
            string Parameters;
            int i;
            int a;

            CommandString = CommandString.Replace('\r','\n');
            Lines = CommandString.Split('\n');

            for(i = 0; i < Lines.Length; i++)
            {
                CurrentLine = Lines[i];
                if(CurrentLine.Length < 1)
                    continue;
                if(CurrentLine[0] == '/')
                {
                    a = CurrentLine.IndexOf(" ");
                    if (a == -1)
                    {
                        //one-word command, no params
                        MyCmd = CurrentLine.Substring(1);
                        Parameters = null;
                    }
                    else
                    {
                        //more complex :/
                        MyCmd = CurrentLine.Substring(1, a - 1);
                        Parameters = CurrentLine.Substring(a);
                    }
                    /* Try and invoke it now. */
                    mcCommands MyScript = new mcCommands();
                    t = MyScript.GetType();
                    m = t.GetMethod("cmd" + MyCmd, BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.IgnoreCase | BindingFlags.Public);
                    if (m == null)
                    {
                        /* no command, send it raw. */
                        aPage.Server.IRCSend(MyCmd + " " + Parameters);
                    }
                    else
                    {
                        try
                        {
                            object[] anObj = new object[] {aPage, Parameters};
                            m.Invoke(null, anObj);
                            anObj = null;
                        }
                        catch (TargetInvocationException ex)
                        {
                            aPage.MessageInfo("Scripting error, error dump follows:");
                            aPage.MessageInfo(ex.ToString());
                        }
                    }
                }
                else
                {
                    cmdSay(aPage, CurrentLine);
                }
            }
        }
Ejemplo n.º 54
0
 // RPL_LUSERCLIENT
 private static void Cmd251(string sender, string command, string[] parameters, mcPage page)
 {
     // ":There are <integer> users and <integer> services on <integer> servers"
     page.MessageInfo(parameters[1]);
 }
Ejemplo n.º 55
0
        private static void Cmd001(string prefix, string command, string[] parameters, mcPage page)
        {
            string[] userhost;
            //<- :devel.rburchell.org 001 w-mirc :Welcome to the Symmetic IRC Network [email protected]
            page.Server.ServerName = prefix;	/* this is a good time to find the real name */
            page.Server.ServerPage.MyNode.Text = page.Server.ServerName;
            page.Server.ServerPage.Text = page.Server.ServerName;	/* and make sure the node matches 8) */
            //split param 3 to get network name..
            userhost = parameters[1].Split(' ');

            if (System.IO.File.Exists(".\\networks\\" + userhost[3] + "\\network.dat"))
            {
                page.MessageInfo("Network " + userhost[3] + " is a known network.");
                /* We have a networks file. */
                mcNetwork NewNetwork = mcNetwork.GetNetwork(userhost[3]);
                page.Server.IRCSend("NICK " + NewNetwork.Nickname);
                /* assume that user/real is already valid. */
                //todo: add this to the list of servers?
                //page.Server.ServerSocket.RemoteHost
                foreach (string str in NewNetwork.Perform)
                {
                    if (str[0] != '#')
                    {
                        /* the "P" is stripped automagically */
                        page.MessageInfo("Doing PERFORM " + str);
                        page.Server.IRCSend(str);
                    }
                }
            }
            else
            {
                page.MessageInfo("Network " + userhost[3] + " is not a known network.");
            }
        }
Ejemplo n.º 56
0
 // RPL_MOTD
 private static void Cmd372(string prefix, string command, string[] parameters, mcPage page)
 {
     // ":- <text>"
     page.MessageInfo(parameters[1]);
 }