@@ -1,4 +1,4 @@ | |||||
namespace Discord | |||||
namespace Discord | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// Modify an IGuildChannel with the specified changes. | /// Modify an IGuildChannel with the specified changes. | ||||
@@ -30,5 +30,9 @@ | |||||
/// Sets the category for this channel | /// Sets the category for this channel | ||||
/// </summary> | /// </summary> | ||||
public Optional<ulong?> CategoryId { get; set; } | public Optional<ulong?> CategoryId { get; set; } | ||||
/// <summary> | |||||
/// Syncs the permission with the channel's parent (category). | |||||
/// </summary> | |||||
public Optional<bool> SyncWithCategory { get; set; } | |||||
} | } | ||||
} | } |
@@ -1,4 +1,4 @@ | |||||
#pragma warning disable CS1591 | |||||
#pragma warning disable CS1591 | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
namespace Discord.API | namespace Discord.API | ||||
@@ -13,5 +13,13 @@ namespace Discord.API | |||||
public ulong Deny { get; set; } | public ulong Deny { get; set; } | ||||
[JsonProperty("allow"), Int53] | [JsonProperty("allow"), Int53] | ||||
public ulong Allow { get; set; } | public ulong Allow { get; set; } | ||||
public Overwrite(ulong targetId, PermissionTarget targetType, ulong allowValue, ulong denyValue) | |||||
{ | |||||
TargetId = targetId; | |||||
TargetType = targetType; | |||||
Allow = allowValue; | |||||
Deny = denyValue; | |||||
} | |||||
} | } | ||||
} | } |
@@ -12,5 +12,7 @@ namespace Discord.API.Rest | |||||
public Optional<int> Position { get; set; } | public Optional<int> Position { get; set; } | ||||
[JsonProperty("parent_id")] | [JsonProperty("parent_id")] | ||||
public Optional<ulong?> CategoryId { get; set; } | public Optional<ulong?> CategoryId { get; set; } | ||||
[JsonProperty("permission_overwrites")] | |||||
public Optional<Overwrite[]> Overwrites { get; set; } | |||||
} | } | ||||
} | } |
@@ -19,6 +19,7 @@ namespace Discord.Rest | |||||
{ | { | ||||
await client.ApiClient.DeleteChannelAsync(channel.Id, options).ConfigureAwait(false); | await client.ApiClient.DeleteChannelAsync(channel.Id, options).ConfigureAwait(false); | ||||
} | } | ||||
public static async Task<Model> ModifyAsync(IGuildChannel channel, BaseDiscordClient client, | public static async Task<Model> ModifyAsync(IGuildChannel channel, BaseDiscordClient client, | ||||
Action<GuildChannelProperties> func, | Action<GuildChannelProperties> func, | ||||
RequestOptions options) | RequestOptions options) | ||||
@@ -31,6 +32,16 @@ namespace Discord.Rest | |||||
Position = args.Position, | Position = args.Position, | ||||
CategoryId = args.CategoryId | CategoryId = args.CategoryId | ||||
}; | }; | ||||
if (args.SyncWithCategory.IsSpecified && args.SyncWithCategory.Value) | |||||
{ | |||||
var categoryChannel = await channel.GetCategoryAsync().ConfigureAwait(false); | |||||
if (categoryChannel != null) | |||||
apiArgs.Overwrites = categoryChannel.PermissionOverwrites | |||||
.Select(overwrite => new API.Overwrite(overwrite.TargetId, overwrite.TargetType, | |||||
overwrite.Permissions.AllowValue, overwrite.Permissions.DenyValue)) | |||||
.ToArray(); | |||||
} | |||||
return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | ||||
} | } | ||||
public static async Task<Model> ModifyAsync(ITextChannel channel, BaseDiscordClient client, | public static async Task<Model> ModifyAsync(ITextChannel channel, BaseDiscordClient client, | ||||
@@ -1,4 +1,4 @@ | |||||
using System; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
using System.Linq; | using System.Linq; | ||||
@@ -1,4 +1,4 @@ | |||||
using Discord.Rest; | |||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||