From 5d0f885d25e176ca7d019f77ec1a38fabcde9605 Mon Sep 17 00:00:00 2001 From: Vlad Frangu Date: Sat, 19 Dec 2020 14:52:50 +0200 Subject: [PATCH] chore: separate gateway payload data into separate exported types (#50) --- v8/gateway/index.ts | 514 ++++++++++++++++++++++++++++++------------ v8/payloads/oauth2.ts | 1 + 2 files changed, 368 insertions(+), 147 deletions(-) diff --git a/v8/gateway/index.ts b/v8/gateway/index.ts index 22df6725..e7de8197 100644 --- a/v8/gateway/index.ts +++ b/v8/gateway/index.ts @@ -17,6 +17,7 @@ import type { InviteTargetUserType, PresenceUpdateStatus, APIApplicationCommandInteraction, + APIApplication, } from '../payloads'; export const GatewayVersion = '8'; @@ -215,14 +216,20 @@ export type GatewayDispatchPayload = | GatewayWebhooksUpdateDispatch; // #region Dispatch Payloads + /** * https://discord.com/developers/docs/topics/gateway#hello */ export interface GatewayHello extends NonDispatchPayload { op: GatewayOPCodes.Hello; - d: { - heartbeat_interval: number; - }; + d: GatewayHelloData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#hello + */ +export interface GatewayHelloData { + heartbeat_interval: number; } /** @@ -246,9 +253,14 @@ export interface GatewayHeartbeatAck extends NonDispatchPayload { */ export interface GatewayInvalidSession extends NonDispatchPayload { op: GatewayOPCodes.InvalidSession; - d: boolean; + d: GatewayInvalidSessionData; } +/** + * https://discord.com/developers/docs/topics/gateway#invalid-session + */ +export type GatewayInvalidSessionData = boolean; + /** * https://discord.com/developers/docs/topics/gateway#reconnect */ @@ -260,24 +272,26 @@ export interface GatewayReconnect extends NonDispatchPayload { /** * https://discord.com/developers/docs/topics/gateway#ready */ -export type GatewayReadyDispatch = DataPayload< - GatewayDispatchEvents.Ready, - { - v: number; - user: APIUser; - session_id: string; - private_channels: []; - guilds: APIUnavailableGuild[]; - shard?: [shardID: number, shardCount: number]; - } ->; +export type GatewayReadyDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#ready + */ +export interface GatewayReadyDispatchData { + v: number; + user: APIUser; + session_id: string; + private_channels: []; + guilds: APIUnavailableGuild[]; + shard?: [shardID: number, shardCount: number]; + application: Pick; +} /** * https://discord.com/developers/docs/topics/gateway#resumed */ export type GatewayResumedDispatch = DataPayload; -/* eslint-disable @typescript-eslint/indent */ /** * https://discord.com/developers/docs/topics/gateway#channel-create * https://discord.com/developers/docs/topics/gateway#channel-update @@ -285,42 +299,72 @@ export type GatewayResumedDispatch = DataPayload; -/* eslint-enable @typescript-eslint/indent */ + +/** + * https://discord.com/developers/docs/topics/gateway#channel-create + * https://discord.com/developers/docs/topics/gateway#channel-update + * https://discord.com/developers/docs/topics/gateway#channel-delete + */ +export type GatewayChannelModifyDispatchData = APIChannel; export type GatewayChannelCreateDispatch = GatewayChannelModifyDispatch; +export type GatewayChannelCreateDispatchData = GatewayChannelModifyDispatchData; + export type GatewayChannelUpdateDispatch = GatewayChannelModifyDispatch; +export type GatewayChannelUpdateDispatchData = GatewayChannelModifyDispatchData; + export type GatewayChannelDeleteDispatch = GatewayChannelModifyDispatch; +export type GatewayChannelDeleteDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway#channel-pins-update */ export type GatewayChannelPinsUpdateDispatch = DataPayload< GatewayDispatchEvents.ChannelPinsUpdate, - { - guild_id?: string; - channel_id: string; - last_pin_timestamp?: string | null; - } + GatewayChannelPinsUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#channel-pins-update + */ +export interface GatewayChannelPinsUpdateDispatchData { + guild_id?: string; + channel_id: string; + last_pin_timestamp?: string | null; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-create * https://discord.com/developers/docs/topics/gateway#guild-update */ export type GatewayGuildModifyDispatch = DataPayload< GatewayDispatchEvents.GuildCreate | GatewayDispatchEvents.GuildUpdate, - APIGuild + GatewayGuildModifyDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-create + * https://discord.com/developers/docs/topics/gateway#guild-update + */ +export type GatewayGuildModifyDispatchData = APIGuild; + export type GatewayGuildCreateDispatch = GatewayGuildModifyDispatch; +export type GatewayGuildCreateDispatchData = GatewayGuildModifyDispatchData; + export type GatewayGuildUpdateDispatch = GatewayGuildModifyDispatch; +export type GatewayGuildUpdateDispatchData = GatewayGuildModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway#guild-delete */ -export type GatewayGuildDeleteDispatch = DataPayload; +export type GatewayGuildDeleteDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#guild-delete + */ +export type GatewayGuildDeleteDispatchData = APIUnavailableGuild; /** * https://discord.com/developers/docs/topics/gateway#guild-ban-add @@ -328,262 +372,413 @@ export type GatewayGuildDeleteDispatch = DataPayload; +/** + * https://discord.com/developers/docs/topics/gateway#guild-ban-add + * https://discord.com/developers/docs/topics/gateway#guild-ban-remove + */ +export interface GatewayGuildBanModifyDispatchData { + guild_id: string; + user: APIUser; +} + export type GatewayGuildBanAddDispatch = GatewayGuildBanModifyDispatch; +export type GatewayGuildBanAddDispatchData = GatewayGuildBanModifyDispatchData; + export type GatewayGuildBanRemoveDispatch = GatewayGuildBanModifyDispatch; +export type GatewayGuildBanRemoveDispatchData = GatewayGuildBanModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway#guild-emojis-update */ export type GatewayGuildEmojisUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildEmojisUpdate, - { - guild_id: string; - emojis: APIEmoji[]; - } + GatewayGuildEmojisUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-emojis-update + */ +export interface GatewayGuildEmojisUpdateDispatchData { + guild_id: string; + emojis: APIEmoji[]; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-integrations-update */ export type GatewayGuildIntegrationsUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildIntegrationsUpdate, - { guild_id: string } + GatewayGuildIntegrationsUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-integrations-update + */ +export interface GatewayGuildIntegrationsUpdateDispatchData { + guild_id: string; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-member-add */ export type GatewayGuildMemberAddDispatch = DataPayload< GatewayDispatchEvents.GuildMemberAdd, - APIGuildMember & { guild_id: string } + GatewayGuildMemberAddDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-add + */ +export interface GatewayGuildMemberAddDispatchData extends APIGuildMember { + guild_id: string; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-member-remove */ export type GatewayGuildMemberRemoveDispatch = DataPayload< GatewayDispatchEvents.GuildMemberRemove, - { - guild_id: string; - user: APIUser; - } + GatewayGuildMemberRemoveDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-remove + */ +export interface GatewayGuildMemberRemoveDispatchData { + guild_id: string; + user: APIUser; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-member-update */ export type GatewayGuildMemberUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildMemberUpdate, - Omit & { - guild_id: string; - } + GatewayGuildMemberUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-member-update + */ +export type GatewayGuildMemberUpdateDispatchData = Omit & { + guild_id: string; +}; + /** * https://discord.com/developers/docs/topics/gateway#guild-members-chunk */ export type GatewayGuildMembersChunkDispatch = DataPayload< GatewayDispatchEvents.GuildMembersChunk, - { - guild_id: string; - members: APIGuildMember[]; - chunk_index?: number; - chunk_count?: number; - not_found?: unknown[]; - presences?: RawGatewayPresenceUpdate[]; - nonce?: string; - } + GatewayGuildMembersChunkDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-members-chunk + */ +export interface GatewayGuildMembersChunkDispatchData { + guild_id: string; + members: APIGuildMember[]; + chunk_index?: number; + chunk_count?: number; + not_found?: unknown[]; + presences?: RawGatewayPresenceUpdate[]; + nonce?: string; +} + /** * https://discord.com/developers/docs/topics/gateway#guild-role-create * https://discord.com/developers/docs/topics/gateway#guild-role-update */ export type GatewayGuildRoleModifyDispatch = DataPayload< GatewayDispatchEvents.GuildRoleCreate | GatewayDispatchEvents.GuildRoleUpdate, - { - guild_id: string; - role: APIRole; - } + GatewayGuildRoleModifyDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-role-create + * https://discord.com/developers/docs/topics/gateway#guild-role-update + */ +export interface GatewayGuildRoleModifyDispatchData { + guild_id: string; + role: APIRole; +} + export type GatewayGuildRoleCreateDispatch = GatewayGuildRoleModifyDispatch; +export type GatewayGuildRoleCreateDispatchData = GatewayGuildRoleModifyDispatchData; + export type GatewayGuildRoleUpdateDispatch = GatewayGuildRoleModifyDispatch; +export type GatewayGuildRoleUpdateDispatchData = GatewayGuildRoleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway#guild-role-delete */ export type GatewayGuildRoleDeleteDispatch = DataPayload< GatewayDispatchEvents.GuildRoleDelete, - { - guild_id: string; - role_id: string; - } + GatewayGuildRoleDeleteDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#guild-role-delete + */ +export interface GatewayGuildRoleDeleteDispatchData { + guild_id: string; + role_id: string; +} + /** * https://discord.com/developers/docs/topics/gateway#interaction-create */ export type GatewayInteractionCreateDispatch = DataPayload< GatewayDispatchEvents.InteractionCreate, - APIApplicationCommandInteraction + GatewayInteractionCreateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#interaction-create + */ +export type GatewayInteractionCreateDispatchData = APIApplicationCommandInteraction; + /** * https://discord.com/developers/docs/topics/gateway#invite-create */ export type GatewayInviteCreateDispatch = DataPayload< GatewayDispatchEvents.InviteCreate, - { - channel_id: string; - code: string; - created_at: number; - guild_id?: string; - inviter?: APIUser; - max_age: number; - max_uses: number; - target_user?: APIUser; - target_user_type?: InviteTargetUserType; - temporary: boolean; - uses: 0; - } + GatewayInviteCreateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#invite-create + */ +export interface GatewayInviteCreateDispatchData { + channel_id: string; + code: string; + created_at: number; + guild_id?: string; + inviter?: APIUser; + max_age: number; + max_uses: number; + target_user?: APIUser; + target_user_type?: InviteTargetUserType; + temporary: boolean; + uses: 0; +} + /** * https://discord.com/developers/docs/topics/gateway#invite-delete */ export type GatewayInviteDeleteDispatch = DataPayload< GatewayDispatchEvents.InviteDelete, - { - channel_id: string; - guild_id?: string; - code: string; - } + GatewayInviteDeleteDispatchData +>; + +/** + * https://discord.com/developers/docs/topics/gateway#invite-delete + */ +export interface GatewayInviteDeleteDispatchData { + channel_id: string; + guild_id?: string; + code: string; +} + +/** + * https://discord.com/developers/docs/topics/gateway#message-create + */ +export type GatewayMessageCreateDispatch = DataPayload< + GatewayDispatchEvents.MessageCreate, + GatewayMessageCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway#message-create */ -export type GatewayMessageCreateDispatch = DataPayload; +export type GatewayMessageCreateDispatchData = APIMessage; /** * https://discord.com/developers/docs/topics/gateway#message-update */ export type GatewayMessageUpdateDispatch = DataPayload< GatewayDispatchEvents.MessageUpdate, - { id: string; channel_id: string } & Partial + GatewayMessageUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#message-update + */ +export type GatewayMessageUpdateDispatchData = { + id: string; + channel_id: string; +} & Partial; + /** * https://discord.com/developers/docs/topics/gateway#message-delete */ export type GatewayMessageDeleteDispatch = DataPayload< GatewayDispatchEvents.MessageDelete, - { - id: string; - channel_id: string; - guild_id?: string; - } + GatewayMessageDeleteDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#message-delete + */ +export interface GatewayMessageDeleteDispatchData { + id: string; + channel_id: string; + guild_id?: string; +} + /** * https://discord.com/developers/docs/topics/gateway#message-delete-bulk */ export type GatewayMessageDeleteBulkDispatch = DataPayload< GatewayDispatchEvents.MessageDeleteBulk, - { - ids: string[]; - channel_id: string; - guild_id?: string; - } + GatewayMessageDeleteBulkDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#message-delete-bulk + */ +export interface GatewayMessageDeleteBulkDispatchData { + ids: string[]; + channel_id: string; + guild_id?: string; +} + /** * https://discord.com/developers/docs/topics/gateway#message-reaction-add */ export type GatewayMessageReactionAddDispatch = ReactionData; +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-add + */ +export type GatewayMessageReactionAddDispatchData = GatewayMessageReactionAddDispatch['d']; + /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove */ export type GatewayMessageReactionRemoveDispatch = ReactionData; +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove + */ +export type GatewayMessageReactionRemoveDispatchData = GatewayMessageReactionRemoveDispatch['d']; + /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-all */ export type GatewayMessageReactionRemoveAllDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveAll, - MessageReactionRemoveData + GatewayMessageReactionRemoveAllDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-all + */ +export type GatewayMessageReactionRemoveAllDispatchData = MessageReactionRemoveData; + /** * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-emoji */ export type GatewayMessageReactionRemoveEmojiDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveEmoji, - MessageReactionRemoveData & { - emoji: APIEmoji; - } + GatewayMessageReactionRemoveEmojiDispatchData +>; + +/** + * https://discord.com/developers/docs/topics/gateway#message-reaction-remove-emoji + */ +export interface GatewayMessageReactionRemoveEmojiDispatchData extends MessageReactionRemoveData { + emoji: APIEmoji; +} + +/** + * https://discord.com/developers/docs/topics/gateway#presence-update + */ +export type GatewayPresenceUpdateDispatch = DataPayload< + GatewayDispatchEvents.PresenceUpdate, + GatewayPresenceUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway#presence-update */ -export type GatewayPresenceUpdateDispatch = DataPayload; +export type GatewayPresenceUpdateDispatchData = RawGatewayPresenceUpdate; /** * https://discord.com/developers/docs/topics/gateway#typing-start */ -export type GatewayTypingStartDispatch = DataPayload< - GatewayDispatchEvents.TypingStart, - { - channel_id: string; - guild_id?: string; - user_id: string; - timestamp: number; - member?: APIGuildMember; - } ->; +export type GatewayTypingStartDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#typing-start + */ +export interface GatewayTypingStartDispatchData { + channel_id: string; + guild_id?: string; + user_id: string; + timestamp: number; + member?: APIGuildMember; +} /** * https://discord.com/developers/docs/topics/gateway#user-update */ -export type GatewayUserUpdateDispatch = DataPayload; +export type GatewayUserUpdateDispatch = DataPayload; + +/** + * https://discord.com/developers/docs/topics/gateway#user-update + */ +export type GatewayUserUpdateDispatchData = APIUser; /** * https://discord.com/developers/docs/topics/gateway#voice-state-update */ -export type GatewayVoiceStateUpdateDispatch = DataPayload; +export type GatewayVoiceStateUpdateDispatch = DataPayload< + GatewayDispatchEvents.VoiceStateUpdate, + GatewayVoiceStateUpdateDispatchData +>; + +/** + * https://discord.com/developers/docs/topics/gateway#voice-state-update + */ +export type GatewayVoiceStateUpdateDispatchData = GatewayVoiceState; /** * https://discord.com/developers/docs/topics/gateway#voice-server-update */ export type GatewayVoiceServerUpdateDispatch = DataPayload< GatewayDispatchEvents.VoiceServerUpdate, - { - token: string; - guild_id: string; - endpoint: string; - } + GatewayVoiceServerUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#voice-server-update + */ +export interface GatewayVoiceServerUpdateDispatchData { + token: string; + guild_id: string; + endpoint: string; +} + /** * https://discord.com/developers/docs/topics/gateway#webhooks-update */ export type GatewayWebhooksUpdateDispatch = DataPayload< GatewayDispatchEvents.WebhooksUpdate, - { - guild_id: string; - channel_id: string; - } + GatewayWebhooksUpdateDispatchData >; +/** + * https://discord.com/developers/docs/topics/gateway#webhooks-update + */ +export interface GatewayWebhooksUpdateDispatchData { + guild_id: string; + channel_id: string; +} + // #endregion Dispatch Payloads // #region Sendable Payloads @@ -593,9 +788,14 @@ export type GatewayWebhooksUpdateDispatch = DataPayload< */ export interface GatewayHeartbeat { op: GatewayOPCodes.Heartbeat; - d: number | null; + d: GatewayHeartbeatData; } +/** + * https://discord.com/developers/docs/topics/gateway#heartbeating + */ +export type GatewayHeartbeatData = number | null; + /** * https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties */ @@ -610,17 +810,22 @@ export interface GatewayIdentifyProperties { */ export interface GatewayIdentify { op: GatewayOPCodes.Identify; - d: { - token: string; - properties: GatewayIdentifyProperties; - compress?: boolean; - large_threshold?: number; - // eslint-disable-next-line prettier/prettier - shard?: [shard_id: number, shard_count: number]; - presence?: GatewayPresenceUpdateData; - guild_subscriptions?: boolean; - intents: number; - }; + d: GatewayIdentifyData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#identify + */ +export interface GatewayIdentifyData { + token: string; + properties: GatewayIdentifyProperties; + compress?: boolean; + large_threshold?: number; + // eslint-disable-next-line prettier/prettier + shard?: [shard_id: number, shard_count: number]; + presence?: GatewayPresenceUpdateData; + guild_subscriptions?: boolean; + intents: number; } /** @@ -628,11 +833,16 @@ export interface GatewayIdentify { */ export interface GatewayResume { op: GatewayOPCodes.Resume; - d: { - token: string; - session_id: string; - seq: number; - }; + d: GatewayResumeData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#resume + */ +export interface GatewayResumeData { + token: string; + session_id: string; + seq: number; } /** @@ -640,14 +850,19 @@ export interface GatewayResume { */ export interface GatewayRequestGuildMembers { op: GatewayOPCodes.RequestGuildMembers; - d: { - guild_id: string | string[]; - query?: string; - limit: number; - presences?: boolean; - user_ids?: string | string[]; - nonce?: string; - }; + d: GatewayRequestGuildMembersData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#request-guild-members + */ +export interface GatewayRequestGuildMembersData { + guild_id: string | string[]; + query?: string; + limit: number; + presences?: boolean; + user_ids?: string | string[]; + nonce?: string; } /** @@ -655,12 +870,17 @@ export interface GatewayRequestGuildMembers { */ export interface GatewayVoiceStateUpdate { op: GatewayOPCodes.VoiceStateUpdate; - d: { - guild_id: string; - channel_id: string | null; - self_mute: boolean; - self_deaf: boolean; - }; + d: GatewayVoiceStateUpdateData; +} + +/** + * https://discord.com/developers/docs/topics/gateway#update-voice-state + */ +export interface GatewayVoiceStateUpdateData { + guild_id: string; + channel_id: string | null; + self_mute: boolean; + self_deaf: boolean; } /** diff --git a/v8/payloads/oauth2.ts b/v8/payloads/oauth2.ts index 79c8bc42..3c8b09bb 100644 --- a/v8/payloads/oauth2.ts +++ b/v8/payloads/oauth2.ts @@ -24,4 +24,5 @@ export interface APIApplication { primary_sku_id?: string; slug?: string; cover_image?: string; + flags?: number; }