From 38af805cd014fbbc7c27db00b77187e003181cc6 Mon Sep 17 00:00:00 2001 From: Amy Date: Fri, 16 Jan 2026 09:21:51 -0400 Subject: [PATCH] fix: make ReadyData partial to match event documentation Signed-off-by: Amy --- src/events/v1.ts | 271 ++++++++++++++++++++++++----------------------- 1 file changed, 141 insertions(+), 130 deletions(-) diff --git a/src/events/v1.ts b/src/events/v1.ts index 9a23a75b..eb51b2f4 100644 --- a/src/events/v1.ts +++ b/src/events/v1.ts @@ -44,21 +44,21 @@ export type ProtocolV1 = { type ClientMessage = | { type: "Authenticate"; token: string } | { - type: "BeginTyping"; - channel: string; - } + type: "BeginTyping"; + channel: string; + } | { - type: "EndTyping"; - channel: string; - } + type: "EndTyping"; + channel: string; + } | { - type: "Ping"; - data: number; - } + type: "Ping"; + data: number; + } | { - type: "Pong"; - data: number; - }; + type: "Pong"; + data: number; + }; /** * Messages sent from the server @@ -67,51 +67,51 @@ type ServerMessage = | { type: "Error"; data: Error } | { type: "Bulk"; v: ServerMessage[] } | { type: "Authenticated" } - | ({ type: "Ready" } & ReadyData) + | ({ type: "Ready" } & Partial) | { type: "Ping"; data: number } | { type: "Pong"; data: number } | ({ type: "Message" } & Message) | { - type: "MessageUpdate"; - id: string; - channel: string; - data: Partial; - } + type: "MessageUpdate"; + id: string; + channel: string; + data: Partial; + } | { - type: "MessageAppend"; - id: string; - channel: string; - append: Pick, "embeds">; - } + type: "MessageAppend"; + id: string; + channel: string; + append: Pick, "embeds">; + } | { type: "MessageDelete"; id: string; channel: string } | { - type: "MessageReact"; - id: string; - channel_id: string; - user_id: string; - emoji_id: string; - } + type: "MessageReact"; + id: string; + channel_id: string; + user_id: string; + emoji_id: string; + } | { - type: "MessageUnreact"; - id: string; - channel_id: string; - user_id: string; - emoji_id: string; - } + type: "MessageUnreact"; + id: string; + channel_id: string; + user_id: string; + emoji_id: string; + } | { - type: "MessageRemoveReaction"; - id: string; - channel_id: string; - emoji_id: string; - } + type: "MessageRemoveReaction"; + id: string; + channel_id: string; + emoji_id: string; + } | { type: "BulkMessageDelete"; channel: string; ids: string[] } | ({ type: "ChannelCreate" } & Channel) | { - type: "ChannelUpdate"; - id: string; - data: Partial; - clear?: FieldsChannel[]; - } + type: "ChannelUpdate"; + id: string; + data: Partial; + clear?: FieldsChannel[]; + } | { type: "ChannelDelete"; id: string } | { type: "ChannelGroupJoin"; id: string; user: string } | { type: "ChannelGroupLeave"; id: string; user: string } @@ -119,91 +119,91 @@ type ServerMessage = | { type: "ChannelStopTyping"; id: string; user: string } | { type: "ChannelAck"; id: string; user: string; message_id: string } | { - type: "ServerCreate"; - id: string; - server: Server; - channels: Channel[]; - } + type: "ServerCreate"; + id: string; + server: Server; + channels: Channel[]; + } | { - type: "ServerUpdate"; - id: string; - data: Partial; - clear?: FieldsServer[]; - } + type: "ServerUpdate"; + id: string; + data: Partial; + clear?: FieldsServer[]; + } | { type: "ServerDelete"; id: string } | { - type: "ServerMemberUpdate"; - id: MemberCompositeKey; - data: Partial; - clear?: FieldsMember[]; - } + type: "ServerMemberUpdate"; + id: MemberCompositeKey; + data: Partial; + clear?: FieldsMember[]; + } | { type: "ServerMemberJoin"; id: string; user: string } | { type: "ServerMemberLeave"; id: string; user: string } | { - type: "ServerRoleUpdate"; - id: string; - role_id: string; - data: Partial; - } + type: "ServerRoleUpdate"; + id: string; + role_id: string; + data: Partial; + } | { type: "ServerRoleDelete"; id: string; role_id: string } | { - type: "UserUpdate"; - id: string; - data: Partial; - clear?: FieldsUser[]; - } + type: "UserUpdate"; + id: string; + data: Partial; + clear?: FieldsUser[]; + } | { type: "UserRelationship"; user: User; status: RelationshipStatus } | { type: "UserPresence"; id: string; online: boolean } | { - type: "UserSettingsUpdate"; - id: string; - update: { [key: string]: [number, string] }; - } + type: "UserSettingsUpdate"; + id: string; + update: { [key: string]: [number, string] }; + } | { type: "UserPlatformWipe"; user_id: string; flags: number } | ({ type: "EmojiCreate" } & Emoji) | { type: "EmojiDelete"; id: string } | ({ - type: "Auth"; - } & ( + type: "Auth"; + } & ( | { - event_type: "DeleteSession"; - user_id: string; - session_id: string; - } + event_type: "DeleteSession"; + user_id: string; + session_id: string; + } | { - event_type: "DeleteAllSessions"; - user_id: string; - exclude_session_id: string; - } + event_type: "DeleteAllSessions"; + user_id: string; + exclude_session_id: string; + } )) | { - type: "VoiceChannelJoin"; - id: string; - state: UserVoiceState; - } + type: "VoiceChannelJoin"; + id: string; + state: UserVoiceState; + } | { - type: "VoiceChannelLeave"; - id: string; - user: string; - } + type: "VoiceChannelLeave"; + id: string; + user: string; + } | { - type: "VoiceChannelMove"; - user: string; - from: string; - to: string; - state: UserVoiceState; - } + type: "VoiceChannelMove"; + user: string; + from: string; + to: string; + state: UserVoiceState; + } | { - type: "UserVoiceStateUpdate"; - id: string; - channel_id: string; - data: Partial; - } + type: "UserVoiceStateUpdate"; + id: string; + channel_id: string; + data: Partial; + } | { - type: "UserMoveVoiceChannel"; - node: string; - token: string; - }; + type: "UserMoveVoiceChannel"; + node: string; + token: string; + }; /** * Policy change type @@ -276,42 +276,53 @@ export async function handleEvent( } case "Ready": { batch(() => { - for (const user of event.users) { - const u = client.users.getOrCreate(user._id, user); + if (event.users) { + for (const user of event.users) { + const u = client.users.getOrCreate(user._id, user); - if (u.relationship === "User") { - client.user = u; + if (u.relationship === "User") { + client.user = u; + } } } - for (const server of event.servers) { - client.servers.getOrCreate(server._id, server); + if (event.servers) { + for (const server of event.servers) { + client.servers.getOrCreate(server._id, server); + } } - for (const member of event.members) { - client.serverMembers.getOrCreate(member._id, member); + if (event.members) { + for (const member of event.members) { + client.serverMembers.getOrCreate(member._id, member); + } } - for (const channel of event.channels) { - client.channels.getOrCreate(channel._id, channel); + if (event.channels) { + for (const channel of event.channels) { + client.channels.getOrCreate(channel._id, channel); + } } - for (const state of event.voice_states) { - const channel = client.channels.get(state.id); - if (channel) { - channel.voiceParticipants.clear(); - - for (const participant of state.participants) { - channel.voiceParticipants.set( - participant.id, - new VoiceParticipant(client, participant), - ); + if (event.voice_states) { + for (const state of event.voice_states) { + const channel = client.channels.get(state.id); + if (channel) { + channel.voiceParticipants.clear(); + + for (const participant of state.participants) { + channel.voiceParticipants.set( + participant.id, + new VoiceParticipant(client, participant), + ); + } } } } - - for (const emoji of event.emojis) { - client.emojis.getOrCreate(emoji._id, emoji); + if (event.emojis) { + for (const emoji of event.emojis) { + client.emojis.getOrCreate(emoji._id, emoji); + } } });