@@ -8,20 +8,39 @@ namespace Discord
public partial class DiscordClient
{
public Task SetChannelUserPermissions(Channel channel, Member member, ChannelPermissions allow = null, ChannelPermissions deny = null)
=> SetChannelPermissions(channel, member?.Id, PermissionTarget.Member, allow, deny);
{
if (channel == null) throw new ArgumentNullException(nameof(channel));
if (member == null) throw new ArgumentNullException(nameof(member));
CheckReady();
return SetChannelPermissions(channel, member?.Id, PermissionTarget.Member, allow, deny);
}
public Task SetChannelUserPermissions(Channel channel, Member member, DualChannelPermissions permissions = null)
=> SetChannelPermissions(channel, member?.Id, PermissionTarget.Member, permissions?.Allow, permissions?.Deny);
{
if (channel == null) throw new ArgumentNullException(nameof(channel));
if (member == null) throw new ArgumentNullException(nameof(member));
CheckReady();
return SetChannelPermissions(channel, member?.Id, PermissionTarget.Member, permissions?.Allow, permissions?.Deny);
}
public Task SetChannelRolePermissions(Channel channel, Role role, ChannelPermissions allow = null, ChannelPermissions deny = null)
=> SetChannelPermissions(channel, role?.Id, PermissionTarget.Role, allow, deny);
public Task SetChannelRolePermissions(Channel channel, Role role, DualChannelPermissions permissions = null)
=> SetChannelPermissions(channel, role?.Id, PermissionTarget.Role, permissions?.Allow, permissions?.Deny);
private async Task SetChannelPermissions(Channel channel, string targetId, string targetType, ChannelPermissions allow = null, ChannelPermissions deny = null)
{
if (channel == null) throw new ArgumentNullException(nameof(channel));
if (role == null) throw new ArgumentNullException(nameof(role));
CheckReady();
return SetChannelPermissions(channel, role?.Id, PermissionTarget.Role, allow, deny);
}
public Task SetChannelRolePermissions(Channel channel, Role role, DualChannelPermissions permissions = null)
{
if (channel == null) throw new ArgumentNullException(nameof(channel));
if (targetId == null) throw new ArgumentNullException(nameof(targetId));
if (targetType == null) throw new ArgumentNullException(nameof(targetType));
if (role == null) throw new ArgumentNullException(nameof(role ));
CheckReady( );
return SetChannelPermissions(channel, role?.Id, PermissionTarget.Role, permissions?.Allow, permissions?.Deny);
}
private async Task SetChannelPermissions(Channel channel, string targetId, PermissionTarget targetType, ChannelPermissions allow = null, ChannelPermissions deny = null)
{
uint allowValue = allow?.RawValue ?? 0;
uint denyValue = deny?.RawValue ?? 0;
bool changed = false;
@@ -29,7 +48,7 @@ namespace Discord
var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).FirstOrDefault();
if (allowValue != 0 || denyValue != 0)
{
await _api.SetChannelPermissions(channel.Id, targetId, targetType, allowValue, denyValue);
await _api.SetChannelPermissions(channel.Id, targetId, targetType.Value , allowValue, denyValue);
if (perms != null)
{
perms.Allow.SetRawValueInternal(allowValue);
@@ -84,19 +103,19 @@ namespace Discord
return RemoveChannelPermissions(channel, role?.Id, PermissionTarget.Role);
}
private async Task RemoveChannelPermissions(Channel channel, string userOrRoleId, string id Type)
private async Task RemoveChannelPermissions(Channel channel, string userOrRoleId, PermissionTarget target Type)
{
try
{
var perms = channel.PermissionOverwrites.Where(x => x.TargetType != id Type || x.TargetId != userOrRoleId).FirstOrDefault();
var perms = channel.PermissionOverwrites.Where(x => x.TargetType != target Type || x.TargetId != userOrRoleId).FirstOrDefault();
await _api.DeleteChannelPermissions(channel.Id, userOrRoleId).ConfigureAwait(false);
if (perms != null)
{
channel.PermissionOverwrites.Where(x => x.TargetType != id Type || x.TargetId != userOrRoleId).ToArray();
channel.PermissionOverwrites.Where(x => x.TargetType != target Type || x.TargetId != userOrRoleId).ToArray();
if (id Type == PermissionTarget.Role)
if (target Type == PermissionTarget.Role)
channel.InvalidatePermissionsCache();
else if (id Type == PermissionTarget.Member)
else if (target Type == PermissionTarget.Member)
channel.InvalidatePermissionsCache(userOrRoleId);
}
}