From 24ed9c6c09ce4f748f6e64fb81570708ded252b6 Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 18 Aug 2016 19:42:14 -0300 Subject: [PATCH] GuildPermissions should take into account ownership and administrator --- src/Discord.Net/Entities/Permissions/Permissions.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net/Entities/Permissions/Permissions.cs b/src/Discord.Net/Entities/Permissions/Permissions.cs index 1ce73ccb0..22c0c3023 100644 --- a/src/Discord.Net/Entities/Permissions/Permissions.cs +++ b/src/Discord.Net/Entities/Permissions/Permissions.cs @@ -88,11 +88,18 @@ namespace Discord public static ulong ResolveGuild(IGuildUser user) { - var roles = user.Roles; - ulong newPermissions = 0; - foreach (var role in roles) - newPermissions |= role.Permissions.RawValue; - return newPermissions; + ulong resolvedPermissions = 0; + + if (user.Id == user.Guild.OwnerId) + resolvedPermissions = GuildPermissions.All.RawValue; //Owners always have all permissions + else + { + foreach (var role in user.Roles) + resolvedPermissions |= role.Permissions.RawValue; + if (GetValue(resolvedPermissions, GuildPermission.Administrator)) + resolvedPermissions = GuildPermissions.All.RawValue; //Administrators always have all permissions + } + return resolvedPermissions; } /*public static ulong ResolveChannel(IGuildUser user, IGuildChannel channel) @@ -104,7 +111,7 @@ namespace Discord ulong resolvedPermissions = 0; ulong mask = ChannelPermissions.All(channel).RawValue; - if (user.Id == user.Guild.OwnerId || GetValue(guildPermissions, GuildPermission.Administrator)) + if (/*user.Id == user.Guild.OwnerId || */GetValue(guildPermissions, GuildPermission.Administrator)) resolvedPermissions = mask; //Owners and administrators always have all permissions else {