Browse Source

Cleaned up channel permissions, added GetChannelPermissions.

tags/docs-0.9
RogueException 9 years ago
parent
commit
a5e2e9ca10
5 changed files with 42 additions and 20 deletions
  1. +1
    -6
      src/Discord.Net.Commands/CommandBuilder.cs
  2. +23
    -0
      src/Discord.Net/DiscordClient.Permissions.cs
  3. +3
    -6
      src/Discord.Net/Models/Channel.cs
  4. +7
    -0
      src/Discord.Net/Models/Permissions.cs
  5. +8
    -8
      src/Discord.Net/Models/User.cs

+ 1
- 6
src/Discord.Net.Commands/CommandBuilder.cs View File

@@ -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


+ 23
- 0
src/Discord.Net/DiscordClient.Permissions.cs View File

@@ -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));


+ 3
- 6
src/Discord.Net/Models/Channel.cs View File

@@ -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();
}
}


+ 7
- 0
src/Discord.Net/Models/Permissions.cs View File

@@ -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);


+ 8
- 8
src/Discord.Net/Models/User.cs View File

@@ -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;


Loading…
Cancel
Save