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)); } }
// 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."); } }
public static void cmdNick(mcPage aPage, string Parameters) { if (Parameters == null) { aPage.MessageInfo("Usage: /nick <new_name>"); return; } aPage.Server.IRCSend("NICK " + Parameters); }
public static void cmdJoin(mcPage aPage, string Parameters) { if (Parameters == null) { aPage.MessageInfo("Usage: /join <channel>"); return; } aPage.Server.IRCSend("JOIN " + Parameters); }
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); }
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)); }
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); }
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)); }
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)); }
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); }
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); }
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); }
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(); }
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(); }
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]); }
private static void Cmd422(string prefix, string command, string[] parameters, mcPage page) { /* no motd */ page.MessageInfo(parameters[1]); }
// RPL_MOTDSTART private static void Cmd375(string prefix, string command, string[] parameters, mcPage page) { // ":- <Server> Message of the day - " page.MessageInfo(parameters[1]); }
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]); }
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"); }
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]); }
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; } } }
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]); }
// 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"); }
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(); }
private static void Cmd376(string prefix, string command, string[] parameters, mcPage page) { // RPL_ENDOFMOTD page.MessageInfo(parameters[1]); }
private static void Cmd253(string sender, string command, string[] parameters, mcPage page) { // "<integer> :unknown connection(s)" page.MessageInfo(parameters[1] + " unknown connection(s)"); }
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); } } }
// RPL_MOTD private static void Cmd372(string prefix, string command, string[] parameters, mcPage page) { // ":- <text>" page.MessageInfo(parameters[1]); }
// 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]); }
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); }
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; } } }
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]); }
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)); }
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)); } }
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); }
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); } } }
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."); } }