|
@@ -111,7 +111,7 @@ namespace Discord |
|
|
ulong resolvedPermissions = 0; |
|
|
ulong resolvedPermissions = 0; |
|
|
|
|
|
|
|
|
ulong mask = ChannelPermissions.All(channel).RawValue; |
|
|
ulong mask = ChannelPermissions.All(channel).RawValue; |
|
|
if (/*user.Id == user.Guild.OwnerId || */GetValue(guildPermissions, GuildPermission.Administrator)) |
|
|
|
|
|
|
|
|
if (GetValue(guildPermissions, GuildPermission.Administrator)) //Includes owner |
|
|
resolvedPermissions = mask; //Owners and administrators always have all permissions |
|
|
resolvedPermissions = mask; //Owners and administrators always have all permissions |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
@@ -133,21 +133,32 @@ namespace Discord |
|
|
deniedPermissions |= perms.Value.DenyValue; |
|
|
deniedPermissions |= perms.Value.DenyValue; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
resolvedPermissions = (resolvedPermissions | allowedPermissions) & ~deniedPermissions; |
|
|
|
|
|
|
|
|
resolvedPermissions = (resolvedPermissions & ~deniedPermissions) | allowedPermissions; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//Give/Take User permissions |
|
|
//Give/Take User permissions |
|
|
perms = channel.GetPermissionOverwrite(user); |
|
|
perms = channel.GetPermissionOverwrite(user); |
|
|
if (perms != null) |
|
|
if (perms != null) |
|
|
resolvedPermissions = (resolvedPermissions | perms.Value.AllowValue) & ~perms.Value.DenyValue; |
|
|
|
|
|
|
|
|
resolvedPermissions = (resolvedPermissions & ~perms.Value.DenyValue) | perms.Value.AllowValue; |
|
|
|
|
|
|
|
|
//TODO: C#7 Typeswitch candidate |
|
|
//TODO: C#7 Typeswitch candidate |
|
|
var textChannel = channel as ITextChannel; |
|
|
var textChannel = channel as ITextChannel; |
|
|
var voiceChannel = channel as IVoiceChannel; |
|
|
|
|
|
if (textChannel != null && !GetValue(resolvedPermissions, ChannelPermission.ReadMessages)) |
|
|
|
|
|
resolvedPermissions = 0; //No read permission on a text channel removes all other permissions |
|
|
|
|
|
else if (voiceChannel != null && !GetValue(resolvedPermissions, ChannelPermission.Connect)) |
|
|
|
|
|
resolvedPermissions = 0; //No connect permission on a voice channel removes all other permissions |
|
|
|
|
|
|
|
|
if (textChannel != null) |
|
|
|
|
|
{ |
|
|
|
|
|
if (!GetValue(resolvedPermissions, ChannelPermission.ReadMessages)) |
|
|
|
|
|
{ |
|
|
|
|
|
//No read permission on a text channel removes all other permissions |
|
|
|
|
|
resolvedPermissions = 0; |
|
|
|
|
|
} |
|
|
|
|
|
else if (!GetValue(resolvedPermissions, ChannelPermission.SendMessages)) |
|
|
|
|
|
{ |
|
|
|
|
|
//No send permissions on a text channel removes all send-related permissions |
|
|
|
|
|
resolvedPermissions &= ~(1UL << (int)ChannelPermission.SendTTSMessages); |
|
|
|
|
|
resolvedPermissions &= ~(1UL << (int)ChannelPermission.MentionEveryone); |
|
|
|
|
|
resolvedPermissions &= ~(1UL << (int)ChannelPermission.EmbedLinks); |
|
|
|
|
|
resolvedPermissions &= ~(1UL << (int)ChannelPermission.AttachFiles); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
resolvedPermissions &= mask; //Ensure we didnt get any permissions this channel doesnt support (from guildPerms, for example) |
|
|
resolvedPermissions &= mask; //Ensure we didnt get any permissions this channel doesnt support (from guildPerms, for example) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|