diff --git a/packages/core/src/adapters/events.ts b/packages/core/src/adapters/events.ts index eeb68c2..5754913 100644 --- a/packages/core/src/adapters/events.ts +++ b/packages/core/src/adapters/events.ts @@ -11,6 +11,7 @@ import type { DiscordGuildMemberAdd, DiscordGuildMemberRemove, DiscordGuildMemberUpdate, + DiscordGuildMembersChunk, DiscordGuildRoleCreate, DiscordGuildRoleDelete, DiscordGuildRoleUpdate, @@ -675,6 +676,17 @@ export const VOICE_SERVER_UPDATE: RawHandler = (sessio }); }; +export const GUILD_MEMBERS_CHUNK: RawHandler = (session, _shardId, payload) => { + session.events.emit('guildMembersChunk', { + guildId: payload.guild_id, + members: new Map(payload.members.map(m => [m.user.id, new Member(session, m, payload.guild_id)])), + chunkIndex: payload.chunk_index, + chunkCount: payload.chunk_count, + notFound: payload.not_found, + presences: payload.presences?.map(p => new Presence(session, p)) ?? [], + }); +}; + export const raw: RawHandler = (session, shardId, data) => { session.events.emit('raw', data as { t: string; d: unknown }, shardId); }; @@ -683,6 +695,16 @@ export interface Ready extends Omit { user: User; } +export interface GuildMembersChunk { + guildId: Snowflake; + members: Map; + chunkIndex: number; + chunkCount: number; + notFound?: string[]; + presences: Presence[]; + nonce?: string; +} + /** * Alias of `keyof Events`. List of all events that can be emitted by the session. * Ex: ready, messageCreate, guildCreate, etc. @@ -706,6 +728,7 @@ export interface Events { guildMemberAdd: Handler<[Member]>; guildMemberUpdate: Handler<[Member]>; guildMemberRemove: Handler<[User, Snowflake]>; + guildMembersChunk: Handler<[GuildMembersChunk]>; guildBanAdd: Handler<[{ guildId: Snowflake; user: DiscordUser }]>; guildBanRemove: Handler<[{ guildId: Snowflake; user: DiscordUser }]>; guildEmojisUpdate: Handler<