From 0126d9b810a156c4bf1b8b93f2121f3319855bac Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 24 Sep 2022 15:51:11 +0100 Subject: [PATCH] fix(ThreadChannel): Add forum channel to parent (#8664) fix(ThreadChannel): add forum channel to parent Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../src/structures/ThreadChannel.js | 2 +- packages/discord.js/typings/index.d.ts | 26 ++++++++++--------- packages/discord.js/typings/index.test-d.ts | 17 ++++++++++++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/discord.js/src/structures/ThreadChannel.js b/packages/discord.js/src/structures/ThreadChannel.js index d1714a260b85..2345172b793b 100644 --- a/packages/discord.js/src/structures/ThreadChannel.js +++ b/packages/discord.js/src/structures/ThreadChannel.js @@ -246,7 +246,7 @@ class ThreadChannel extends BaseChannel { /** * The parent channel of this thread - * @type {?(NewsChannel|TextChannel)} + * @type {?(NewsChannel|TextChannel|ForumChannel)} * @readonly */ get parent() { diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 0fe1321bc58a..d2006faf7938 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2565,19 +2565,19 @@ export class TextChannel extends BaseGuildTextChannel { public type: ChannelType.GuildText; } -export type AnyThreadChannel = PublicThreadChannel | PrivateThreadChannel; +export type AnyThreadChannel = PublicThreadChannel | PrivateThreadChannel; -export interface PublicThreadChannel extends ThreadChannel { +export interface PublicThreadChannel extends ThreadChannel { type: ChannelType.PublicThread | ChannelType.AnnouncementThread; } -export interface PrivateThreadChannel extends ThreadChannel { +export interface PrivateThreadChannel extends ThreadChannel { get createdTimestamp(): number; get createdAt(): Date; type: ChannelType.PrivateThread; } -export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ +export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ 'fetchWebhooks', 'createWebhook', 'setNSFW', @@ -2609,7 +2609,7 @@ export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ public members: ThreadMemberManager; public name: string; public ownerId: Snowflake | null; - public get parent(): TextChannel | NewsChannel | null; + public get parent(): If | null; public parentId: Snowflake | null; public rateLimitPerUser: number | null; public type: ThreadChannelType; @@ -2633,7 +2633,7 @@ export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ public setInvitable(invitable?: boolean, reason?: string): Promise; public setLocked(locked?: boolean, reason?: string): Promise; public setName(name: string, reason?: string): Promise; - public setAppliedTags(appliedTags: Snowflake[], reason?: string): Promise; + public setAppliedTags(appliedTags: Snowflake[], reason?: string): Promise>; public toString(): ChannelMention; } @@ -3698,22 +3698,24 @@ export class StageInstanceManager extends CachedManager; } -export class ThreadManager extends CachedManager { +export class ThreadManager extends CachedManager< + Snowflake, + ThreadChannel, + ThreadChannelResolvable +> { protected constructor(channel: TextChannel | NewsChannel | ForumChannel, iterable?: Iterable); - public channel: TextChannel | NewsChannel | ForumChannel; + public channel: If; public fetch(options: ThreadChannelResolvable, cacheOptions?: BaseFetchOptions): Promise; public fetch(options?: FetchThreadsOptions, cacheOptions?: { cache?: boolean }): Promise; public fetchArchived(options?: FetchArchivedThreadOptions, cache?: boolean): Promise; public fetchActive(cache?: boolean): Promise; } -export class GuildTextThreadManager extends ThreadManager { - public channel: TextChannel | NewsChannel; +export class GuildTextThreadManager extends ThreadManager { public create(options: GuildTextThreadCreateOptions): Promise; } -export class GuildForumThreadManager extends ThreadManager { - public channel: ForumChannel; +export class GuildForumThreadManager extends ThreadManager { public create(options: GuildForumThreadCreateOptions): Promise; } diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 5284d4dccbcd..fbd6a4c07904 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -139,6 +139,8 @@ import { ModalSubmitInteraction, ForumChannel, ChannelFlagsBitField, + GuildForumThreadManager, + GuildTextThreadManager, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -1224,6 +1226,8 @@ expectType>(shardClientUtil.broadcastEval(async () => 1)); declare const dmChannel: DMChannel; declare const threadChannel: ThreadChannel; +declare const threadChannelFromForum: ThreadChannel; +declare const threadChannelNotFromForum: ThreadChannel; declare const newsChannel: NewsChannel; declare const textChannel: TextChannel; declare const voiceChannel: VoiceChannel; @@ -1231,6 +1235,11 @@ declare const guild: Guild; declare const user: User; declare const guildMember: GuildMember; +// Test thread channels' parent inference +expectType(threadChannel.parent); +expectType(threadChannelFromForum.parent); +expectType(threadChannelNotFromForum.parent); + // Test whether the structures implement send expectType['send']>(dmChannel.send); expectType['send']>(threadChannel.send); @@ -1406,6 +1415,14 @@ declare const guildChannelManager: GuildChannelManager; expectType(message.channel.messages.channel); } +declare const guildForumThreadManager: GuildForumThreadManager; +expectType(guildForumThreadManager.channel); + +declare const guildTextThreadManager: GuildTextThreadManager< + ChannelType.PublicThread | ChannelType.PrivateThread | ChannelType.AnnouncementThread +>; +expectType(guildTextThreadManager.channel); + declare const messageManager: MessageManager; { expectType>(messageManager.fetch('1234567890'));