Added owner/managechannel implicit permission resolving

This commit is contained in:
RogueException
2015-10-03 19:38:21 -03:00
parent 4a3fe20007
commit d7da8d6e21
3 changed files with 29 additions and 14 deletions

View File

@@ -157,13 +157,18 @@ namespace Discord
var server = Server; var server = Server;
if (server == null) return; if (server == null) return;
var channel = _client.Channels[channelId]; var channel = _client.Channels[channelId];
if (channel == null) return;
var channelOverwrites = channel.PermissionOverwrites;
PackedChannelPermissions permissions; PackedChannelPermissions permissions;
if (!_permissions.TryGetValue(channelId, out permissions)) return; if (!_permissions.TryGetValue(channelId, out permissions)) return;
uint newPermissions = 0x0; uint newPermissions = 0x0;
if (UserId == server.OwnerId)
newPermissions = PackedChannelPermissions.Mask;
else
{
if (channel == null) return;
var channelOverwrites = channel.PermissionOverwrites;
foreach (var serverRole in Roles) foreach (var serverRole in Roles)
newPermissions |= serverRole.Permissions.RawValue; newPermissions |= serverRole.Permissions.RawValue;
foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && RoleIds.Contains(x.Id))) foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && RoleIds.Contains(x.Id)))
@@ -175,6 +180,10 @@ namespace Discord
foreach (var allowMembers in channelOverwrites.Where(x => x.Type == PermissionTarget.Member && x.Id == UserId && x.Allow.RawValue != 0)) foreach (var allowMembers in channelOverwrites.Where(x => x.Type == PermissionTarget.Member && x.Id == UserId && x.Allow.RawValue != 0))
newPermissions |= allowMembers.Allow.RawValue; newPermissions |= allowMembers.Allow.RawValue;
if (((newPermissions >> (PackedChannelPermissions.GlobalBit - 1)) & 1) == 1)
newPermissions = PackedChannelPermissions.Mask;
}
if (permissions.RawValue != newPermissions) if (permissions.RawValue != newPermissions)
{ {
permissions.RawValue = newPermissions; permissions.RawValue = newPermissions;

View File

@@ -4,6 +4,9 @@ namespace Discord
{ {
public sealed class PackedServerPermissions : PackedPermissions public sealed class PackedServerPermissions : PackedPermissions
{ {
internal const int GlobalBit = 4; //ManagePermissions implicitly gives all permissions
internal static uint Mask = Convert.ToUInt32("00000011111100111111110000111111", 2);
public PackedServerPermissions() : base(false, 0) { } public PackedServerPermissions() : base(false, 0) { }
internal PackedServerPermissions(bool isLocked, uint rawValue) : base(isLocked, rawValue) { } internal PackedServerPermissions(bool isLocked, uint rawValue) : base(isLocked, rawValue) { }
@@ -23,6 +26,9 @@ namespace Discord
public sealed class PackedChannelPermissions : PackedPermissions public sealed class PackedChannelPermissions : PackedPermissions
{ {
internal const int GlobalBit = 4; //ManagePermissions implicitly gives all permissions
internal static uint Mask = Convert.ToUInt32("00000011111100111111110000011001", 2);
public PackedChannelPermissions() : base(false, 0) { } public PackedChannelPermissions() : base(false, 0) { }
internal PackedChannelPermissions(bool isLocked, uint rawValue) : base(isLocked, rawValue) { } internal PackedChannelPermissions(bool isLocked, uint rawValue) : base(isLocked, rawValue) { }