Cleaned up channel permissions, added GetChannelPermissions.
This commit is contained in:
@@ -102,12 +102,7 @@ namespace Discord.Commands
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
return prefix;
|
||||||
if (prefix != "")
|
|
||||||
return prefix;
|
|
||||||
else
|
|
||||||
throw new ArgumentOutOfRangeException(nameof(cmd));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public sealed class CommandGroupBuilder
|
public sealed class CommandGroupBuilder
|
||||||
|
|||||||
@@ -7,6 +7,29 @@ namespace Discord
|
|||||||
{
|
{
|
||||||
public partial class DiscordClient
|
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)
|
public Task SetChannelPermissions(Channel channel, User user, ChannelPermissions allow = null, ChannelPermissions deny = null)
|
||||||
{
|
{
|
||||||
if (channel == null) throw new ArgumentNullException(nameof(channel));
|
if (channel == null) throw new ArgumentNullException(nameof(channel));
|
||||||
|
|||||||
@@ -12,17 +12,14 @@ namespace Discord
|
|||||||
{
|
{
|
||||||
public PermissionTarget TargetType { get; }
|
public PermissionTarget TargetType { get; }
|
||||||
public string TargetId { get; }
|
public string TargetId { get; }
|
||||||
public ChannelPermissions Allow { get; }
|
public DualChannelPermissions Permissions { get; }
|
||||||
public ChannelPermissions Deny { get; }
|
|
||||||
|
|
||||||
internal PermissionOverwrite(PermissionTarget targetType, string targetId, uint allow, uint deny)
|
internal PermissionOverwrite(PermissionTarget targetType, string targetId, uint allow, uint deny)
|
||||||
{
|
{
|
||||||
TargetType = targetType;
|
TargetType = targetType;
|
||||||
TargetId = targetId;
|
TargetId = targetId;
|
||||||
Allow = new ChannelPermissions(allow);
|
Permissions = new DualChannelPermissions(allow, deny);
|
||||||
Allow.Lock();
|
Permissions.Lock();
|
||||||
Deny = new ChannelPermissions(deny);
|
|
||||||
Deny.Lock();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 &&
|
public override bool Equals(object obj) => obj is DualChannelPermissions &&
|
||||||
(obj as DualChannelPermissions).Allow.Equals(Allow) &&
|
(obj as DualChannelPermissions).Allow.Equals(Allow) &&
|
||||||
(obj as DualChannelPermissions).Deny.Equals(Deny);
|
(obj as DualChannelPermissions).Deny.Equals(Deny);
|
||||||
|
|||||||
@@ -309,14 +309,14 @@ namespace Discord
|
|||||||
|
|
||||||
//var roles = Roles.OrderBy(x => x.Id);
|
//var roles = Roles.OrderBy(x => x.Id);
|
||||||
var roles = Roles;
|
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)))
|
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.Deny.RawValue;
|
newPermissions &= ~denyRole.Permissions.Deny.RawValue;
|
||||||
foreach (var allowRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Allow.RawValue != 0 && roles.Any(y => y.Id == x.TargetId)))
|
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.Allow.RawValue;
|
newPermissions |= allowRole.Permissions.Allow.RawValue;
|
||||||
foreach (var denyUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Deny.RawValue != 0))
|
foreach (var denyUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Permissions.Deny.RawValue != 0))
|
||||||
newPermissions &= ~denyUser.Deny.RawValue;
|
newPermissions &= ~denyUser.Permissions.Deny.RawValue;
|
||||||
foreach (var allowUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Allow.RawValue != 0))
|
foreach (var allowUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Permissions.Allow.RawValue != 0))
|
||||||
newPermissions |= allowUser.Allow.RawValue;
|
newPermissions |= allowUser.Permissions.Allow.RawValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var mask = ChannelPermissions.All(channel).RawValue;
|
var mask = ChannelPermissions.All(channel).RawValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user