diff --git a/src/Discord.Net.Core/Entities/Channels/ITextChannel.cs b/src/Discord.Net.Core/Entities/Channels/ITextChannel.cs
index 70ba872fc..ae0fe674b 100644
--- a/src/Discord.Net.Core/Entities/Channels/ITextChannel.cs
+++ b/src/Discord.Net.Core/Entities/Channels/ITextChannel.cs
@@ -141,11 +141,13 @@ namespace Discord
///
///
/// The message which to start the thread from.
+ /// Whether non-moderators can add other non-moderators to a thread; only available when creating a private thread
+ /// The amount of seconds a user has to wait before sending another message (0-21600)
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous create operation. The task result contains a
///
Task CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread, ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay,
- IMessage message = null, RequestOptions options = null);
+ IMessage message = null, bool? invitable = null, int? slowmode = null, RequestOptions options = null);
}
}
diff --git a/src/Discord.Net.Rest/API/Rest/StartThreadParams.cs b/src/Discord.Net.Rest/API/Rest/StartThreadParams.cs
index 7810557eb..a13161cd4 100644
--- a/src/Discord.Net.Rest/API/Rest/StartThreadParams.cs
+++ b/src/Discord.Net.Rest/API/Rest/StartThreadParams.cs
@@ -11,6 +11,12 @@ namespace Discord.API.Rest
public ThreadArchiveDuration Duration { get; set; }
[JsonProperty("type")]
- public Optional Type { get; set; }
+ public ThreadType Type { get; set; }
+
+ [JsonProperty("invitable")]
+ public Optional Invitable { get; set; }
+
+ [JsonProperty("rate_limit_per_user")]
+ public Optional Ratelimit { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
index 38c64ea56..f14bc2ecf 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
@@ -268,9 +268,9 @@ namespace Discord.Rest
/// A task that represents the asynchronous create operation. The task result contains a
///
public async Task CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread,
- ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, RequestOptions options = null)
+ ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, bool? invitable = null, int? slowmode = null, RequestOptions options = null)
{
- var model = await ThreadHelper.CreateThreadAsync(Discord, this, name, type, autoArchiveDuration, message, options);
+ var model = await ThreadHelper.CreateThreadAsync(Discord, this, name, type, autoArchiveDuration, message, invitable, slowmode, options);
return RestThreadChannel.Create(Discord, Guild, model);
}
#endregion
@@ -286,8 +286,8 @@ namespace Discord.Rest
async Task> ITextChannel.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options).ConfigureAwait(false);
- async Task ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, RequestOptions options)
- => await CreateThreadAsync(name, type, autoArchiveDuration, message, options);
+ async Task ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, bool? invitable, int? slowmode, RequestOptions options)
+ => await CreateThreadAsync(name, type, autoArchiveDuration, message, invitable, slowmode, options);
#endregion
#region IMessageChannel
@@ -387,7 +387,7 @@ namespace Discord.Rest
}
#endregion
- #region ITextChannel
+ #region INestedChannel
///
async Task INestedChannel.GetCategoryAsync(CacheMode mode, RequestOptions options)
{
diff --git a/src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs
index 8537e887c..917410f98 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs
@@ -9,7 +9,7 @@ namespace Discord.Rest
internal static class ThreadHelper
{
public static async Task CreateThreadAsync(BaseDiscordClient client, ITextChannel channel, string name, ThreadType type = ThreadType.PublicThread,
- ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, RequestOptions options = null)
+ ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, bool? invitable = null, int? slowmode = null, RequestOptions options = null)
{
var features = channel.Guild.Features;
if (autoArchiveDuration == ThreadArchiveDuration.OneWeek && !features.HasFeature(GuildFeature.SevenDayThreadArchive))
@@ -25,7 +25,9 @@ namespace Discord.Rest
{
Name = name,
Duration = autoArchiveDuration,
- Type = type
+ Type = type,
+ Invitable = invitable.HasValue ? invitable.Value : Optional.Unspecified,
+ Ratelimit = slowmode.HasValue ? slowmode.Value : Optional.Unspecified,
};
Model model;
diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
index a91271eb8..8722b569d 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
@@ -113,9 +113,9 @@ namespace Discord.WebSocket
/// A task that represents the asynchronous create operation. The task result contains a
///
public async Task CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread,
- ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, RequestOptions options = null)
+ ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, IMessage message = null, bool? invitable = null, int? slowmode = null, RequestOptions options = null)
{
- var model = await ThreadHelper.CreateThreadAsync(Discord, this, name, type, autoArchiveDuration, message, options);
+ var model = await ThreadHelper.CreateThreadAsync(Discord, this, name, type, autoArchiveDuration, message, invitable, slowmode, options);
var thread = (SocketThreadChannel)Guild.AddOrUpdateChannel(Discord.State, model);
@@ -345,8 +345,8 @@ namespace Discord.WebSocket
async Task> ITextChannel.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options).ConfigureAwait(false);
///
- async Task ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, RequestOptions options)
- => await CreateThreadAsync(name, type, autoArchiveDuration, message, options);
+ async Task ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, bool? invitable, int? slowmode, RequestOptions options)
+ => await CreateThreadAsync(name, type, autoArchiveDuration, message, invitable, slowmode, options);
#endregion
#region IGuildChannel