From 8c3290967c09cb954024cfda48ede28360bb37ff Mon Sep 17 00:00:00 2001
From: Hsu Still <341464@gmail.com>
Date: Wed, 4 Apr 2018 12:26:57 +0800
Subject: [PATCH 1/4] Initial implementation
---
.../Entities/Channels/GuildChannelProperties.cs | 6 +++++-
src/Discord.Net.Rest/API/Common/Overwrite.cs | 10 +++++++++-
.../API/Rest/ModifyGuildChannelParams.cs | 2 ++
.../Entities/Channels/ChannelHelper.cs | 12 ++++++++++--
.../Entities/Channels/RestGuildChannel.cs | 5 +++--
.../Entities/Channels/SocketGuildChannel.cs | 4 ++--
6 files changed, 31 insertions(+), 8 deletions(-)
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);
From 00f2a08bcbcc6218c780bc99ed85f94e1e874214 Mon Sep 17 00:00:00 2001
From: Hsu Still <341464@gmail.com>
Date: Wed, 4 Apr 2018 12:38:34 +0800
Subject: [PATCH 2/4] Remove unnecessary call for REST if user didn't specify
the bool
---
.../Entities/Channels/ChannelHelper.cs | 17 +++++++++--------
.../Entities/Channels/RestGuildChannel.cs | 3 +--
.../Entities/Channels/SocketGuildChannel.cs | 2 +-
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
index f23577ea8..f32a44f8a 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
@@ -22,7 +22,6 @@ namespace Discord.Rest
public static async Task ModifyAsync(IGuildChannel channel, BaseDiscordClient client,
Action func,
- IEnumerable overwrites,
RequestOptions options)
{
var args = new GuildChannelProperties();
@@ -31,14 +30,16 @@ namespace Discord.Rest
{
Name = args.Name,
Position = args.Position,
- 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
+ CategoryId = args.CategoryId
};
+ if (args.SyncWithParent.IsSpecified && args.SyncWithParent.Value)
+ {
+ var categoryChannel = await channel.GetCategoryAsync().ConfigureAwait(false);
+ 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);
}
public static async Task ModifyAsync(ITextChannel channel, BaseDiscordClient client,
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
index 609153ea8..3dcb96354 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
@@ -58,8 +58,7 @@ namespace Discord.Rest
}
public async Task ModifyAsync(Action func, RequestOptions options = null)
{
- var categoryChannel = await GetCategoryAsync().ConfigureAwait(false);
- var model = await ChannelHelper.ModifyAsync(this, Discord, func, categoryChannel.PermissionOverwrites, options).ConfigureAwait(false);
+ var model = await ChannelHelper.ModifyAsync(this, Discord, func, 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 48c691e7f..793248f88 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
@@ -58,7 +58,7 @@ namespace Discord.WebSocket
}
public Task ModifyAsync(Action func, RequestOptions options = null)
- => ChannelHelper.ModifyAsync(this, Discord, func, Category.PermissionOverwrites, options);
+ => ChannelHelper.ModifyAsync(this, Discord, func, options);
public Task DeleteAsync(RequestOptions options = null)
=> ChannelHelper.DeleteAsync(this, Discord, options);
From 023c33070479276510e9edd87c0a4cc62decf7bf Mon Sep 17 00:00:00 2001
From: Hsu Still <341464@gmail.com>
Date: Wed, 4 Apr 2018 12:45:15 +0800
Subject: [PATCH 3/4] Fix NRE when a parent isn't found
---
.../Entities/Channels/ChannelHelper.cs | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
index f32a44f8a..5e6886f3f 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
@@ -35,11 +35,13 @@ namespace Discord.Rest
if (args.SyncWithParent.IsSpecified && args.SyncWithParent.Value)
{
var categoryChannel = await channel.GetCategoryAsync().ConfigureAwait(false);
- apiArgs.Overwrites = categoryChannel.PermissionOverwrites
- .Select(overwrite => new API.Overwrite(overwrite.TargetId, overwrite.TargetType,
- overwrite.Permissions.AllowValue, overwrite.Permissions.DenyValue))
- .ToArray();
+ 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);
}
public static async Task ModifyAsync(ITextChannel channel, BaseDiscordClient client,
From 0fb4e1c71e2817fd7361a50136235ef2fb2d999f Mon Sep 17 00:00:00 2001
From: Hsu Still <341464@gmail.com>
Date: Wed, 4 Apr 2018 12:52:21 +0800
Subject: [PATCH 4/4] Rename to SyncWithCategory
---
.../Entities/Channels/GuildChannelProperties.cs | 2 +-
src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
index ebc778980..1e789297b 100644
--- a/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
+++ b/src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs
@@ -33,6 +33,6 @@ namespace Discord
///
/// Syncs the permission with the channel's parent (category).
///
- public Optional SyncWithParent { get; set; }
+ public Optional SyncWithCategory { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
index 5e6886f3f..c22a3b77b 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
@@ -26,13 +26,13 @@ namespace Discord.Rest
{
var args = new GuildChannelProperties();
func(args);
- var apiArgs = new ModifyGuildChannelParams
+ var apiArgs = new API.Rest.ModifyGuildChannelParams
{
Name = args.Name,
Position = args.Position,
CategoryId = args.CategoryId
};
- if (args.SyncWithParent.IsSpecified && args.SyncWithParent.Value)
+ if (args.SyncWithCategory.IsSpecified && args.SyncWithCategory.Value)
{
var categoryChannel = await channel.GetCategoryAsync().ConfigureAwait(false);
if (categoryChannel != null)