Fixed several permission issues
This commit is contained in:
@@ -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)
|
||||||
if (textChannel != null && !GetValue(resolvedPermissions, ChannelPermission.ReadMessages))
|
{
|
||||||
resolvedPermissions = 0; //No read permission on a text channel removes all other permissions
|
if (!GetValue(resolvedPermissions, ChannelPermission.ReadMessages))
|
||||||
else if (voiceChannel != null && !GetValue(resolvedPermissions, ChannelPermission.Connect))
|
{
|
||||||
resolvedPermissions = 0; //No connect permission on a voice channel removes all other permissions
|
//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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user