From a5e2e9ca1080af5299d568908b0c1bc4877f2ea9 Mon Sep 17 00:00:00 2001 From: RogueException Date: Mon, 9 Nov 2015 02:02:05 -0400 Subject: [PATCH] Cleaned up channel permissions, added GetChannelPermissions. --- src/Discord.Net.Commands/CommandBuilder.cs | 7 +----- src/Discord.Net/DiscordClient.Permissions.cs | 23 ++++++++++++++++++++ src/Discord.Net/Models/Channel.cs | 9 +++----- src/Discord.Net/Models/Permissions.cs | 7 ++++++ src/Discord.Net/Models/User.cs | 16 +++++++------- 5 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/Discord.Net.Commands/CommandBuilder.cs b/src/Discord.Net.Commands/CommandBuilder.cs index 6f11e3f26..4d8ebd603 100644 --- a/src/Discord.Net.Commands/CommandBuilder.cs +++ b/src/Discord.Net.Commands/CommandBuilder.cs @@ -102,12 +102,7 @@ namespace Discord.Commands return cmd; } else - { - if (prefix != "") - return prefix; - else - throw new ArgumentOutOfRangeException(nameof(cmd)); - } + return prefix; } } public sealed class CommandGroupBuilder diff --git a/src/Discord.Net/DiscordClient.Permissions.cs b/src/Discord.Net/DiscordClient.Permissions.cs index e98235e32..5526bbac9 100644 --- a/src/Discord.Net/DiscordClient.Permissions.cs +++ b/src/Discord.Net/DiscordClient.Permissions.cs @@ -7,6 +7,29 @@ namespace Discord { public partial class DiscordClient { + public DualChannelPermissions GetChannelPermissions(Channel channel, User user) + { + if (channel == null) throw new ArgumentNullException(nameof(channel)); + if (user == null) throw new ArgumentNullException(nameof(user)); + CheckReady(); + + return channel.PermissionOverwrites + .Where(x => x.TargetType == PermissionTarget.User && x.TargetId == user.Id) + .Select(x => x.Permissions) + .FirstOrDefault(); + } + public DualChannelPermissions GetChannelPermissions(Channel channel, Role role) + { + if (channel == null) throw new ArgumentNullException(nameof(channel)); + if (role == null) throw new ArgumentNullException(nameof(role)); + CheckReady(); + + return channel.PermissionOverwrites + .Where(x => x.TargetType == PermissionTarget.User && x.TargetId == role.Id) + .Select(x => x.Permissions) + .FirstOrDefault(); + } + public Task SetChannelPermissions(Channel channel, User user, ChannelPermissions allow = null, ChannelPermissions deny = null) { if (channel == null) throw new ArgumentNullException(nameof(channel)); diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index ce4df6e80..b86538489 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -12,17 +12,14 @@ namespace Discord { public PermissionTarget TargetType { get; } public string TargetId { get; } - public ChannelPermissions Allow { get; } - public ChannelPermissions Deny { get; } + public DualChannelPermissions Permissions { get; } internal PermissionOverwrite(PermissionTarget targetType, string targetId, uint allow, uint deny) { TargetType = targetType; TargetId = targetId; - Allow = new ChannelPermissions(allow); - Allow.Lock(); - Deny = new ChannelPermissions(deny); - Deny.Lock(); + Permissions = new DualChannelPermissions(allow, deny); + Permissions.Lock(); } } diff --git a/src/Discord.Net/Models/Permissions.cs b/src/Discord.Net/Models/Permissions.cs index 492699b17..5a193134f 100644 --- a/src/Discord.Net/Models/Permissions.cs +++ b/src/Discord.Net/Models/Permissions.cs @@ -218,6 +218,13 @@ namespace Discord } } + internal void Lock() + { + Allow.Lock(); + Deny.Lock(); + } + public DualChannelPermissions Copy() => new DualChannelPermissions(Allow.RawValue, Deny.RawValue); + public override bool Equals(object obj) => obj is DualChannelPermissions && (obj as DualChannelPermissions).Allow.Equals(Allow) && (obj as DualChannelPermissions).Deny.Equals(Deny); diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index 441f65381..5f02431af 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -309,14 +309,14 @@ namespace Discord //var roles = Roles.OrderBy(x => x.Id); var roles = Roles; - foreach (var denyRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Deny.RawValue != 0 && roles.Any(y => y.Id == x.TargetId))) - newPermissions &= ~denyRole.Deny.RawValue; - foreach (var allowRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Allow.RawValue != 0 && roles.Any(y => y.Id == x.TargetId))) - newPermissions |= allowRole.Allow.RawValue; - foreach (var denyUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Deny.RawValue != 0)) - newPermissions &= ~denyUser.Deny.RawValue; - foreach (var allowUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Allow.RawValue != 0)) - newPermissions |= allowUser.Allow.RawValue; + foreach (var denyRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Permissions.Deny.RawValue != 0 && roles.Any(y => y.Id == x.TargetId))) + newPermissions &= ~denyRole.Permissions.Deny.RawValue; + foreach (var allowRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Permissions.Allow.RawValue != 0 && roles.Any(y => y.Id == x.TargetId))) + newPermissions |= allowRole.Permissions.Allow.RawValue; + foreach (var denyUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Permissions.Deny.RawValue != 0)) + newPermissions &= ~denyUser.Permissions.Deny.RawValue; + foreach (var allowUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Permissions.Allow.RawValue != 0)) + newPermissions |= allowUser.Permissions.Allow.RawValue; } var mask = ChannelPermissions.All(channel).RawValue;