public virtual void HandleReceived(string received) { Channel channel; CommandResponse response = new CommandResponse(nick, received); string file = "parsing.txt"; Log.WriteToFile(file, received, false); Log.WriteToFile(file, response.ToString(), false); bool isNumeric = int.TryParse(response.Command, out int number); switch ((ResponseID)number) { case ResponseID.RPL_WELCOME: ready = true; break; case ResponseID.RPL_AWAY: channel = GetChannel(response.GetParameter(0)); channel.HandleResponse(response, channel == activeChannel); return; } if (response.Command == "PING") { network.Send("PONG " + response.GetParameter(0)); return; } if (response.Target != null) { channel = GetChannel(response.Target); } else if (response.Prefix != null && response.Prefix != server && !response.Prefix.StartsWith(nick)) { channel = GetChannel(response.Prefix.Split('!')[0]); } else { channel = GetChannel(server); } channel.HandleResponse(response, channel == activeChannel); }
public void HandleResponse(CommandResponse response, bool active) { //TODO: refactor and fix string message = null; ConsoleColor color = ConsoleColor.DarkGreen; bool isNumeric = int.TryParse(response.Command, out int number); if (isNumeric) { switch ((ResponseID)number) { case ResponseID.RPL_TOPIC: message = string.Format("* Topic is: '{0}'", response.GetParameter(0)); break; case ResponseID.RPL_NOTOPIC: message = "No topic is set."; break; case ResponseID.RPL_TOPICSET: string from = response.GetParameter(0); long timestamp = int.Parse(response.GetParameter(1)); DateTime time = new DateTime(1970, 1, 1).AddSeconds(timestamp).ToLocalTime(); message = string.Format("* Set by {0} on {1}", from, time); break; case ResponseID.RPL_NAMREPLY: membersBuffer.AddRange(response.GetParameter(0).Split(' ')); break; case ResponseID.RPL_ENDOFNAMES: members = membersBuffer; membersBuffer = new List <string>(); message = string.Format("* Names in Channel: {0}", string.Join(" ", members.ToArray())); break; //private messaging case ResponseID.RPL_AWAY: message = string.Format("{0} is away: {1}", response.GetParameter(0), response.GetParameter(1)); break; default: message = string.Join(" ", response.GetParameters()); break; } } else { string name = null; string info = null; if (response.Prefix != null) { string[] split = response.Prefix.Split('!'); if (split.Length >= 1) { name = split[0]; if (split.Length >= 2) { info = split[1]; } } } switch (response.Command) { case "JOIN": message = string.Format("{0} ({1}) has joined the channel", name, info); break; case "PART": message = string.Format("{0} ({1}) has left the channel", name, info); color = ConsoleColor.Blue; break; case "TOPIC": message = string.Format("{0} has set the topic: {1}", name, response.GetParameter(0)); break; case "PRIVMSG": message = string.Format("<{0}> {1}", name, response.GetParameter(0)); color = ConsoleColor.Gray; break; case "MODE": if (response.Target != null) { message = string.Format("{0} sets mode: {1}", name, string.Join(" ", response.GetParameters())); } else { message = string.Format("Usermode changed: {0}", string.Join(" ", response.GetParameters())); } break; case "PONG": message = string.Format("{0} {1}", response.Command, response.GetParameter(1)); break; case "NICK": message = string.Format("{0} has changed nick to {1}", response.Prefix.Split('!')[0], response.GetParameter(0)); break; case "QUIT": message = string.Format("{0} has quit IRC ({1})", response.Prefix.Split('!')[0], response.GetParameter(0)); color = ConsoleColor.Blue; break; case "NOTICE": if (response.GetParameter(0) == "AUTH") { message = string.Format("{0}", response.GetParameter(1)); } else { message = string.Format("<{0}> {1}", name, response.GetParameter(0)); } break; default: message = response.Command + " " + string.Join(" ", response.GetParameters()); color = ConsoleColor.Red; break; } } if (message != null) { AddEntry(message, active, color); } }