Exemple #1
0
        /// <summary>
        /// The packet process
        /// </summary>
        /// <param name="packet"></param>
        public override void Process(Packet packet)
        {
            var d = DataMap.Deserialize(packet.Payload);

            UserId  uid  = d["contact-id"];
            GroupId gid  = d["group-id"];
            int     type = int.Parse(d["type"]);

            var user = uid.GetUser(Bot);

            if (user == null)
            {
                user = new User(uid);
                Bot.Information.UserCache.Add(uid, user);
            }

            if (type == 0)
            {
                if (d.ContainsKey("contacts"))
                {
                    d = DataMap.Deserialize(d["contacts"]);
                }
                if (d.ContainsKey(uid.ToString()))
                {
                    d = DataMap.Deserialize(d[uid.ToString()]);
                }
                if (d.ContainsKey("nickname"))
                {
                    user.Nickname = d["nickname"].GetDisplayString();
                }
                if (d.ContainsKey("status"))
                {
                    user.Status = d["status"].GetDisplayString();
                }
                if (d.ContainsKey("rep"))
                {
                    user.Reputation = int.Parse(d["rep"]);
                }
                if (d.ContainsKey("rep_lvl"))
                {
                    user.RepLevel = double.Parse(d["rep_lvl"]);
                }
            }

            var g = new GroupUpdate
            {
                Group  = gid,
                User   = uid,
                IsJoin = type == 0
            };

            Bot.On.Trigger("gu", g);
        }
Exemple #2
0
        /// <summary>
        /// Parse the data from the DataMap given by subprofile
        /// </summary>
        /// <param name="bot"></param>
        /// <param name="data"></param>
        public void Process(DataMap data)
        {
            foreach (var item in data.StrData)
            {
                if (item.Key == "desc")
                {
                    Description = item.Value;
                }
                else if (item.Key == "name")
                {
                    Name = item.Value;
                }
                else if (item.Key == "owner")
                {
                    OwnerId = int.Parse(item.Value);
                }
                else if (item.Key == "attributes")
                {
                    var t2 = DataMap.Deserialize(item.Value);
                    foreach (var it in t2)
                    {
                        var    t3   = DataMap.Deserialize(it.Value);
                        string val  = t3["data"];
                        int    atri = int.Parse(t3["attribute_type"]);
                        switch (atri)
                        {
                        case 1:
                            LongDescription = val;
                            break;

                        case 2:     //Locked
                            Locked = false;
                            break;

                        case 4:     //CONSENT - Full Admin?
                            break;

                        case 5:     //Language ID
                            Language = (Language)int.Parse(val);
                            break;

                        case 6:     //PAYTIER (Proxy Admin?)

                            break;

                        case 7:     //PAYPERIOD (Proxy Admin?)

                            break;

                        case 8:     //AVATAR

                            break;

                        case 9:     //Longitude
                            Longitude = float.Parse(val);
                            break;

                        case 10:     //Latitude
                            Latitude = float.Parse(val);
                            break;

                        case 11:
                            Premium = true;
                            break;

                        case 12:     //Permanent (Proxy Admin?)

                            break;

                        case 14:     //Weight

                            break;

                        case 15:     //Tags
                        case 16:
                        case 17:
                        case 18:
                        case 19:
                            Tags.Add(val);
                            break;

                        case 20:     //Catagories
                        case 21:
                        case 22:
                        case 23:
                        case 24:
                            Categories.Add((GroupCategory)int.Parse(val));
                            break;

                        case 25:     //Entry Level
                            EntryLevel = int.Parse(val);
                            break;

                        case 28:

                            break;

                        case 13:    //Discoverability shit
                        case 3:
                        case 32:
                            Discoverability.Add((GroupOptions)int.Parse(val));
                            break;

                        case 26:    //Anonymous Listeners (Proxy Admin?)

                            break;
                        }
                    }
                }
                else
                {
                    if (!int.TryParse(item.Key, out int uid))
                    {
                        continue;
                    }


                    var t1 = DataMap.Deserialize(item.Value);

                    Role role = Members.ContainsKey(uid) ? Members[uid] : Role.User;

                    if (t1.ContainsKey("capabilities"))
                    {
                        role = (Role)int.Parse(t1["capabilities"]);
                    }

                    if (uid == OwnerId)
                    {
                        role = Role.Owner;
                    }

                    if (!Members.ContainsKey(uid))
                    {
                        Members.Add(uid, role);
                    }
                    else
                    {
                        Members[uid] = role;
                    }
                }
            }

            if (Members.ContainsKey(OwnerId))
            {
                Members[OwnerId] = Role.Owner;
            }
            else
            {
                Members.Add(OwnerId, Role.Owner);
            }
        }
Exemple #3
0
        /// <summary>
        /// Parses sub profile information given from the packet
        /// </summary>
        /// <param name="bot"></param>
        /// <param name="packet"></param>
        public void Parse(PalBot bot, Packet packet)
        {
            DataMap map;

            if (packet["IV"] != null && packet["RK"] != null)
            {
                int iv = int.Parse(packet["IV"]);
                int rk = iv != 0 ? int.Parse(packet["RK"]) : 0;
                map = new DataMap();
                map.Deserialize(Static.PalringoEncoding.GetBytes(packet.Payload), iv, packet.Payload.Length - iv - rk);
            }
            else
            {
                map = new DataMap(Static.PalringoEncoding.GetBytes(packet.Payload));
            }

            try
            {
                var contacts = map.GetValueMapAll("contacts");
                if (contacts != null)
                {
                    foreach (var item in contacts.Data)
                    {
                        UserId id;
                        if (!UserId.TryParse(item.Key, out id))
                        {
                            continue;
                        }

                        var cm = new DataMap(item.Value);
                        if (UserCache.ContainsKey(id))
                        {
                            UserCache[id].Parse(bot, cm);
                        }
                        else
                        {
                            var u = new User(id);
                            u.Parse(bot, cm);
                            UserCache.Add(id, u);
                        }
                    }
                }

                var groups = map.GetValueMap("group_sub");
                if (groups != null)
                {
                    foreach (var gm in groups.Data)
                    {
                        int id;
                        if (!int.TryParse(gm.Key, out id))
                        {
                            continue;
                        }
                        if (Groups.ContainsKey(id))
                        {
                            Groups[id].Parse(bot, new DataMap(gm.Value));
                        }
                        else
                        {
                            var gp = new Group {
                                Id = id
                            };
                            gp.Parse(bot, new DataMap(gm.Value));
                            Groups.Add(id, gp);
                            bot.On.Trigger("gj", gp);
                        }
                    }
                }

                var ext = map.GetValueMap("ext");
                if (ext != null)
                {
                    Profile.Parse(bot, ext);
                }

                if (map != null)
                {
                    Profile.Parse(bot, map);
                }
            }
            catch (Exception ex)
            {
                bot.On.Trigger("e", ex);
            }
        }
Exemple #4
0
        public void Process(byte[] data, int?iv, int?rk)
        {
            DataMap map;

            if (iv.HasValue && rk.HasValue)
            {
                map = new DataMap();
                map.Deserialize(data, iv.Value, data.Length - iv.Value - rk.Value);
            }
            else
            {
                map = new DataMap(data);
            }

            try
            {
                var contacts = map.GetValueMapAll("contacts");
                if (contacts != null)
                {
                    foreach (var item in contacts.Data)
                    {
                        if (!int.TryParse(item.Key, out int id))
                        {
                            continue;
                        }

                        var cm = new DataMap(item.Value);
                        if (Users.ContainsKey(id))
                        {
                            Users[id].Process(cm);
                        }
                        else
                        {
                            var u = new User(id);
                            u.Process(cm);
                            Users.Add(id, u);
                        }
                    }
                }

                var groups = map.GetValueMap("group_sub");
                if (groups != null)
                {
                    foreach (var gm in groups.Data)
                    {
                        if (!int.TryParse(gm.Key, out int id))
                        {
                            continue;
                        }
                        if (Groups.ContainsKey(id))
                        {
                            Groups[id].Process(new DataMap(gm.Value));
                        }
                        else
                        {
                            var gp = new Group {
                                Id = id
                            };
                            gp.Process(new DataMap(gm.Value));
                            Groups.Add(id, gp);
                        }
                    }
                }

                var ext = map.GetValueMap("ext");
                if (ext != null)
                {
                    Profile.Process(ext);
                }

                if (map != null)
                {
                    Profile.Process(map);
                }
            }
            catch (Exception ex)
            {
                broadcast.BroadcastException(ex, "Error parsing sub profile data");
            }
        }
Exemple #5
0
        /// <summary>
        /// Parse the data from the DataMap given by subprofile
        /// </summary>
        /// <param name="bot"></param>
        /// <param name="data"></param>
        public void Parse(PalBot bot, DataMap data)
        {
            foreach (var item in data.StrData)
            {
                if (item.Key == "desc")
                {
                    Description = item.Value.GetDisplayString();
                }
                else if (item.Key == "name")
                {
                    Name = item.Value.GetDisplayString();
                }
                else if (item.Key == "owner")
                {
                    OwnerId = item.Value;
                }
                else if (item.Key == "attributes")
                {
                    var t2 = DataMap.Deserialize(item.Value);
                    foreach (var it in t2)
                    {
                        var    t3   = DataMap.Deserialize(it.Value);
                        string val  = t3["data"];
                        int    atri = int.Parse(t3["attribute_type"]);
                        #region Attributes
                        switch (atri)
                        {
                        case 1:
                            LongDescription = val.GetDisplayString();
                            break;

                        case 2:     //Locked
                            Locked = false;
                            break;

                        case 4:     //CONSENT - Full Admin?
                            break;

                        case 5:     //Language ID
                            Language = (Language)int.Parse(val);
                            break;

                        case 6:     //PAYTIER (Proxy Admin?)

                            break;

                        case 7:     //PAYPERIOD (Proxy Admin?)

                            break;

                        case 8:     //AVATAR

                            break;

                        case 9:     //Longitude
                            Longitude = float.Parse(val);
                            break;

                        case 10:     //Latitude
                            Latitude = float.Parse(val);
                            break;

                        case 11:
                            Premium = true;
                            break;

                        case 12:     //Permanent (Proxy Admin?)

                            break;

                        case 14:     //Weight

                            break;

                        case 15:     //Tags
                        case 16:
                        case 17:
                        case 18:
                        case 19:
                            Tags.Add(val.GetDisplayString());
                            break;

                        case 20:     //Catagories
                        case 21:
                        case 22:
                        case 23:
                        case 24:
                            Categories.Add((GroupCategory)int.Parse(val));
                            break;

                        case 25:     //Entry Level
                            EntryLevel = int.Parse(val);
                            break;

                        case 28:

                            break;

                        case 13:    //Discoverability shit
                        case 3:
                        case 32:
                            Discoverability.Add((GroupOptions)int.Parse(val));
                            break;

                        case 26:    //Anonymous Listeners (Proxy Admin?)

                            break;
                        }
                        #endregion
                    }
                }
                else
                {
                    UserId uid;
                    if (!UserId.TryParse(item.Key, out uid))
                    {
                        continue;
                    }

                    var gm = Members.ContainsKey(uid) ? Members[uid] : GroupUser.FromUser(uid.GetUser(bot) ?? new User(uid));

                    var t1 = DataMap.Deserialize(item.Value);
                    if (t1.ContainsKey("capabilities"))
                    {
                        gm.UserRole = OwnerId == uid ? Role.Owner : (Role)int.Parse(t1["capabilities"]);
                    }

                    if (!Members.ContainsKey(uid))
                    {
                        Members.Add(uid, gm);
                    }
                }
            }

            if (Members.ContainsKey(OwnerId))
            {
                Members[OwnerId].UserRole = Role.Owner;
            }

            Updated();
        }