Skip to content

Commit

Permalink
feat(ThreadChannel): add fetchOwner() method (#6207)
Browse files Browse the repository at this point in the history
* feat(ThreadChannel): add owner and fetchOwner()

* fix(ThreadChannel): remove owner and return ThreadMember with fetchOwner

* fix(ThreadChannel): apply suggestions from code review

Co-authored-by: SpaceEEC <spaceeec@yahoo.com>

* fix(ThreadChannel): correctly point to the manager

* docs(FetchOwnerOptions): update desc to mention threads

* fix(ThreadChannel): fetchOwner can return null

* docs(ThreadChannel): owner is nullable

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>

Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
  • Loading branch information
3 people committed Jul 31, 2021
1 parent 77c72e6 commit 331a9d3
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/structures/Guild.js
Expand Up @@ -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
Expand Down
16 changes: 16 additions & 0 deletions src/structures/ThreadChannel.js
Expand Up @@ -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<?ThreadMember>}
*/
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
Expand Down
1 change: 1 addition & 0 deletions typings/index.d.ts
Expand Up @@ -1703,6 +1703,7 @@ export class ThreadChannel extends TextBasedChannel(Channel) {
public leave(): Promise<ThreadChannel>;
public permissionsFor(memberOrRole: GuildMember | Role): Readonly<Permissions>;
public permissionsFor(memberOrRole: GuildMemberResolvable | RoleResolvable): Readonly<Permissions> | null;
public fetchOwner(options?: FetchOwnerOptions): Promise<ThreadMember | null>;
public setArchived(archived?: boolean, reason?: string): Promise<ThreadChannel>;
public setAutoArchiveDuration(
autoArchiveDuration: ThreadAutoArchiveDuration,
Expand Down

0 comments on commit 331a9d3

Please sign in to comment.