From 72f8e4f5df87d0fe4f07472dbe50844a41ae96b9 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 13 Oct 2015 05:27:05 -0300 Subject: [PATCH] Added role order support to permission resolving --- src/Discord.Net/Models/Member.cs | 7 ++++--- src/Discord.Net/Models/Role.cs | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) 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);