private void GuildUpdateEvents(JObject message) { DiscordServer oldServer = ServersList.Find(x => x.id == message["d"]["id"].ToString()); DiscordServer newServer = new DiscordServer { name = message["d"]["name"].ToString(), id = message["d"]["name"].ToString() }; newServer.roles = new List<DiscordRole>(); if (!message["d"]["roles"].IsNullOrEmpty()) { foreach (var roll in message["d"]["roles"]) { DiscordRole t = new DiscordRole { color = new DiscordSharp.Color(roll["color"].ToObject<int>().ToString("x")), name = roll["name"].ToString(), permissions = new DiscordPermission(roll["permissions"].ToObject<uint>()), position = roll["position"].ToObject<int>(), managed = roll["managed"].ToObject<bool>(), id = roll["id"].ToString(), hoist = roll["hoist"].ToObject<bool>() }; newServer.roles.Add(t); } } newServer.channels = new List<DiscordChannel>(); if (!message["d"]["channels"].IsNullOrEmpty()) { foreach (var u in message["d"]["channels"]) { DiscordChannel tempSub = new DiscordChannel(); tempSub.id = u["id"].ToString(); tempSub.name = u["name"].ToString(); tempSub.type = u["type"].ToString(); tempSub.topic = u["topic"].ToString(); tempSub.parent = newServer; List<DiscordPermissionOverride> permissionoverrides = new List<DiscordPermissionOverride>(); foreach (var o in u["permission_overwrites"]) { DiscordPermissionOverride dpo = new DiscordPermissionOverride(o["allow"].ToObject<uint>(), o["deny"].ToObject<uint>()); dpo.type = o["type"].ToObject<DiscordPermissionOverride.OverrideType>(); dpo.id = o["id"].ToString(); permissionoverrides.Add(dpo); } tempSub.PermissionOverrides = permissionoverrides; newServer.channels.Add(tempSub); } } if (!message["d"]["members"].IsNullOrEmpty()) { foreach (var mm in message["d"]["members"]) { DiscordMember member = JsonConvert.DeserializeObject<DiscordMember>(mm["user"].ToString()); member.parentclient = this; member.Parent = newServer; JArray rawRoles = JArray.Parse(mm["roles"].ToString()); if (rawRoles.Count > 0) { foreach (var role in rawRoles.Children()) { member.Roles.Add(newServer.roles.Find(x => x.id == role.Value<string>())); } } else { member.Roles.Add(newServer.roles.Find(x => x.name == "@everyone")); } newServer.members.Add(member); } } if (!message["d"]["owner_id"].IsNullOrEmpty()) { newServer.owner = newServer.members.Find(x => x.ID == message["d"]["owner_id"].ToString()); DebugLogger.Log($"Transferred ownership from user '{oldServer.owner.Username}' to {newServer.owner.Username}."); } ServersList.Remove(oldServer); ServersList.Add(newServer); DiscordServerUpdateEventArgs dsuea = new DiscordServerUpdateEventArgs { NewServer = newServer, OldServer = oldServer }; if (GuildUpdated != null) GuildUpdated(this, dsuea); }
private void GuildUpdateEvents(JObject message) { DiscordServer oldServer = ServersList.Find(x => x.ID == message["d"]["id"].ToString()); DiscordServer newServer = oldServer.ShallowCopy(); newServer.Name = message["d"]["name"].ToString(); newServer.ID = message["d"]["id"].ToString(); newServer.parentclient = this; newServer.Roles = new List<DiscordRole>(); newServer.Region = message["d"]["region"].ToString(); if (!message["d"]["icon"].IsNullOrEmpty()) { newServer.icon = message["d"]["icon"].ToString(); } if (!message["d"]["roles"].IsNullOrEmpty()) { foreach (var roll in message["d"]["roles"]) { DiscordRole t = new DiscordRole { Color = new DiscordSharp.Color(roll["color"].ToObject<int>().ToString("x")), Name = roll["name"].ToString(), Permissions = new DiscordPermission(roll["permissions"].ToObject<uint>()), Position = roll["position"].ToObject<int>(), Managed = roll["managed"].ToObject<bool>(), ID = roll["id"].ToString(), Hoist = roll["hoist"].ToObject<bool>() }; newServer.Roles.Add(t); } } else { newServer.Roles = oldServer.Roles; } newServer.Channels = new List<DiscordChannel>(); if (!message["d"]["channels"].IsNullOrEmpty()) { foreach (var u in message["d"]["channels"]) { DiscordChannel tempSub = new DiscordChannel(); tempSub.Client = this; tempSub.ID = u["id"].ToString(); tempSub.Name = u["name"].ToString(); tempSub.Type = u["type"].ToObject<ChannelType>(); if (!u["topic"].IsNullOrEmpty()) tempSub.Topic = u["topic"].ToString(); if (tempSub.Type == ChannelType.Voice && !u["bitrate"].IsNullOrEmpty()) tempSub.Bitrate = u["bitrate"].ToObject<int>(); tempSub.Parent = newServer; List<DiscordPermissionOverride> permissionoverrides = new List<DiscordPermissionOverride>(); foreach (var o in u["permission_overwrites"]) { DiscordPermissionOverride dpo = new DiscordPermissionOverride(o["allow"].ToObject<uint>(), o["deny"].ToObject<uint>()); dpo.type = o["type"].ToObject<DiscordPermissionOverride.OverrideType>(); dpo.id = o["id"].ToString(); permissionoverrides.Add(dpo); } tempSub.PermissionOverrides = permissionoverrides; newServer.Channels.Add(tempSub); } } else { newServer.Channels = oldServer.Channels; } if (!message["d"]["members"].IsNullOrEmpty()) { foreach (var mm in message["d"]["members"]) { DiscordMember member = JsonConvert.DeserializeObject<DiscordMember>(mm["user"].ToString()); member.parentclient = this; member.Parent = newServer; JArray rawRoles = JArray.Parse(mm["roles"].ToString()); if (rawRoles.Count > 0) { foreach (var role in rawRoles.Children()) { member.Roles.Add(newServer.Roles.Find(x => x.ID == role.Value<string>())); } } else { member.Roles.Add(newServer.Roles.Find(x => x.Name == "@everyone")); } newServer.AddMember(member); } } else { newServer.Members = oldServer.Members; } if (!message["d"]["owner_id"].IsNullOrEmpty()) { newServer.Owner = newServer.GetMemberByKey(message["d"]["owner_id"].ToString()); DebugLogger.Log($"Transferred ownership from user '{oldServer.Owner.Username}' to {newServer.Owner.Username}."); } ServersList.Remove(oldServer); ServersList.Add(newServer); DiscordServerUpdateEventArgs dsuea = new DiscordServerUpdateEventArgs { NewServer = newServer, OldServer = oldServer }; GuildUpdated?.Invoke(this, dsuea); }