// add an "active" ChatWindow param void userInput(ChatWindow query, ChatWindow channel, string line) { if (line.Length == 0) { return; } if (line[0] == '/') { string command; string trail; string[] args; args = line.Split(" ".ToCharArray(), 2); command = args[0].Substring(1).ToUpperInvariant(); if (args.Length == 2) { trail = args[1]; args = trail.Split(' '); } else { trail = ""; args = new string[0]; } if (query != null) { switch (command) { case "MSG": if (args.Length > 1) { if (args[0].ToLowerInvariant() == query.GetTag().ToLowerInvariant()) { trail = trail.Substring(args[0].Length + 1); connection.Msg_PRIVMSG(args[0], trail); query.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail)); return; } } break; case "ME": if (args.Length > 0) { connection.Msg_CTCP_REQUEST_ACTION(query.GetTag(), trail); query.WriteOutput(Color.Purple, string.Format("* {0} {1}", connection.NickName, trail)); return; } break; } } if (channel != null) { switch (command) { case "MSG": if (args.Length > 1) { trail = trail.Substring(args[0].Length + 1); connection.Msg_PRIVMSG(args[0], trail); channel.WriteOutput(Color.Black, string.Format("-> *{0}* {1}", args[0], trail)); // if a query window exists, print with <> there if (queryWindows.ContainsKey(args[0])) // might have to do case insensitive dictionary { queryWindows[args[0]].WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail)); } return; } break; case "ME": if (args.Length > 0) { connection.Msg_CTCP_REQUEST_ACTION(channel.GetTag(), trail); channel.WriteOutput(Color.Purple, string.Format("* {0} {1}", connection.NickName, trail)); return; } break; case "PART": if (args.Length == 0) { connection.Msg_PART(channel.GetTag()); } else { connection.Msg_PART(channel.GetTag(), trail); } return; } } switch (command) { case "SERVER": if (args.Length == 0) { LocalErrorMessage("No server specified, you are making no sense."); } else { if (connection != null) { LocalInfoMessage("Disconnecting existing server connection, just for your information."); if (connection.socket != null) { if (connection.socket.Connected) { connection.Msg_QUIT(Program.Identifier); } } connection.Close(); } LocalInfoMessage(string.Format("Connecting to some new server, {0}.", trail)); if (args.Length == 1) { InitializeConnection(args[0], 6666); } else // we already know it's higher than 0! :) { InitializeConnection(args[0], Convert.ToInt32(args[1])); } UpdateButtonText(); } return; case "CTCP": if (args.Length > 2) { connection.Msg_CTCP_REQUEST(args[0], args[1].ToUpperInvariant(), string.Join(" ", args, 2, args.Length - 2)); return; } else if (args.Length > 1) { connection.Msg_CTCP_REQUEST(args[0], args[1].ToUpperInvariant()); return; } break; case "PING": if (args.Length > 0) { connection.Msg_CTCP_REQUEST_PING(args[0], System.Environment.TickCount.ToString()); return; } break; case "MSG": if (args.Length > 1) { trail = trail.Substring(args[0].Length + 1); connection.Msg_PRIVMSG(args[0], trail); serverWindow.WriteOutput(Color.Black, string.Format("-> *{0}* {1}", args[0], trail)); // if a query window exists, print with <> there if (queryWindows.ContainsKey(args[0])) // might have to do case insensitive dictionary { queryWindows[args[0]].WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail)); } return; } break; case "TEST": if (args.Length > 0) { serverWindow.WriteOutput(Color.Black, trail); return; } break; } if (args.Length == 0) { connection.Msg(command); } else { connection.Msg(command + " " + trail); } } else { if (query != null) { connection.Msg_PRIVMSG(query.GetTag(), line); query.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, line)); } else if (channel != null) { connection.Msg_PRIVMSG(channel.GetTag(), line); channel.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, line)); } else { LocalErrorMessage("Unable to send useless input to the server."); } } }