| @@ -160,5 +160,15 @@ namespace Discord | |||||
| /// </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, bool? invitable = null, int? slowmode = null, RequestOptions options = null); | IMessage message = null, bool? invitable = null, int? slowmode = null, RequestOptions options = null); | ||||
| /// <summary> | |||||
| /// Gets a collection of active threads within this channel. | |||||
| /// </summary> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents an asynchronous get operation for retrieving the threads. The task result contains | |||||
| /// a collection of active threads. | |||||
| /// </returns> | |||||
| Task<IReadOnlyCollection<IThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null); | |||||
| } | } | ||||
| } | } | ||||
| @@ -134,9 +134,9 @@ namespace Discord.Rest | |||||
| MessageComponent components = null, ISticker[] stickers = null, Embed[] embeds = null, MessageFlags flags = MessageFlags.None, ForumTag[] tags = null) | MessageComponent components = null, ISticker[] stickers = null, Embed[] embeds = null, MessageFlags flags = MessageFlags.None, ForumTag[] tags = null) | ||||
| => ThreadHelper.CreatePostAsync(this, Discord, title, attachments, archiveDuration, slowmode, text, embed, options, allowedMentions, components, stickers, embeds, flags, tags?.Select(tag => tag.Id).ToArray()); | => ThreadHelper.CreatePostAsync(this, Discord, title, attachments, archiveDuration, slowmode, text, embed, options, allowedMentions, components, stickers, embeds, flags, tags?.Select(tag => tag.Id).ToArray()); | ||||
| /// <inheritdoc cref="IForumChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| /// <inheritdoc cref="ITextChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| public Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | ||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Discord, options); | |||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Id, Discord, options); | |||||
| /// <inheritdoc cref="IForumChannel.GetJoinedPrivateArchivedThreadsAsync(int?, DateTimeOffset?, RequestOptions)"/> | /// <inheritdoc cref="IForumChannel.GetJoinedPrivateArchivedThreadsAsync(int?, DateTimeOffset?, RequestOptions)"/> | ||||
| public Task<IReadOnlyCollection<RestThreadChannel>> GetJoinedPrivateArchivedThreadsAsync(int? limit = null, DateTimeOffset? before = null, RequestOptions options = null) | public Task<IReadOnlyCollection<RestThreadChannel>> GetJoinedPrivateArchivedThreadsAsync(int? limit = null, DateTimeOffset? before = null, RequestOptions options = null) | ||||
| @@ -288,6 +288,10 @@ namespace Discord.Rest | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public Task SyncPermissionsAsync(RequestOptions options = null) | public Task SyncPermissionsAsync(RequestOptions options = null) | ||||
| => ChannelHelper.SyncPermissionsAsync(this, Discord, options); | => ChannelHelper.SyncPermissionsAsync(this, Discord, options); | ||||
| /// <inheritdoc cref="ITextChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| public virtual Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Id, Discord, options); | |||||
| #endregion | #endregion | ||||
| #region Invites | #region Invites | ||||
| @@ -321,6 +325,10 @@ namespace Discord.Rest | |||||
| async Task<IThreadChannel> ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, bool? invitable, int? slowmode, RequestOptions 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); | => await CreateThreadAsync(name, type, autoArchiveDuration, message, invitable, slowmode, options); | ||||
| /// <inheritdoc /> | |||||
| async Task<IReadOnlyCollection<IThreadChannel>> ITextChannel.GetActiveThreadsAsync(RequestOptions options) | |||||
| => await GetActiveThreadsAsync(options); | |||||
| #endregion | #endregion | ||||
| #region IMessageChannel | #region IMessageChannel | ||||
| @@ -241,5 +241,9 @@ namespace Discord.Rest | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public Task RemoveUserAsync(IGuildUser user, RequestOptions options = null) | public Task RemoveUserAsync(IGuildUser user, RequestOptions options = null) | ||||
| => Discord.ApiClient.RemoveThreadMemberAsync(Id, user.Id, options); | => Discord.ApiClient.RemoveThreadMemberAsync(Id, user.Id, options); | ||||
| /// <inheritdoc/> <exception cref="NotSupportedException">This method is not supported in threads.</exception> | |||||
| public override Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => throw new NotSupportedException("This method is not supported in threads."); | |||||
| } | } | ||||
| } | } | ||||
| @@ -234,6 +234,10 @@ namespace Discord.Rest | |||||
| return base.TriggerTypingAsync(options); | return base.TriggerTypingAsync(options); | ||||
| } | } | ||||
| /// <inheritdoc/> <exception cref="NotSupportedException">Threads are not supported in voice channels</exception> | |||||
| public override Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => throw new NotSupportedException("Threads are not supported in voice channels"); | |||||
| #endregion | #endregion | ||||
| @@ -68,10 +68,10 @@ namespace Discord.Rest | |||||
| return await client.ApiClient.ModifyThreadAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | return await client.ApiClient.ModifyThreadAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | ||||
| } | } | ||||
| public static async Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(IGuild guild, BaseDiscordClient client, RequestOptions options) | |||||
| public static async Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(IGuild guild, ulong channelId, BaseDiscordClient client, RequestOptions options) | |||||
| { | { | ||||
| var result = await client.ApiClient.GetActiveThreadsAsync(guild.Id, options).ConfigureAwait(false); | var result = await client.ApiClient.GetActiveThreadsAsync(guild.Id, options).ConfigureAwait(false); | ||||
| return result.Threads.Select(x => RestThreadChannel.Create(client, guild, x)).ToImmutableArray(); | |||||
| return result.Threads.Where(x => x.CategoryId == channelId).Select(x => RestThreadChannel.Create(client, guild, x)).ToImmutableArray(); | |||||
| } | } | ||||
| public static async Task<IReadOnlyCollection<RestThreadChannel>> GetPublicArchivedThreadsAsync(IGuildChannel channel, BaseDiscordClient client, int? limit = null, | public static async Task<IReadOnlyCollection<RestThreadChannel>> GetPublicArchivedThreadsAsync(IGuildChannel channel, BaseDiscordClient client, int? limit = null, | ||||
| @@ -135,9 +135,9 @@ namespace Discord.WebSocket | |||||
| MessageComponent components = null, ISticker[] stickers = null, Embed[] embeds = null, MessageFlags flags = MessageFlags.None, ForumTag[] tags = null) | MessageComponent components = null, ISticker[] stickers = null, Embed[] embeds = null, MessageFlags flags = MessageFlags.None, ForumTag[] tags = null) | ||||
| => ThreadHelper.CreatePostAsync(this, Discord, title, attachments, archiveDuration, slowmode, text, embed, options, allowedMentions, components, stickers, embeds, flags, tags?.Select(tag => tag.Id).ToArray()); | => ThreadHelper.CreatePostAsync(this, Discord, title, attachments, archiveDuration, slowmode, text, embed, options, allowedMentions, components, stickers, embeds, flags, tags?.Select(tag => tag.Id).ToArray()); | ||||
| /// <inheritdoc cref="IForumChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| /// <inheritdoc cref="ITextChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| public Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | ||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Discord, options); | |||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Id, Discord, options); | |||||
| /// <inheritdoc cref="IForumChannel.GetJoinedPrivateArchivedThreadsAsync(int?, DateTimeOffset?, RequestOptions)"/> | /// <inheritdoc cref="IForumChannel.GetJoinedPrivateArchivedThreadsAsync(int?, DateTimeOffset?, RequestOptions)"/> | ||||
| public Task<IReadOnlyCollection<RestThreadChannel>> GetJoinedPrivateArchivedThreadsAsync(int? limit = null, DateTimeOffset? before = null, RequestOptions options = null) | public Task<IReadOnlyCollection<RestThreadChannel>> GetJoinedPrivateArchivedThreadsAsync(int? limit = null, DateTimeOffset? before = null, RequestOptions options = null) | ||||
| @@ -130,7 +130,12 @@ namespace Discord.WebSocket | |||||
| return thread; | return thread; | ||||
| } | } | ||||
| #endregion | |||||
| /// <inheritdoc cref="ITextChannel.GetActiveThreadsAsync(RequestOptions)"/> | |||||
| public virtual Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => ThreadHelper.GetActiveThreadsAsync(Guild, Id, Discord, options); | |||||
| #endregion | |||||
| #region Messages | #region Messages | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| @@ -378,6 +383,9 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IThreadChannel> ITextChannel.CreateThreadAsync(string name, ThreadType type, ThreadArchiveDuration autoArchiveDuration, IMessage message, bool? invitable, int? slowmode, RequestOptions 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); | => await CreateThreadAsync(name, type, autoArchiveDuration, message, invitable, slowmode, options); | ||||
| /// <inheritdoc /> | |||||
| async Task<IReadOnlyCollection<IThreadChannel>> ITextChannel.GetActiveThreadsAsync(RequestOptions options) | |||||
| => await GetActiveThreadsAsync(options); | |||||
| #endregion | #endregion | ||||
| #region IGuildChannel | #region IGuildChannel | ||||
| @@ -374,6 +374,10 @@ namespace Discord.WebSocket | |||||
| public override Task SyncPermissionsAsync(RequestOptions options = null) | public override Task SyncPermissionsAsync(RequestOptions options = null) | ||||
| => throw new NotSupportedException("This method is not supported in threads."); | => throw new NotSupportedException("This method is not supported in threads."); | ||||
| /// <inheritdoc/> <exception cref="NotSupportedException">This method is not supported in threads.</exception> | |||||
| public override Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => throw new NotSupportedException("This method is not supported in threads."); | |||||
| string IChannel.Name => Name; | string IChannel.Name => Name; | ||||
| } | } | ||||
| } | } | ||||
| @@ -296,6 +296,10 @@ namespace Discord.WebSocket | |||||
| return base.TriggerTypingAsync(options); | return base.TriggerTypingAsync(options); | ||||
| } | } | ||||
| /// <inheritdoc/> <exception cref="NotSupportedException">Threads are not supported in voice channels</exception> | |||||
| public override Task<IReadOnlyCollection<RestThreadChannel>> GetActiveThreadsAsync(RequestOptions options = null) | |||||
| => throw new NotSupportedException("Threads are not supported in voice channels"); | |||||
| #endregion | #endregion | ||||
| private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | ||||