diff --git a/src/Discord.Net/Models/Member.cs b/src/Discord.Net/Models/Member.cs index a9b6f1fd5..c4fbd4ba8 100644 --- a/src/Discord.Net/Models/Member.cs +++ b/src/Discord.Net/Models/Member.cs @@ -184,11 +184,12 @@ namespace Discord if (channel == null) return; var channelOverwrites = channel.PermissionOverwrites; - foreach (var serverRole in Roles) + var orderedRoles = Roles.OrderBy(x => x.Id); + foreach (var serverRole in orderedRoles) newPermissions |= serverRole.Permissions.RawValue; - foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && RoleIds.Contains(x.TargetId))) + foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && orderedRoles.Any(y => y.Id == x.TargetId))) newPermissions &= ~denyRole.Deny.RawValue; - foreach (var allowRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Allow.RawValue != 0 && RoleIds.Contains(x.TargetId))) + foreach (var allowRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Allow.RawValue != 0 && orderedRoles.Any(y => y.Id == x.TargetId))) newPermissions |= allowRole.Allow.RawValue; foreach (var denyMembers in channelOverwrites.Where(x => x.Type == PermissionTarget.Member && x.TargetId == UserId && x.Deny.RawValue != 0)) newPermissions &= ~denyMembers.Deny.RawValue; diff --git a/src/Discord.Net/Models/Role.cs b/src/Discord.Net/Models/Role.cs index 153db05be..d6484a866 100644 --- a/src/Discord.Net/Models/Role.cs +++ b/src/Discord.Net/Models/Role.cs @@ -45,6 +45,9 @@ namespace Discord Permissions.Lock(); Color = new PackedColor(0); Color.Lock(); + + if (isEveryone) + Position = int.MinValue; } internal void Update(API.RoleInfo model) @@ -53,7 +56,7 @@ namespace Discord Name = model.Name; if (model.Hoist != null) Hoist = model.Hoist.Value; - if (model.Position != null) + if (model.Position != null && !IsEveryone) Position = model.Position.Value; if (model.Color != null) Color.SetRawValue(model.Color.Value);