diff --git a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
index 2ac6c8d52..ebc778980 100644
--- a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
+++ b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
@@ -1,4 +1,4 @@
-namespace Discord
+namespace Discord
{
///
/// Modify an IGuildChannel with the specified changes.
@@ -30,5 +30,9 @@
/// Sets the category for this channel
///
public Optional CategoryId { get; set; }
+ ///
+ /// Syncs the permission with the channel's parent (category).
+ ///
+ public Optional SyncWithParent { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/API/Common/Overwrite.cs b/src/Discord.Net.Rest/API/Common/Overwrite.cs
index 1ba836127..bf5e85fef 100644
--- a/src/Discord.Net.Rest/API/Common/Overwrite.cs
+++ b/src/Discord.Net.Rest/API/Common/Overwrite.cs
@@ -1,4 +1,4 @@
-#pragma warning disable CS1591
+#pragma warning disable CS1591
using Newtonsoft.Json;
namespace Discord.API
@@ -13,5 +13,13 @@ namespace Discord.API
public ulong Deny { get; set; }
[JsonProperty("allow"), Int53]
public ulong Allow { get; set; }
+
+ public Overwrite(ulong targetId, PermissionTarget targetType, ulong allowValue, ulong denyValue)
+ {
+ TargetId = targetId;
+ TargetType = targetType;
+ Allow = allowValue;
+ Deny = denyValue;
+ }
}
}
diff --git a/src/Discord.Net.Rest/API/Rest/ModifyGuildChannelParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyGuildChannelParams.cs
index 120eeb3a8..41ae52eb8 100644
--- a/src/Discord.Net.Rest/API/Rest/ModifyGuildChannelParams.cs
+++ b/src/Discord.Net.Rest/API/Rest/ModifyGuildChannelParams.cs
@@ -12,5 +12,7 @@ namespace Discord.API.Rest
public Optional Position { get; set; }
[JsonProperty("parent_id")]
public Optional CategoryId { get; set; }
+ [JsonProperty("permission_overwrites")]
+ public Optional Overwrites { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
index 6784f7f6a..f23577ea8 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
@@ -19,17 +19,25 @@ namespace Discord.Rest
{
await client.ApiClient.DeleteChannelAsync(channel.Id, options).ConfigureAwait(false);
}
+
public static async Task ModifyAsync(IGuildChannel channel, BaseDiscordClient client,
Action func,
+ IEnumerable overwrites,
RequestOptions options)
{
var args = new GuildChannelProperties();
func(args);
- var apiArgs = new API.Rest.ModifyGuildChannelParams
+ var apiArgs = new ModifyGuildChannelParams
{
Name = args.Name,
Position = args.Position,
- CategoryId = args.CategoryId
+ CategoryId = args.CategoryId,
+ Overwrites = args.SyncWithParent.Value
+ ? overwrites
+ .Select(overwrite => new API.Overwrite(overwrite.TargetId, overwrite.TargetType,
+ overwrite.Permissions.AllowValue, overwrite.Permissions.DenyValue))
+ .ToArray()
+ : null
};
return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false);
}
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
index 026d03cc8..609153ea8 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
@@ -58,7 +58,8 @@ namespace Discord.Rest
}
public async Task ModifyAsync(Action func, RequestOptions options = null)
{
- var model = await ChannelHelper.ModifyAsync(this, Discord, func, options).ConfigureAwait(false);
+ var categoryChannel = await GetCategoryAsync().ConfigureAwait(false);
+ var model = await ChannelHelper.ModifyAsync(this, Discord, func, categoryChannel.PermissionOverwrites, options).ConfigureAwait(false);
Update(model);
}
public Task DeleteAsync(RequestOptions options = null)
diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
index 2163daf55..48c691e7f 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
@@ -1,4 +1,4 @@
-using Discord.Rest;
+using Discord.Rest;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -58,7 +58,7 @@ namespace Discord.WebSocket
}
public Task ModifyAsync(Action func, RequestOptions options = null)
- => ChannelHelper.ModifyAsync(this, Discord, func, options);
+ => ChannelHelper.ModifyAsync(this, Discord, func, Category.PermissionOverwrites, options);
public Task DeleteAsync(RequestOptions options = null)
=> ChannelHelper.DeleteAsync(this, Discord, options);