From 3f432caef603b6b9e99486f98d5f3300bf159ba3 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Fri, 11 Feb 2022 12:24:47 -0500 Subject: [PATCH] feat(plugins/helpers): `fetchAndRetrieveMembers` (#2035) --- plugins/helpers/mod.ts | 8 ++++++++ plugins/helpers/src/fetchAndRetrieveMembers.ts | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 plugins/helpers/src/fetchAndRetrieveMembers.ts diff --git a/plugins/helpers/mod.ts b/plugins/helpers/mod.ts index 3691ffb35..50accb935 100644 --- a/plugins/helpers/mod.ts +++ b/plugins/helpers/mod.ts @@ -18,9 +18,14 @@ import { archiveThread, editThread, lockThread, unarchiveThread, unlockThread } import { disconnectMember } from "./src/disconnectMember.ts"; import { getMembersPaginated } from "./src/getMembersPaginated.ts"; import { moveMember } from "./src/moveMember.ts"; +import { fetchAndRetrieveMembers } from "./src/fetchAndRetrieveMembers.ts"; +import { BotWithCache } from "../cache/src/addCacheCollections.ts"; export interface BotWithHelpersPlugin extends Bot { helpers: FinalHelpers & { + fetchAndRetrieveMembers: ( + guildId: bigint, + ) => Promise>; sendDirectMessage: ( userId: bigint, content: string | CreateMessage, @@ -70,6 +75,9 @@ export interface BotWithHelpersPlugin extends Bot { export function enableHelpersPlugin(rawBot: Bot): BotWithHelpersPlugin { const bot = rawBot as BotWithHelpersPlugin; + bot.helpers.fetchAndRetrieveMembers = ( + guildId: bigint, + ) => fetchAndRetrieveMembers(bot as unknown as BotWithCache, guildId); bot.helpers.sendDirectMessage = ( userId: bigint, content: string | CreateMessage, diff --git a/plugins/helpers/src/fetchAndRetrieveMembers.ts b/plugins/helpers/src/fetchAndRetrieveMembers.ts new file mode 100644 index 000000000..5fcd916f9 --- /dev/null +++ b/plugins/helpers/src/fetchAndRetrieveMembers.ts @@ -0,0 +1,16 @@ +import { BotWithCache } from "../../cache/src/addCacheCollections.ts"; + +/** Fetch members for an entire guild then return the entire guilds cached members. */ +export async function fetchAndRetrieveMembers(bot: BotWithCache, guildId: bigint) { + if (!bot.enabledPlugins?.has("CACHE")) { + throw new Error("The fetchAndRetrieveMembers function requires the CACHE plugin first."); + } + + const guild = bot.guilds.get(guildId); + if (!guild) { + throw new Error("The guild was not found in cache. Unable to fetch members for uncached guild."); + } + + await bot.helpers.fetchMembers(guildId, guild.shardId); + return bot.members.filter((member) => member.guildId === guildId); +}