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)); } }
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); }
private static void CTCP(string prefix, string[] parameters, mcPage page) { //:n!u@h PRIVMSG #blah :VERSION mcPage target; string[] userhost; string[] ctcpparams; parameters[1] = parameters[1].Replace("", ""); userhost = prefix.Split('!'); ctcpparams = parameters[1].Split(' '); target = page.Server.FindPage(parameters[0]); if (target == null) { /* no channel page, try find a private one.. */ target = page.Server.FindPage(userhost[0]); } switch (ctcpparams[0]) { case "ACTION": /* if we didn't find a page previously, create one (presume private ;)) */ if (target == null) { target = page.Server.AddPage(userhost[0], mcServer.PageType.Message); } int i = 0; string action = null; foreach (string str in ctcpparams) { if (i == 0) /* ugly :p */ { i++; continue; } action = action + " " + str; } target.MessageAction(userhost[0], action); break; case "VERSION": if (target == null) { target = page.Server.ServerPage; } target.MessageInfo("[" + userhost[0] + " VERSION]"); page.Server.IRCSend("NOTICE " + userhost[0] + " :VERSION " + Obsidian.APP_NAME + " " + Obsidian.APP_VER + " - Got it yet?\r\n"); break; } }
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 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 mcServer() { ServerName = ""; ServerPort = 6667; MyNickname = SystemInformation.UserName; MyUsername = MyNickname; MyRealname = MyNickname; ServerPage = new mcPage(this, "My Status", false); CurrentPage = ServerPage; ServerPage.DoFocus(); }
public static void cmdDisconnect(mcPage aPage, string Parameters) { if (Parameters == null) { /* todo: this needs to be configurable */ aPage.Server.Disconnect("Departing."); } else { aPage.Server.Disconnect(Parameters); } }
public static void cmdNames(mcPage aPage, string Parameters) { if (Parameters == null) { return; } mcPage target = aPage.Server.FindPage(Parameters); if (target != null) { target.RemoveAllUsersFromChannel(); } }
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 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 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 mcPage AddPage(string PageName, PageType TypeOfPage) { /* Add a page to the Server instance and return it. */ mcPage aPage; System.Windows.Forms.TreeNode lvi = new System.Windows.Forms.TreeNode(PageName); lvi.Tag = this.HashKey; switch (TypeOfPage) { case PageType.Channel: aPage = new mcPage(this, PageName, true); this.ServerPage.ChannelsNode.Nodes.Add(lvi); break; case PageType.Message: aPage = new mcPage(this, PageName, false); this.ServerPage.MessagesNode.Nodes.Add(lvi); break; default: /* unsupported page type?! */ aPage = new mcPage(this, PageName, false); MessageBox.Show("mcServer.AddPage was given an invalid PageType for page " + aPage.Text); this.ServerPage.MyNode.Nodes.Add(lvi); break; } aPage.MyNode = lvi; Pages.Add(PageName, aPage); /* reset focus on current page. */ CurrentPage.DoFocus(); /* We don't do duplicates checking (ie two #test's), * this is assumed to have already been done by a * seperate proceedure (hint: FindPage) */ return(aPage); }
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 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 CmdNOTICE(string prefix, string command, string[] parameters, mcPage page) { // Command: NOTICE Parameters: <msgtarget> :<text> string source; string[] userhost; mcPage target; if (prefix != null) { userhost = prefix.Split('!'); source = userhost[0]; } else { source = page.Server.ServerName; } target = page.Server.FindPage(parameters[0]); if (target != null) { target.MessageNotice(source, parameters[1]); } else { if (source.IndexOf('.') == -1) { page.Server.CurrentPage.MessageNotice(source, parameters[1]); } else { page.Server.ServerPage.MessageNotice(source, parameters[1]); } } }
private static void CmdPART(string prefix, string command, string[] parameters, mcPage page) { //:n!u@h PART #chan :message string[] userhost; mcPage target; userhost = prefix.Split('!'); target = page.Server.FindPage(parameters[0]); if (target == null) { return; } target.MessagePart(userhost[0], userhost[1], (parameters.Length >= 2 ? parameters[1] : "")); if (userhost[0] == page.Server.MyNickname) { page.Server.DeletePage(target); Obsidian.mainForm.tvcWindows.Nodes.Remove(target.MyNode); } }
private static void CmdNICK(string prefix, string command, string[] parameters, mcPage page) { // Command: NICK Parameters: :<new> string[] userhost; userhost = prefix.Split('!'); if (userhost[0] == page.Server.MyNickname) { page.Server.MyNickname = parameters[0]; } page.Server.ChangeNick(userhost[0], parameters[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); }
private static void CmdTOPIC(string prefix, string command, string[] parameters, mcPage page) { //:n!u@h TOPIC #chan :newtopic zomg! string[] userhost; mcPage target; userhost = prefix.Split('!'); target = page.Server.FindPage(parameters[0]); if (target == null) return; target.Topic = parameters[1]; target.MessageInfo(userhost[0] + " has changed the topic to: " + target.Topic); if (target.Equals(page.Server.CurrentPage)) page.Server.CurrentPage.Topic = target.Topic; }
private static void CmdQUIT(string prefix, string command, string[] parameters, mcPage page) { //:prefix!u@h QUIT :message :o string[] userhost; userhost = prefix.Split('!'); page.Server.QuitNick(userhost[0], parameters[0]); }
public static void cmdReconnect(mcPage aPage, string Parameters) { aPage.Server.Disconnect("Reconnecting."); aPage.Server.Connect(); }
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 CmdPRIVMSG(string prefix, string command, string[] parameters, mcPage page) { //:n!u@h PRIVMSG target :message here! string[] userhost; mcPage target; userhost = prefix.Split('!'); if (parameters[1][0] == '\u0001') { //todo: redo CTCP support (: CTCP(prefix, parameters, page); return; } target = page.Server.FindPage(parameters[0]); if (target != null) { target.MessageUser(userhost[0], parameters[1]); } else { target = page.Server.FindPage(userhost[0]); if (target == null) { page.Server.AddPage(userhost[0], mcServer.PageType.Message); target = page.Server.FindPage(userhost[0]); } target.MessageUser(userhost[0], parameters[1]); } }
private static void CmdPING(string prefix, string command, string[] parameters, mcPage page) { //PING :something.goes.here page.Server.IRCSend("PONG " + parameters[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)); }
private static void CmdTOPIC(string prefix, string command, string[] parameters, mcPage page) { //:n!u@h TOPIC #chan :newtopic zomg! string[] userhost; mcPage target; userhost = prefix.Split('!'); target = page.Server.FindPage(parameters[0]); if (target == null) { return; } target.Topic = parameters[1]; target.MessageInfo(userhost[0] + " has changed the topic to: " + target.Topic); if (target.Equals(page.Server.CurrentPage)) { page.Server.CurrentPage.Topic = target.Topic; } }
private static void CmdNOTICE(string prefix, string command, string[] parameters, mcPage page) { // Command: NOTICE Parameters: <msgtarget> :<text> string source; string[] userhost; mcPage target; if (prefix != null) { userhost = prefix.Split('!'); source = userhost[0]; } else { source = page.Server.ServerName; } target = page.Server.FindPage(parameters[0]); if (target != null) target.MessageNotice(source, parameters[1]); else { if (source.IndexOf('.') == -1) page.Server.CurrentPage.MessageNotice(source, parameters[1]); else page.Server.ServerPage.MessageNotice(source, parameters[1]); } }
public static void cmdNames(mcPage aPage, string Parameters) { if (Parameters == null) return; mcPage target = aPage.Server.FindPage(Parameters); if (target != null) target.RemoveAllUsersFromChannel(); }
public ChanUser(string nick, mcPage p) { this.Nick = nick; this.DispColor = Color.White; this.p = p; }
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 CmdPART(string prefix, string command, string[] parameters, mcPage page) { //:n!u@h PART #chan :message string[] userhost; mcPage target; userhost = prefix.Split('!'); target = page.Server.FindPage(parameters[0]); if (target == null) return; target.MessagePart(userhost[0], userhost[1], (parameters.Length >= 2 ? parameters[1] : "")); if (userhost[0] == page.Server.MyNickname) { page.Server.DeletePage(target); Obsidian.mainForm.tvcWindows.Nodes.Remove(target.MyNode); } }
public static void cmdClear(mcPage aPage, string Parameters) { aPage.Clear(); }
private static void Cmd421(string prefix, string command, string[] parameters, mcPage page) { //:devel.rburchell.org 421 w00t me :Unknown command page.Server.CurrentPage.MessageInfo(parameters[1] + ": " + parameters[2]); }
private static void Cmd671(string prefix, string command, string[] parameters, mcPage page) { string todisplay = null; /* join parts of parameters together to display */ for (int i = 2; i < parameters.Length; i++) { todisplay = todisplay + " " + parameters[i]; } page.Server.CurrentPage.MessageInfo("Status:" + 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 CmdERROR(string prefix, string command, string[] parameters, mcPage page) { // Command: ERROR Parameters: <error message> page.Server.ServerPage.MessageInfo("ERROR " + parameters[0]); /* this is being a bit cheeky ;) */ page.Server.Disconnect("ERROR " + parameters[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; } } }
private static void CmdINVITE(string prefix, string command, string[] parameters, mcPage page) { // Do something with this... }
public static void cmdExit(mcPage aPage, string Parameters) { Obsidian.mainForm.Exit(null, null); }
private static void CmdJOIN(string prefix, string command, string[] parameters, mcPage page) { //:w00t!u@h JOIN :#test mcPage target; string[] userhost; target = page.Server.FindPage(parameters[0]); userhost = prefix.Split('!'); if (target == null) { /* Joining a new channel. */ target = page.Server.AddPage(parameters[0], mcServer.PageType.Channel); target.IsChannel = true; } target.MessageJoin(userhost[0], userhost[1]); }
public void DeletePage(mcPage Page) { Pages.Remove(Page.Text); Page.Dispose(); }
private static void CmdKICK(string prefix, string command, string[] parameters, mcPage page) { /* :aggressor!u@h KICK #somechan target :reason */ string[] userhost; mcPage target; userhost = prefix.Split('!'); target = page.Server.FindPage(parameters[0].ToLower()); if (target == null) { return; /* probably server lag. */ } target.MessageKick(parameters[1], userhost[0], parameters[1]); /* TODO: Clear the nicklist? */ }
public mcPage AddPage(string PageName, PageType TypeOfPage) { /* Add a page to the Server instance and return it. */ mcPage aPage; System.Windows.Forms.TreeNode lvi = new System.Windows.Forms.TreeNode(PageName); lvi.Tag = this.HashKey; switch (TypeOfPage) { case PageType.Channel: aPage = new mcPage(this, PageName, true); this.ServerPage.ChannelsNode.Nodes.Add(lvi); break; case PageType.Message: aPage = new mcPage(this, PageName, false); this.ServerPage.MessagesNode.Nodes.Add(lvi); break; default: /* unsupported page type?! */ aPage = new mcPage(this, PageName, false); MessageBox.Show("mcServer.AddPage was given an invalid PageType for page " + aPage.Text); this.ServerPage.MyNode.Nodes.Add(lvi); break; } aPage.MyNode = lvi; Pages.Add(PageName, aPage); /* reset focus on current page. */ CurrentPage.DoFocus(); /* We don't do duplicates checking (ie two #test's), * this is assumed to have already been done by a * seperate proceedure (hint: FindPage) */ return aPage; }
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; } } }