Beispiel #1
0
        protected override bool ParseInternal(IrcConnection aConnection, string aMessage, IrcEventArgs aEvent)
        {
            Model.Domain.Channel tChan = null;

            if (aEvent.Data.Type == ReceiveType.QueryNotice)
            {
                if (!String.IsNullOrEmpty(aEvent.Data.Nick))
                {
                    var user = aConnection.Client.GetIrcUser(aEvent.Data.Nick);
                    if (user != null)
                    {
                        foreach (string channel in user.JoinedChannels)
                        {
                            tChan = aConnection.Server.Channel(channel);
                            if (tChan != null)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                tChan = aConnection.Server.Channel(aEvent.Data.Channel);
            }

            if (tChan != null)
            {
                string[] regexes =
                {
                    "#(?<pack_id>\\d+)(\u0240|)\\s+(\\d*)x\\s+\\[\\s*(?<pack_size>[\\<\\>\\d.]+)(?<pack_add>[BbGgiKMs]+)\\]\\s+(?<pack_name>.*)"
                };
                var match = Helper.Match(aMessage, regexes);
                if (match.Success)
                {
                    string tUserName = aEvent.Data.Nick;
                    Bot tBot = aConnection.Server.Bot(tUserName);
                    Model.Domain.Packet newPacket = null;

                    bool insertBot = false;
                    if (tBot == null)
                    {
                        insertBot = true;
                        tBot = new Bot {Name = tUserName, Connected = true, LastMessage = "initial creation", LastContact = DateTime.Now};
                    }

                    try
                    {
                        int tPacketId;
                        try
                        {
                            tPacketId = int.Parse(match.Groups["pack_id"].ToString());
                        }
                        catch (Exception ex)
                        {
                            Log.Fatal("Parse() " + tBot + " - can not parse packet id from string: " + aMessage, ex);
                            return false;
                        }

                        Model.Domain.Packet tPack = tBot.Packet(tPacketId);
                        if (tPack == null)
                        {
                            tPack = new Model.Domain.Packet();
                            newPacket = tPack;
                            tPack.Id = tPacketId;
                            tBot.AddPacket(tPack);
                        }
                        tPack.LastMentioned = DateTime.Now;

                        string name = RemoveSpecialIrcCharsFromPacketName(match.Groups["pack_name"].ToString());
                        if (tPack.Name != name && tPack.Name != "")
                        {
                            tPack.Enabled = false;
                            if (!tPack.Connected)
                            {
                                tPack.RealName = "";
                                tPack.RealSize = 0;
                            }
                        }
                        tPack.Name = name;

                        double tPacketSizeFormated;
                        string stringSize = match.Groups["pack_size"].ToString().Replace("<", "").Replace(">", "");
                        if (Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
                        {
                            stringSize = stringSize.Replace('.', ',');
                        }
                        double.TryParse(stringSize, out tPacketSizeFormated);

                        string tPacketAdd = match.Groups["pack_add"].ToString().ToLower();

                        if (tPacketAdd == "k" || tPacketAdd == "kb")
                        {
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024);
                        }
                        else if (tPacketAdd == "m" || tPacketAdd == "mb")
                        {
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024 * 1024);
                        }
                        else if (tPacketAdd == "g" || tPacketAdd == "gb")
                        {
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024 * 1024 * 1024);
                        }

                        if (tPack.Commit() && newPacket == null)
                        {
                            Log.Info("Parse() updated " + tPack + " from " + tBot);
                        }
                    }
                    catch (FormatException) {}

                    // insert bot if ok
                    if (insertBot)
                    {
                        if (tChan.AddBot(tBot))
                        {
                            Log.Info("Parse() inserted " + tBot);
                        }
                        else
                        {
                            var duplicateBot = tChan.Bot(tBot.Name);
                            if (duplicateBot != null)
                            {
                                tBot = duplicateBot;
                            }
                            else
                            {
                                Log.Error("Parse() cant insert " + tBot + " into " + tChan);
                            }
                        }
                    }
                    // and insert packet _AFTER_ this
                    if (newPacket != null)
                    {
                        tBot.AddPacket(newPacket);
                        Log.Info("Parse() inserted " + newPacket + " into " + tBot);
                    }

                    tBot.Commit();
                    tChan.Commit();
                    return true;
                }
            }
            return false;
        }
Beispiel #2
0
        public override bool Parse(Message aMessage)
        {
            string[] regexes =
            {
                "#(?<pack_id>\\d+)(\u0240|)\\s+(\\d*)x\\s+\\[\\s*(?<pack_size>[\\<\\>\\d.]+)(?<pack_add>[BbGgiKMs]+)\\]\\s+(?<pack_name>.*)"
            };
            var match = Helper.Match(aMessage.Text, regexes);
            if (match.Success)
            {
                string tUserName = aMessage.Nick;
                Bot tBot = aMessage.Channel.Bot(tUserName);
                Model.Domain.Packet newPacket = null;

                bool insertBot = false;
                if (tBot == null)
                {
                    insertBot = true;
                    tBot = new Bot {Name = tUserName, Connected = true, LastMessage = "initial creation", LastContact = DateTime.Now};
                }

                try
                {
                    int tPacketId;
                    try
                    {
                        tPacketId = int.Parse(match.Groups["pack_id"].ToString());
                    }
                    catch (Exception ex)
                    {
                        Log.Fatal("Parse() " + tBot + " - can not parse packet id from string: " + aMessage, ex);
                        return false;
                    }

                    Model.Domain.Packet tPack = tBot.Packet(tPacketId);
                    if (tPack == null)
                    {
                        tPack = new Model.Domain.Packet();
                        newPacket = tPack;
                        tPack.Id = tPacketId;
                        tBot.AddPacket(tPack);
                    }
                    tPack.LastMentioned = DateTime.Now;

                    string name = RemoveSpecialIrcCharsFromPacketName(match.Groups["pack_name"].ToString());
                    if (tPack.Name != name && tPack.Name != "")
                    {
                        tPack.Enabled = false;
                        if (!tPack.Connected)
                        {
                            tPack.RealName = "";
                            tPack.RealSize = 0;
                        }
                    }
                    tPack.Name = name;

                    double tPacketSizeFormated;
                    string stringSize = match.Groups["pack_size"].ToString().Replace("<", "").Replace(">", "");
                    if (Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
                    {
                        stringSize = stringSize.Replace('.', ',');
                    }
                    double.TryParse(stringSize, out tPacketSizeFormated);

                    string tPacketAdd = match.Groups["pack_add"].ToString().ToLower();

                    switch (tPacketAdd)
                    {
                        case "k":
                        case "kb":
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024);
                            break;

                        case "m":
                        case "mb":
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024 * 1024);
                            break;

                        case "g":
                        case "gb":
                            tPack.Size = (Int64) (tPacketSizeFormated * 1024 * 1024 * 1024);
                            break;
                    }

                    if (tPack.Commit() && newPacket == null)
                    {
                        Log.Info("Parse() updated " + tPack + " from " + tBot);
                    }
                }
                catch (FormatException) {}

                // insert bot if ok
                if (insertBot)
                {
                    if (aMessage.Channel.AddBot(tBot))
                    {
                        Log.Info("Parse() inserted " + tBot);
                    }
                    else
                    {
                        var duplicateBot = aMessage.Channel.Bot(tBot.Name);
                        if (duplicateBot != null)
                        {
                            tBot = duplicateBot;
                        }
                        else
                        {
                            Log.Error("Parse() cant insert " + tBot + " into " + aMessage.Channel);
                        }
                    }
                }
                // and insert packet _AFTER_ this
                if (newPacket != null)
                {
                    tBot.AddPacket(newPacket);
                    Log.Info("Parse() inserted " + newPacket + " into " + tBot);
                }

                tBot.Commit();
                aMessage.Channel.Commit();
            }
            return match.Success;
        }
Beispiel #3
0
        public override bool Parse(Message aMessage)
        {
            string[] regexes =
            {
                "#(?<pack_id>\\d+)(\u0240|)\\s+(\\d*)x\\s+\\[\\s*(?<pack_size>[\\<\\>\\d.]+)(?<pack_add>[BbGgiKMs]+)\\]\\s+(?<pack_name>.*)"
            };
            var match = Helper.Match(aMessage.Text, regexes);

            if (match.Success)
            {
                string tUserName = aMessage.Nick;
                Bot    tBot      = aMessage.Channel.Bot(tUserName);
                Model.Domain.Packet newPacket = null;

                bool insertBot = false;
                if (tBot == null)
                {
                    insertBot = true;
                    tBot      = new Bot {
                        Name = tUserName, Connected = true, LastMessage = "initial creation", LastContact = DateTime.Now
                    };
                }

                try
                {
                    int tPacketId;
                    try
                    {
                        tPacketId = int.Parse(match.Groups["pack_id"].ToString());
                    }
                    catch (Exception ex)
                    {
                        Log.Fatal("Parse() " + tBot + " - can not parse packet id from string: " + aMessage, ex);
                        return(false);
                    }

                    Model.Domain.Packet tPack = tBot.Packet(tPacketId);
                    if (tPack == null)
                    {
                        tPack     = new Model.Domain.Packet();
                        newPacket = tPack;
                        tPack.Id  = tPacketId;
                        tBot.AddPacket(tPack);
                    }
                    tPack.LastMentioned = DateTime.Now;

                    string name = RemoveSpecialIrcCharsFromPacketName(match.Groups["pack_name"].ToString());
                    if (tPack.Name != name && tPack.Name != "")
                    {
                        tPack.Enabled = false;
                        if (!tPack.Connected)
                        {
                            tPack.RealName = "";
                            tPack.RealSize = 0;
                        }
                    }
                    tPack.Name = name;

                    double tPacketSizeFormated;
                    string stringSize = match.Groups["pack_size"].ToString().Replace("<", "").Replace(">", "");
                    if (Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
                    {
                        stringSize = stringSize.Replace('.', ',');
                    }
                    double.TryParse(stringSize, out tPacketSizeFormated);

                    string tPacketAdd = match.Groups["pack_add"].ToString().ToLower();

                    switch (tPacketAdd)
                    {
                    case "k":
                    case "kb":
                        tPack.Size = (Int64)(tPacketSizeFormated * 1024);
                        break;

                    case "m":
                    case "mb":
                        tPack.Size = (Int64)(tPacketSizeFormated * 1024 * 1024);
                        break;

                    case "g":
                    case "gb":
                        tPack.Size = (Int64)(tPacketSizeFormated * 1024 * 1024 * 1024);
                        break;
                    }

                    if (tPack.Commit() && newPacket == null)
                    {
                        Log.Info("Parse() updated " + tPack + " from " + tBot);
                    }
                }
                catch (FormatException) {}

                // insert bot if ok
                if (insertBot)
                {
                    if (aMessage.Channel.AddBot(tBot))
                    {
                        Log.Info("Parse() inserted " + tBot);
                    }
                    else
                    {
                        var duplicateBot = aMessage.Channel.Bot(tBot.Name);
                        if (duplicateBot != null)
                        {
                            tBot = duplicateBot;
                        }
                        else
                        {
                            Log.Error("Parse() cant insert " + tBot + " into " + aMessage.Channel);
                        }
                    }
                }
                // and insert packet _AFTER_ this
                if (newPacket != null)
                {
                    tBot.AddPacket(newPacket);
                    Log.Info("Parse() inserted " + newPacket + " into " + tBot);
                }

                tBot.Commit();
                aMessage.Channel.Commit();
            }
            return(match.Success);
        }