feat(ThreadChannel): add fetchOwner() method (#6207)

* 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>
This commit is contained in:
Rodry
2021-07-31 13:00:33 +01:00
committed by GitHub
parent 77c72e625f
commit 331a9d3ffc
3 changed files with 18 additions and 1 deletions

View File

@@ -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

View File

@@ -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

1
typings/index.d.ts vendored
View File

@@ -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,