From 1edd01a7a494ee7604b81bc2a3ec25a55d957f92 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Wed, 10 May 2023 17:40:52 +0100 Subject: [PATCH] feat(client): Support more request member fields (#9475) feat(client): support more request member fields Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/core/src/client.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index a7c3b9c03..5c563f0eb 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -7,7 +7,6 @@ import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { GatewayDispatchEvents, GatewayOpcodes, - type APIGuildMember, type GatewayAutoModerationActionExecutionDispatchData, type GatewayAutoModerationRuleCreateDispatchData, type GatewayAutoModerationRuleDeleteDispatchData, @@ -169,6 +168,13 @@ export interface ClientOptions { rest: REST; } +export interface RequestGuildMembersResult { + members: GatewayGuildMembersChunkDispatchData['members']; + nonce: NonNullable; + notFound: NonNullable; + presences: NonNullable; +} + export class Client extends AsyncEventEmitter { public readonly rest: REST; @@ -199,8 +205,10 @@ export class Client extends AsyncEventEmitter { const shardId = calculateShardId(options.guild_id, await this.gateway.getShardCount()); const nonce = options.nonce ?? DiscordSnowflake.generate().toString(); - const promise = new Promise((resolve, reject) => { - const guildMembers: APIGuildMember[] = []; + const promise = new Promise((resolve, reject) => { + const members: RequestGuildMembersResult['members'] = []; + const notFound: RequestGuildMembersResult['notFound'] = []; + const presences: RequestGuildMembersResult['presences'] = []; const timer = setTimeout(() => { reject(new Error('Request timed out')); @@ -211,11 +219,13 @@ export class Client extends AsyncEventEmitter { if (data.nonce !== nonce) return; - guildMembers.push(...data.members); + members.push(...data.members); + if ('presences' in data) presences.push(...data.presences); + if ('not_found' in data) notFound.push(...data.not_found); if (data.chunk_index >= data.chunk_count - 1) { this.off(GatewayDispatchEvents.GuildMembersChunk, handler); - resolve(guildMembers); + resolve({ members, nonce, notFound, presences }); } };