From 0ba2bcb54582b38ee8eec8d1547b979bf1b7c755 Mon Sep 17 00:00:00 2001 From: izexi <43889168+izexi@users.noreply.github.com> Date: Wed, 14 Apr 2021 13:53:01 +0100 Subject: [PATCH] feat(GuildMemberManager): add 'search' method (#4154) Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com> --- src/managers/GuildMemberManager.js | 13 +++++++++++++ typings/index.d.ts | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/src/managers/GuildMemberManager.js b/src/managers/GuildMemberManager.js index 612c3dcaa..7e4104524 100644 --- a/src/managers/GuildMemberManager.js +++ b/src/managers/GuildMemberManager.js @@ -136,6 +136,19 @@ class GuildMemberManager extends BaseManager { return this._fetchMany(options); } + /** + * Search for members in the guild based on a query. + * @param {Object} options Search options + * @property {string} options.query Filter members whose username or nickname start with this query + * @property {number} [options.limit=1] Maximum number of members to search + * @property {boolean} [options.cache=true] Whether or not to cache the fetched member(s) + * @returns {Promise>} + */ + async search({ query, limit = 1, cache = true } = {}) { + const data = await this.client.api.guilds(this.guild.id).members.search.get({ query: { query, limit } }); + return data.reduce((col, member) => col.set(member.user.id, this.add(member, cache)), new Collection()); + } + /** * Prunes members from the guild based on how long they have been inactive. * It's recommended to set options.count to `false` for large guilds. diff --git a/typings/index.d.ts b/typings/index.d.ts index 6603e96d1..6aa503643 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -2009,6 +2009,7 @@ declare module 'discord.js' { public fetch(options?: FetchMembersOptions): Promise>; public prune(options: GuildPruneMembersOptions & { dry?: false; count: false }): Promise; public prune(options?: GuildPruneMembersOptions): Promise; + public search(options: GuildSearchMembersOptions): Promise>; public unban(user: UserResolvable, reason?: string): Promise; } @@ -2860,6 +2861,12 @@ declare module 'discord.js' { channel: GuildChannelResolvable | null; } + interface GuildSearchMembersOptions { + query: string; + limit?: number; + cache?: boolean; + } + interface HTTPOptions { api?: string; version?: number;