| @@ -115,16 +115,21 @@ namespace Discord | |||||
| resolvedPermissions = mask; //Owners and administrators always have all permissions | resolvedPermissions = mask; //Owners and administrators always have all permissions | ||||
| else | else | ||||
| { | { | ||||
| OverwritePermissions? perms; | |||||
| //Start with this user's guild permissions | //Start with this user's guild permissions | ||||
| resolvedPermissions = guildPermissions; | 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 | //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)); | perms = channel.GetPermissionOverwrite(guild.GetRole(roleId)); | ||||
| if (perms != null) | if (perms != null) | ||||
| @@ -133,8 +138,8 @@ namespace Discord | |||||
| deniedPermissions |= perms.Value.DenyValue; | deniedPermissions |= perms.Value.DenyValue; | ||||
| } | } | ||||
| } | } | ||||
| resolvedPermissions = (resolvedPermissions & ~deniedPermissions) | allowedPermissions; | |||||
| } | } | ||||
| resolvedPermissions = (resolvedPermissions & ~deniedPermissions) | allowedPermissions; | |||||
| //Give/Take User permissions | //Give/Take User permissions | ||||
| perms = channel.GetPermissionOverwrite(user); | perms = channel.GetPermissionOverwrite(user); | ||||