private void ProcessIrc(IrcEvent ev) { // For the most part, just logging. A handful of events of interest will go to screen. string filetarget = null; if (ev is ServerEvent) { // All server events are assumed to be important enough to display on screen filetarget = "_serverstatus"; ToConsole(ev.Timestamp, ev.ToString()); } else if (ev is ChannelEvent) { // Target is channel filetarget = ((ChannelEvent)ev).Channel; } else if (ev is QuitEvent) { // Multiple targets var qe = (QuitEvent)ev; string line = qe.ToString(); foreach (string channel in qe.Sender.Channels) { ToFile(ev.Timestamp, channel, line); } if (qe.Sender.IsClient) ToConsole(ev.Timestamp, qe.ToString()); return; } else if (ev is NickChangeEvent) { // Multiple targets also var nce = (NickChangeEvent)ev; string line = nce.ToString(); foreach (string channel in nce.Sender.Channels) { ToFile(ev.Timestamp, channel, line); } if (nce.Sender.IsClient) ToConsole(ev.Timestamp, nce.ToString()); return; } else if (ev is UserEvent) { var ue = (UserEvent)ev; bool isClient = ue.Sender.IsClient; filetarget = ue.Sender; // If sender is bot, file target is event target // Also all of these are events of interest if (ue is CtcpEvent) { if (isClient) filetarget = ((CtcpEvent)ue).Target; } else if (ue is MessageEvent) { if (isClient) filetarget = ((MessageEvent)ue).Target; else ToConsole(ev.Timestamp, ev.ToString()); } else if (ue is InviteEvent) { if (isClient) filetarget = ((InviteEvent)ue).Target; } } else if (ev is OutputEvent) { // Ignore. return; } else { // TODO Must find a place for these if they appear filetarget = "_unknown_irc"; } if (filetarget != null) ToFile(ev.Timestamp, filetarget, ev.ToString()); }
private void OnNextIrcEvent(IrcEvent obj) { Log(Json(obj), LogLevel.Information); }