Browse Source

Process everyone permission overwrites before role

tags/1.0-rc
RogueException 8 years ago
parent
commit
bc469cbb46
1 changed files with 11 additions and 6 deletions
  1. +11
    -6
      src/Discord.Net.Core/Utils/Permissions.cs

+ 11
- 6
src/Discord.Net.Core/Utils/Permissions.cs View File

@@ -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);


Loading…
Cancel
Save