diff --git a/src/structures/Guild.js b/src/structures/Guild.js index ec927b435a58..f1d45041dc5a 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -458,7 +458,7 @@ class Guild extends AnonymousGuild { } /** - * Options used to fetch the owner of guild. + * Options used to fetch the owner of a guild or a thread. * @typedef {Object} FetchOwnerOptions * @property {boolean} [cache=true] Whether or not to cache the fetched member * @property {boolean} [force=false] Whether to skip the cache check and request the API diff --git a/src/structures/ThreadChannel.js b/src/structures/ThreadChannel.js index 8c411daed902..ac91157f5c9e 100644 --- a/src/structures/ThreadChannel.js +++ b/src/structures/ThreadChannel.js @@ -234,6 +234,22 @@ class ThreadChannel extends Channel { return this.parent?.permissionsFor(memberOrRole) ?? null; } + /** + * Fetches the owner of this thread + * @param {FetchOwnerOptions} [options] The options for fetching the member + * @returns {Promise} + */ + async fetchOwner({ cache = true, force = false } = {}) { + if (!force) { + const existing = this.members.cache.get(this.ownerId); + if (existing) return existing; + } + + // We cannot fetch a single thread member, as of this commit's date, Discord API responds with 405 + const members = await this.members.fetch(cache); + return members.get(this.ownerId) ?? null; + } + /** * The options used to edit a thread channel * @typedef {Object} ThreadEditData diff --git a/typings/index.d.ts b/typings/index.d.ts index bf5b8b9a9493..54dc1dedf44f 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1699,6 +1699,7 @@ export class ThreadChannel extends TextBasedChannel(Channel) { public leave(): Promise; public permissionsFor(memberOrRole: GuildMember | Role): Readonly; public permissionsFor(memberOrRole: GuildMemberResolvable | RoleResolvable): Readonly | null; + public fetchOwner(options?: FetchOwnerOptions): Promise; public setArchived(archived?: boolean, reason?: string): Promise; public setAutoArchiveDuration( autoArchiveDuration: ThreadAutoArchiveDuration,