public static void OnConsoleText(StringStream cText) { try { switch (cText.NextWord().ToLower()) { case "join": { if (cText.Remainder.Contains(",")) { var chaninfo = cText.Remainder.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); if (chaninfo.Length > 1) JadBot.Irc.CommandHandler.Join(chaninfo[0], chaninfo[1]); else JadBot.Irc.CommandHandler.Join(chaninfo[0]); } else { JadBot.Irc.CommandHandler.Join(cText.Remainder); } } break; case "say": { var chan = cText.NextWord(); var msg = cText.Remainder; JadBot.Irc.CommandHandler.Msg(chan, msg); } break; case "quit": { JadBot.Parser.Kill(); JadBot.IrcLog.WriteLine("Shutting down due to console quit command.."); foreach (var chan in JadBot.ChannelList) { JadBot.Irc.CommandHandler.Msg(chan, "Shutting down in 5 seconds due to console quit command.."); } Thread.Sleep(5000); JadBot.Irc.Client.DisconnectNow(); Environment.Exit(0); } break; } } catch(Exception e) { WriteErrorSystem.WriteError(e); } }
private void ReceivedNotify(ByteBuffer buf) { if (InternalBytesReceived != null) { InternalBytesReceived(this, buf); buf.offset = 0; } if (BytesReceived != null) { BytesReceived(this, buf); } else if (RawTextReceived != null || LineReceived != null) { string text = lastLine + encoding.GetString(buf.Data, 0, buf.length); if (RawTextReceived != null) RawTextReceived(this, new StringStream(text)); if (LineReceived != null) { var ss = new StringStream(text); while (ss.HasNext) { if (BytesReceived != null) { // Handler might change int count; if (encoding.IsSingleByte) count = ss.Position; else count = encoding.GetByteCount(ss.String.Substring(0, ss.Position)); buf.offset = count; buf.length -= count; BytesReceived(this, buf); break; } if (LineReceived != null) { string line = ss.NextWord(lineTerminator); if (!ss.HasNext && !text.EndsWith(lineTerminator)) { lastLine += line; return; } LineReceived(this, new StringStream(line)); } } lastLine = ""; } } }
/// <summary> /// Build a packet from a new line of content from the server. /// Do as much parsing as possible here before the packet-handler /// will then work with the gathered information. /// </summary> public IrcPacket CreatePacket(string content) { var line = new StringStream(content.Trim()); string prefix; if (content[0] == ':') { prefix = line.NextWord().Substring(1); } else { prefix = line.NextWord(); } var action = line.NextWord(); var packet = new IrcPacket(irc, prefix, action, new StringStream(line.Remainder.Trim()), line.String) { protHandler = this }; return packet; }
public IrcPacket[] ExtractPackets(ByteBuffer partialResponse) { var str = partialResponse.GetString(encoding); var response = lastResponsePart + str; var ss = new StringStream(response); var packets = new List<IrcPacket>(3); while (ss.HasNext) { var content = ss.NextWord(PacketTerminator); if (!ss.HasNext && !response.EndsWith(PacketTerminator)) { lastResponsePart = content; } else { try { var packet = CreatePacket(content); packets.Add(packet); if (!ss.HasNext) { lastResponsePart = ""; } } catch (Exception e) { throw new Exception("Unable to parse packet: " + content, e); } } } return packets.ToArray(); }
static void CheckMail() { try { Console.WriteLine("Checking Mailbox"); POPClient pop3 = new POPClient(); pop3.Connect(settings.Default.EmailHost, 110, false); pop3.Authenticate(settings.Default.EmailUsername, settings.Default.EmailPassword); int i = 0; while (i <= pop3.GetMessageCount()) { Console.WriteLine(pop3.GetMessageCount()); var msg = pop3.GetMessage(i); if (msg != null && msg.MessageBody.Capacity > 0 && !string.IsNullOrEmpty(msg.MessageBody[0]) && msg.Headers.From.ToString() == settings.Default.EmailFromAddress) { Console.WriteLine("Marking message for deletion.."); pop3.DeleteMessage(i); string msgbody = msg.MessageBody[0].Replace("\n", " "); msgbody = msgbody.Replace("\r", " "); var msgsplit = new StringStream(msgbody); msgbody = msgsplit.NextWord("====="); BuildNotifier.Irc.CommandHandler.Msg(settings.Default.NotificationChannel, msgbody); Console.WriteLine(msgbody); } i++; } Console.WriteLine("Closing connection, deleting messages"); pop3.Disconnect(); } catch (Exception e) { WriteErrorSystem.WriteError(null, e.Message + e.Data + e.Source + e.StackTrace); } }
/// <summary> /// /// </summary> private void SetupHandlers() { // If its not recognized: defaultPacketHandler = packet => { // PING is special if (packet.Prefix == "PING") { packet.IrcClient.Send("PONG " + packet.Key); } else if (packet.Key.StartsWith("4") || packet.Key.StartsWith("5")) { // Error Replies packet.IrcClient.ErrorNotify(packet); } else { // Normal replies packet.IrcClient.UnspecifiedInfoNotify(packet); } }; // Connection Handling AddPacketHandler("001", packet => { // :Serv 001 Me :<Welcomemessage> packet.IrcClient.Me.ChangeNick(packet.Content.NextWord()); defaultPacketHandler(packet); }); AddPacketHandler("005", packet => { packet.IrcClient.ConnectionInfoNotify(packet); }); AddPacketHandler("376", packet => { packet.IrcClient.PerformNotify(); }); // Messaging AddPacketHandler("PRIVMSG", packet => { var strStream = new StringStream(packet.Content); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); var args = packet.Args; packet.IrcClient.TextNotify(packet.User, packet.channel, new StringStream(args)); if (args.StartsWith("") && args.EndsWith("")) { // CTCP args = packet.Args.Split('')[1]; var argsStream = new StringStream(args); packet.IrcClient.CtcpRequestNotify(packet.User, packet.channel, argsStream.NextWord(), argsStream.Remainder); } else { // Text message var argsStream = new StringStream(args); if (packet.channel == null) { packet.IrcClient.QueryMsgNotify(packet.User, argsStream); } else { packet.IrcClient.ChannelMsgNotify(packet.User, packet.channel, argsStream); } } }); AddPacketHandler("NOTICE", packet => { var strStream = new StringStream(packet.Content); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); string args = packet.Args; var argsStream = new StringStream(strStream.Remainder.Trim()); packet.IrcClient.TextNotify(packet.User, packet.channel, argsStream); if (packet.Args.StartsWith("") && packet.Args.EndsWith("")) { args = packet.Args.Substring(1, packet.Args.Length - 2); // TODO: Check if this is right? packet.IrcClient.CtcpReplyNotify(packet.User, packet.channel, argsStream.NextWord(), packet.Args); } else { packet.IrcClient.NoticeNotify(packet.User, packet.channel, new StringStream(packet.Args)); } }); // Nick / Quit AddPacketHandler("NICK", packet => { packet.IrcClient.NickNotify(packet.User, packet.Args); }); AddPacketHandler("QUIT", packet => { packet.IrcClient.QuitNotify(packet.User, packet.Args); }); AddPacketHandler("431", packet => { packet.IrcClient.InvalidNickNotify("431", "", packet.Args); }); // :Serv 431 Me :No nickname given AddPacketHandler("433", packet => // :Serv 433 Me <Nick> :Nickname is already in use. { var strStream = new StringStream(packet.Content); strStream.SkipWord(); packet.IrcClient.InvalidNickNotify(packet.Key, strStream.NextWord(), packet.Args); }); AddPacketHandler("432", packetHandlers["433"][0]); // :Serv 432 Me <Nick> :Invalid nickname: ... // Channel related Stuff AddPacketHandler("INVITE", packet => { packet.IrcClient.InviteNotify(packet.User, packet.ArgsOrFirstWord); }); AddPacketHandler("JOIN", packet => { packet.IrcClient.JoinNotify(packet.User, packet.ArgsOrFirstWord); }); AddPacketHandler("485", packet => // cannot join channel { packet.channel = packet.IrcClient.GetChannel(packet.Content.NextWord()); packet.IrcClient.CannotJoinNotify(packet.channel, packet.Args); }); AddPacketHandler("471", delegate { }); AddPacketHandler("473", delegate { }); AddPacketHandler("474", delegate { }); AddPacketHandler("475", delegate { }); AddPacketHandler("477", delegate { }); AddPacketHandler("TOPIC", packet => { // User TOPIC Channel :Topic var content = packet.Content; packet.channel = packet.IrcClient.GetOrCreateChannel(content.NextWord()); packet.channel.TopicSetter = packet.User; packet.channel.TopicSetTime = DateTime.Now; packet.IrcClient.TopicNotify(packet.User, packet.channel, packet.Args, false); packet.channel.SetTopic(packet.Args); }); AddPacketHandler("332", packet => { // :Sender 332 Me Channel :Topic var content = packet.Content; //packet.User = packet.IrcClient.GetOrCreateUser(content.NextWord()); content.SkipWord(); packet.channel = packet.IrcClient.GetOrCreateChannel(content.NextWord()); packet.IrcClient.TopicNotify(packet.User, packet.channel, packet.Args, true); packet.channel.SetTopic(packet.Args); }); AddPacketHandler("333", packet => { // :Sender 333 Me Channel TopicSetter TopicTimestamp StringStream content = packet.Content; content.SkipWord(); packet.channel = packet.IrcClient.GetOrCreateChannel(content.NextWord()); packet.User = packet.IrcClient.GetOrCreateUser(content.NextWord()); packet.channel.TopicSetter = packet.User; packet.channel.TopicSetTime = new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(content.NextInt()); }); AddPacketHandler("353", packet => // :Serv 353 Me = Channel :Namelist { var strStream = new StringStream(packet.Content); strStream.SkipWords(2); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); IrcUser[] users = packet.channel.AddNames(packet.Args); packet.IrcClient.UsersAddedNotify(packet.channel, users); }); AddPacketHandler("MODE", packet => // :Serv MODE Channel Modes [ModeArgs] { var strStream = new StringStream(packet.Content); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); strStream.Consume(':', 1); string modes = strStream.NextWord(); strStream.Consume(':', 1); string[] prms = strStream.RemainingWords(); packet.ProtHandler.ParseModes(packet.User, packet.channel, modes, prms); }); AddPacketHandler("PART", packet => { var strStream = new StringStream(packet.Content); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); packet.IrcClient.PartNotify(packet.User, packet.channel, packet.Args); }); AddPacketHandler("KICK", packet => { var strStream = new StringStream(packet.Content); packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); IrcUser user = packet.IrcClient.GetOrCreateUser(strStream.NextWord()); packet.IrcClient.KickNotify(packet.User, packet.channel, user, packet.Args); }); AddPacketHandler("324", packet => // :Serv 324 Me Channel Modes [ModeArgs] { var strStream = new StringStream(packet.Content); strStream.SkipWord(); // skip "Me" packet.channel = packet.IrcClient.GetChannel(strStream.NextWord()); strStream.Consume(':', 1); string modes = strStream.NextWord(); strStream.Consume(':', 1); string[] prms = strStream.RemainingWords(); packet.ProtHandler.ParseModes(packet.User, packet.channel, modes, prms); }); AddPacketHandler("329", packet => // :Serv 329 [Me] #Channel CreationTime { var strStream = new StringStream(packet.Content); String chanName = strStream.NextWord(); if (!chanName.StartsWith("#")) { chanName = strStream.NextWord(); } packet.channel = packet.IrcClient.GetChannel(chanName); DateTime time = new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(Convert.ToInt32(strStream.NextWord())); if (packet.channel != null) packet.channel.SetCreationTime(time); packet.IrcClient.ChanCreationTimeNotify(packet.channel, time); }); AddPacketHandler("352", packet => { // who info //strStream.SkipWord(); var strStream = new StringStream(packet.Content); string channame = strStream.NextWord(); string username = strStream.NextWord(); string host = strStream.NextWord(); string server = strStream.NextWord(); string nick = strStream.NextWord(); string flags = strStream.NextWord(); string hops = strStream.NextWord().Remove(1, 1); string info = packet.Args.Substring(packet.Args.IndexOf(" ") + 1); packet.IrcClient.GetOrCreateUser(nick).SetInfo(username, host, info); packet.IrcClient.WhoReplyNotify(channame, username, host, server, nick, flags, hops, info); }); AddPacketHandler("367", packet => // :Serv 367 Me Channel banMask bannerName banTime { var content = packet.Content; content.SkipWord(); packet.channel = packet.IrcClient.GetChannel(content.NextWord()); var banmask = content.NextWord(); var banner = content.NextWord(); var bantime = content.NextWord(); var entry = new BanEntry(banmask, banner, new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(Convert.ToInt32(bantime))); if (packet.channel != null && !packet.channel.BanMasks.ContainsKey(banmask)) { packet.channel.BanMasks.Add(banmask, entry); } packet.IrcClient.BanListEntryNotify(packet.channel, entry); }); AddPacketHandler("368", packet => { packet.channel = packet.IrcClient.GetChannel(packet.Content.NextWord()); packet.IrcClient.BanListCompleteNotify(packet.channel); }); }
public static void Parser_OutputDataReceived(object sender, DataReceivedEventArgs e) { try { if (e.Data == null) { return; } #region Done if (e.Data.Contains("Done.")) { try { using (var parsedFile = new StreamReader(ParsedFolder + LogFile)) { if (string.IsNullOrEmpty(parsedFile.ReadToEnd().ToLower())) { throw new Exception("Parsed file is empty"); } else { Irc.CommandHandler.Msg(ReplyChan, "Completed Parsing your file is at {0}{1}", WebLinkToParsedFolder, LogFile); } } } catch (Exception excep) { Irc.CommandHandler.Msg(ReplyChan, "The Following Exception Occured {0}, check input file", excep.Message); } } using(var writer = new StreamWriter(GeneralFolder + "toolsoutput.txt", true) {AutoFlush = true}) { writer.WriteLine(e.Data); } #endregion #region Exception if (e.Data.Contains("Exception") && !e.Data.ToLower().Contains("nlog")) { var newexception = new StringStream(e.Data); newexception.NextWord(); if (Exceptions.Where(exception => exception.Message == newexception.Remainder).Any()) { return; } WriteErrorSystem.WriteError(new Exception(newexception.Remainder)); } #endregion } catch(Exception ex) { WriteErrorSystem.WriteError(ex); } }