diff --git a/src/managers/GuildMemberManager.js b/src/managers/GuildMemberManager.js index 59ef163ce2b3..6fb272c32ebe 100644 --- a/src/managers/GuildMemberManager.js +++ b/src/managers/GuildMemberManager.js @@ -205,6 +205,24 @@ class GuildMemberManager extends CachedManager { return data.reduce((col, member) => col.set(member.user.id, this._add(member, cache)), new Collection()); } + /** + * Options used for listing guild members. + * @typedef {Object} GuildListMembersOptions + * @property {Snowflake} [after] Limit fetching members to those with an id greater than the supplied id + * @property {number} [limit=1] Maximum number of members to list + * @property {boolean} [cache=true] Whether or not to cache the fetched member(s) + */ + + /** + * Lists up to 1000 members of the guild. + * @param {GuildListMembersOptions} [options] Options for listing members + * @returns {Promise>} + */ + async list({ after, limit = 1, cache = true } = {}) { + const data = await this.client.api.guilds(this.guild.id).members.get({ query: { after, limit } }); + return data.reduce((col, member) => col.set(member.user.id, this._add(member, cache)), new Collection()); + } + /** * Edits a member of the guild. * The user must be a member of the guild diff --git a/typings/index.d.ts b/typings/index.d.ts index a5ca9b5aa335..792cfeb2ca6f 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -130,7 +130,7 @@ import { RawWelcomeChannelData, RawWelcomeScreenData, RawWidgetData, - RawWidgetMemberData + RawWidgetMemberData, } from './rawDataTypes'; //#region Classes @@ -2474,6 +2474,7 @@ export class GuildMemberManager extends CachedManager; public fetch(options?: FetchMembersOptions): Promise>; public kick(user: UserResolvable, reason?: string): Promise; + public list(options?: GuildListMembersOptions): Promise>; public prune(options: GuildPruneMembersOptions & { dry?: false; count: false }): Promise; public prune(options?: GuildPruneMembersOptions): Promise; public search(options: GuildSearchMembersOptions): Promise>; @@ -3812,6 +3813,12 @@ export interface GuildSearchMembersOptions { cache?: boolean; } +export interface GuildListMembersOptions { + after?: Snowflake; + limit?: number; + cache?: boolean; +} + export type GuildTemplateResolvable = string; export type GuildVoiceChannelResolvable = VoiceChannel | StageChannel | Snowflake;