Browse Source

Add new thread creation properties

pull/1923/head
quin lynch 3 years ago
parent
commit
f6296330fe
5 changed files with 23 additions and 13 deletions
  1. +3
    -1
      src/Discord.Net.Core/Entities/Channels/ITextChannel.cs
  2. +7
    -1
      src/Discord.Net.Rest/API/Rest/StartThreadParams.cs
  3. +5
    -5
      src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
  4. +4
    -2
      src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs
  5. +4
    -4
      src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs

+ 3
- 1
src/Discord.Net.Core/Entities/Channels/ITextChannel.cs View File

@@ -141,11 +141,13 @@ namespace Discord
/// </para> /// </para>
/// </param> /// </param>
/// <param name="message">The message which to start the thread from.</param> /// <param name="message">The message which to start the thread from.</param>
/// <param name="invitable">Whether non-moderators can add other non-moderators to a thread; only available when creating a private thread</param>
/// <param name="slowmode">The amount of seconds a user has to wait before sending another message (0-21600)</param>
/// <param name="options">The options to be used when sending the request.</param> /// <param name="options">The options to be used when sending the request.</param>
/// <returns> /// <returns>
/// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/> /// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/>
/// </returns> /// </returns>
Task<IThreadChannel> CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread, ThreadArchiveDuration autoArchiveDuration = ThreadArchiveDuration.OneDay, Task<IThreadChannel> 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);
} }
} }

+ 7
- 1
src/Discord.Net.Rest/API/Rest/StartThreadParams.cs View File

@@ -11,6 +11,12 @@ namespace Discord.API.Rest
public ThreadArchiveDuration Duration { get; set; } public ThreadArchiveDuration Duration { get; set; }


[JsonProperty("type")] [JsonProperty("type")]
public Optional<ThreadType> Type { get; set; }
public ThreadType Type { get; set; }

[JsonProperty("invitable")]
public Optional<bool> Invitable { get; set; }

[JsonProperty("rate_limit_per_user")]
public Optional<int?> Ratelimit { get; set; }
} }
} }

+ 5
- 5
src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs View File

@@ -268,9 +268,9 @@ namespace Discord.Rest
/// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/> /// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/>
/// </returns> /// </returns>
public async Task<RestThreadChannel> CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread, public async Task<RestThreadChannel> 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); return RestThreadChannel.Create(Discord, Guild, model);
} }
#endregion #endregion
@@ -286,8 +286,8 @@ namespace Discord.Rest
async Task<IReadOnlyCollection<IWebhook>> ITextChannel.GetWebhooksAsync(RequestOptions options) async Task<IReadOnlyCollection<IWebhook>> ITextChannel.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options).ConfigureAwait(false); => await GetWebhooksAsync(options).ConfigureAwait(false);


async Task<IThreadChannel> ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, RequestOptions options)
=> await CreateThreadAsync(name, type, autoArchiveDuration, message, options);
async Task<IThreadChannel> 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 #endregion


#region IMessageChannel #region IMessageChannel
@@ -387,7 +387,7 @@ namespace Discord.Rest
} }
#endregion #endregion


#region ITextChannel
#region INestedChannel
/// <inheritdoc /> /// <inheritdoc />
async Task<ICategoryChannel> INestedChannel.GetCategoryAsync(CacheMode mode, RequestOptions options) async Task<ICategoryChannel> INestedChannel.GetCategoryAsync(CacheMode mode, RequestOptions options)
{ {


+ 4
- 2
src/Discord.Net.Rest/Entities/Channels/ThreadHelper.cs View File

@@ -9,7 +9,7 @@ namespace Discord.Rest
internal static class ThreadHelper internal static class ThreadHelper
{ {
public static async Task<Model> CreateThreadAsync(BaseDiscordClient client, ITextChannel channel, string name, ThreadType type = ThreadType.PublicThread, public static async Task<Model> 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; var features = channel.Guild.Features;
if (autoArchiveDuration == ThreadArchiveDuration.OneWeek && !features.HasFeature(GuildFeature.SevenDayThreadArchive)) if (autoArchiveDuration == ThreadArchiveDuration.OneWeek && !features.HasFeature(GuildFeature.SevenDayThreadArchive))
@@ -25,7 +25,9 @@ namespace Discord.Rest
{ {
Name = name, Name = name,
Duration = autoArchiveDuration, Duration = autoArchiveDuration,
Type = type
Type = type,
Invitable = invitable.HasValue ? invitable.Value : Optional<bool>.Unspecified,
Ratelimit = slowmode.HasValue ? slowmode.Value : Optional<int?>.Unspecified,
}; };


Model model; Model model;


+ 4
- 4
src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs View File

@@ -113,9 +113,9 @@ namespace Discord.WebSocket
/// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/> /// A task that represents the asynchronous create operation. The task result contains a <see cref="IThreadChannel"/>
/// </returns> /// </returns>
public async Task<SocketThreadChannel> CreateThreadAsync(string name, ThreadType type = ThreadType.PublicThread, public async Task<SocketThreadChannel> 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); var thread = (SocketThreadChannel)Guild.AddOrUpdateChannel(Discord.State, model);


@@ -345,8 +345,8 @@ namespace Discord.WebSocket
async Task<IReadOnlyCollection<IWebhook>> ITextChannel.GetWebhooksAsync(RequestOptions options) async Task<IReadOnlyCollection<IWebhook>> ITextChannel.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options).ConfigureAwait(false); => await GetWebhooksAsync(options).ConfigureAwait(false);
/// <inheritdoc /> /// <inheritdoc />
async Task<IThreadChannel> ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, RequestOptions options)
=> await CreateThreadAsync(name, type, autoArchiveDuration, message, options);
async Task<IThreadChannel> 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 #endregion


#region IGuildChannel #region IGuildChannel


Loading…
Cancel
Save