From 31bb84fe231996f12271d1bc92b9034dfe02ae6d Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:59:01 +0200 Subject: [PATCH] add(helpers/members): searchMembers function --- src/helpers/members/search_members.ts | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/helpers/members/search_members.ts diff --git a/src/helpers/members/search_members.ts b/src/helpers/members/search_members.ts new file mode 100644 index 000000000..f9fb1b76b --- /dev/null +++ b/src/helpers/members/search_members.ts @@ -0,0 +1,51 @@ +import { cacheHandlers } from "../../cache.ts"; +import { rest } from "../../rest/rest.ts"; +import { DiscordenoMember } from "../../structures/member.ts"; +import { structures } from "../../structures/mod.ts"; +import { DiscordGuildMemberWithUser } from "../../types/guilds/guild_member.ts"; +import { SearchGuildMembers } from "../../types/members/search_guild_members.ts"; +import { Errors } from "../../types/misc/errors.ts"; +import { Collection } from "../../util/collection.ts"; +import { endpoints } from "../../util/constants.ts"; + +/** + * ⚠️ BEGINNER DEVS!! YOU SHOULD ALMOST NEVER NEED THIS AND YOU CAN GET FROM cache.members.filter() + * @param query Query string to match username(s) and nickname(s) against + */ +export async function searchMembers( + guildId: string, + query: string, + options?: Omit & { cache?: boolean }, +) { + if (options?.limit) { + if (options.limit < 1) throw new Error(Errors.MEMBER_SEARCH_LIMIT_TOO_LOW); + if (options.limit > 1000) { + throw new Error(Errors.MEMBER_SEARCH_LIMIT_TOO_HIGH); + } + } + + const result = await rest.runMethod( + "get", + endpoints.GUILD_MEMBERS_SEARCH(guildId), + { + ...options, + query, + }, + ); + + const members = await Promise.all(result.map(async (member) => { + const discordenoMember = await structures.createDiscordenoMember( + member, + guildId, + ); + if (options?.cache) { + await cacheHandlers.set("members", discordenoMember.id, discordenoMember); + } + + return discordenoMember; + })); + + return new Collection( + members.map((member) => [member.id, member]), + ); +}