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);
     }
 }
Example #2
0
 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();
        }
Example #5
0
 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);
     }
 }
Example #6
0
        /// <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);
            });
        }
Example #7
0
        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);
            }
        }