From bc469cbb4612d1976298445afd36930a540802e1 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sat, 18 Mar 2017 11:33:38 -0300 Subject: [PATCH] Process everyone permission overwrites before role --- src/Discord.Net.Core/Utils/Permissions.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net.Core/Utils/Permissions.cs b/src/Discord.Net.Core/Utils/Permissions.cs index d0e78472d..a99c64094 100644 --- a/src/Discord.Net.Core/Utils/Permissions.cs +++ b/src/Discord.Net.Core/Utils/Permissions.cs @@ -115,16 +115,21 @@ namespace Discord resolvedPermissions = mask; //Owners and administrators always have all permissions else { + OverwritePermissions? perms; + //Start with this user's guild permissions resolvedPermissions = guildPermissions; + //Give/Take Everyone permissions + perms = channel.GetPermissionOverwrite(guild.EveryoneRole); + if (perms != null) + resolvedPermissions = (resolvedPermissions & ~perms.Value.DenyValue) | perms.Value.AllowValue; + //Give/Take Role permissions - OverwritePermissions? perms; - var roleIds = user.RoleIds; - if (roleIds.Count > 0) + ulong deniedPermissions = 0UL, allowedPermissions = 0UL; + foreach (var roleId in user.RoleIds) { - ulong deniedPermissions = 0UL, allowedPermissions = 0UL; - foreach (var roleId in roleIds) + if (roleId != guild.EveryoneRole.Id) { perms = channel.GetPermissionOverwrite(guild.GetRole(roleId)); if (perms != null) @@ -133,8 +138,8 @@ namespace Discord deniedPermissions |= perms.Value.DenyValue; } } - resolvedPermissions = (resolvedPermissions & ~deniedPermissions) | allowedPermissions; } + resolvedPermissions = (resolvedPermissions & ~deniedPermissions) | allowedPermissions; //Give/Take User permissions perms = channel.GetPermissionOverwrite(user);