Browse Source

Simplify permission overwrite

pull/1595/head
Paulo 5 years ago
parent
commit
60b76b1015
2 changed files with 29 additions and 69 deletions
  1. +2
    -12
      src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
  2. +27
    -57
      src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs

+ 2
- 12
src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs View File

@@ -33,18 +33,8 @@ namespace Discord
/// </remarks>
public Optional<ulong?> CategoryId { get; set; }
/// <summary>
/// Gets or sets the user permission overwrites for this channel.
/// Gets or sets the permission overwrites for this channel.
/// </summary>
/// <remarks>
/// The <see cref="ulong"/> key needs to be a user snowflake identifier.
/// </remarks>
public Optional<IEnumerable<KeyValuePair<ulong, OverwritePermissions>>> UserOverwrites { get; set; }
/// <summary>
/// Gets or sets the role permission overwrites for this channel.
/// </summary>
/// <remarks>
/// The <see cref="ulong"/> key needs to be a role snowflake identifier.
/// </remarks>
public Optional<IEnumerable<KeyValuePair<ulong, OverwritePermissions>>> RoleOverwrites { get; set; }
public Optional<IEnumerable<Overwrite>> PermissionOverwrites { get; set; }
}
}

+ 27
- 57
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs View File

@@ -171,24 +171,6 @@ namespace Discord.Rest
var props = new TextChannelProperties();
func?.Invoke(props);

var overwrites = new List<API.Overwrite>();
if (props.UserOverwrites.IsSpecified)
overwrites.AddRange(props.UserOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.User,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));
if (props.RoleOverwrites.IsSpecified)
overwrites.AddRange(props.RoleOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.Role,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));

var args = new CreateGuildChannelParams(name, ChannelType.Text)
{
CategoryId = props.CategoryId,
@@ -196,7 +178,15 @@ namespace Discord.Rest
IsNsfw = props.IsNsfw,
Position = props.Position,
SlowModeInterval = props.SlowModeInterval,
Overwrites = overwrites.Count != 0 ? Optional.Create(overwrites.ToArray()) : Optional.Create<API.Overwrite[]>(),
Overwrites = props.PermissionOverwrites.IsSpecified
? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite
{
TargetId = overwrite.TargetId,
TargetType = overwrite.TargetType,
Allow = overwrite.Permissions.AllowValue,
Deny = overwrite.Permissions.DenyValue
}).ToArray()
: Optional.Create<API.Overwrite[]>(),
};
var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false);
return RestTextChannel.Create(client, guild, model);
@@ -210,31 +200,21 @@ namespace Discord.Rest
var props = new VoiceChannelProperties();
func?.Invoke(props);

var overwrites = new List<API.Overwrite>();
if (props.UserOverwrites.IsSpecified)
overwrites.AddRange(props.UserOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.User,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));
if (props.RoleOverwrites.IsSpecified)
overwrites.AddRange(props.RoleOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.Role,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));

var args = new CreateGuildChannelParams(name, ChannelType.Voice)
{
CategoryId = props.CategoryId,
Bitrate = props.Bitrate,
UserLimit = props.UserLimit,
Position = props.Position,
Overwrites = overwrites.Count != 0 ? Optional.Create(overwrites.ToArray()) : Optional.Create<API.Overwrite[]>(),
Overwrites = props.PermissionOverwrites.IsSpecified
? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite
{
TargetId = overwrite.TargetId,
TargetType = overwrite.TargetType,
Allow = overwrite.Permissions.AllowValue,
Deny = overwrite.Permissions.DenyValue
}).ToArray()
: Optional.Create<API.Overwrite[]>(),
};
var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false);
return RestVoiceChannel.Create(client, guild, model);
@@ -248,28 +228,18 @@ namespace Discord.Rest
var props = new GuildChannelProperties();
func?.Invoke(props);

var overwrites = new List<API.Overwrite>();
if (props.UserOverwrites.IsSpecified)
overwrites.AddRange(props.UserOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.User,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));
if (props.RoleOverwrites.IsSpecified)
overwrites.AddRange(props.RoleOverwrites.Value.Select(x => new API.Overwrite()
{
TargetId = x.Key,
TargetType = PermissionTarget.Role,
Allow = x.Value.AllowValue,
Deny = x.Value.DenyValue,
}));

var args = new CreateGuildChannelParams(name, ChannelType.Category)
{
Position = props.Position,
Overwrites = overwrites.Count != 0 ? Optional.Create(overwrites.ToArray()) : Optional.Create<API.Overwrite[]>(),
Overwrites = props.PermissionOverwrites.IsSpecified
? props.PermissionOverwrites.Value.Select(overwrite => new API.Overwrite
{
TargetId = overwrite.TargetId,
TargetType = overwrite.TargetType,
Allow = overwrite.Permissions.AllowValue,
Deny = overwrite.Permissions.DenyValue
}).ToArray()
: Optional.Create<API.Overwrite[]>(),
};

var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false);


Loading…
Cancel
Save