/// <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); }
/// <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); } }
/// <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); } }
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"); } }
/// <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(); }