From 14963d61d488af2be8d3655651fd0677ad4c46ed Mon Sep 17 00:00:00 2001 From: Almeida Date: Wed, 10 Sep 2025 22:04:31 +0100 Subject: [PATCH] feat: add RateLimited gateway event (#1334) --- deno/gateway/v10.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++ deno/gateway/v9.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++ gateway/v10.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++ gateway/v9.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 276 insertions(+) diff --git a/deno/gateway/v10.ts b/deno/gateway/v10.ts index f2ca4488..7b049bfa 100644 --- a/deno/gateway/v10.ts +++ b/deno/gateway/v10.ts @@ -286,6 +286,7 @@ export enum GatewayDispatchEvents { MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', MessageUpdate = 'MESSAGE_UPDATE', PresenceUpdate = 'PRESENCE_UPDATE', + RateLimited = 'RATE_LIMITED', Ready = 'READY', Resumed = 'RESUMED', StageInstanceCreate = 'STAGE_INSTANCE_CREATE', @@ -374,6 +375,7 @@ export type GatewayDispatchPayload = | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch + | GatewayRateLimitedDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewaySoundboardSoundsDispatch @@ -2217,6 +2219,73 @@ export interface GatewayMessagePollVoteDispatchData { answer_id: number; } +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedDispatch< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> = _DataPayload>; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatch = + GatewayRateLimitedDispatch; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export interface GatewayRateLimitedDispatchData< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> { + /** + * {@link GatewayOpcodes | Gateway opcode} of the event that was rate limited + */ + opcode: Opcode; + /** + * The number of seconds to wait before submitting another request + */ + retry_after: number; + /** + * Metadata for the event that was rate limited + */ + meta: GatewayOpcodeRateLimitMetadataMap[Opcode]; +} + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatchData = + GatewayRateLimitedDispatchData; + +/** + * Map of gateway opcodes to their rate limit metadata types + * + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited-rate-limit-metadata-for-opcode-structure} + */ +export interface GatewayOpcodeRateLimitMetadataMap { + [GatewayOpcodes.RequestGuildMembers]: GatewayRequestGuildMemberRateLimitMetadata; +} + +/** + * Types of metadata that can be received in a {@link GatewayRateLimitedDispatchData.meta} field + */ +export type GatewayRateLimitedMetadata = GatewayOpcodeRateLimitMetadataMap[keyof GatewayOpcodeRateLimitMetadataMap]; + +/** + * Rate limit metadata for the {@link GatewayOpcodes.RequestGuildMembers} opcode + */ +export interface GatewayRequestGuildMemberRateLimitMetadata { + /** + * Id of the guild members were requested for + */ + guild_id: Snowflake; + /** + * Nonce used to identify the {@link GatewayGuildMembersChunkDispatch} response + */ + nonce?: string; +} + // #endregion Dispatch Payloads // #region Sendable Payloads diff --git a/deno/gateway/v9.ts b/deno/gateway/v9.ts index e089132e..bc149cdb 100644 --- a/deno/gateway/v9.ts +++ b/deno/gateway/v9.ts @@ -285,6 +285,7 @@ export enum GatewayDispatchEvents { MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', MessageUpdate = 'MESSAGE_UPDATE', PresenceUpdate = 'PRESENCE_UPDATE', + RateLimited = 'RATE_LIMITED', Ready = 'READY', Resumed = 'RESUMED', StageInstanceCreate = 'STAGE_INSTANCE_CREATE', @@ -373,6 +374,7 @@ export type GatewayDispatchPayload = | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch + | GatewayRateLimitedDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewaySoundboardSoundsDispatch @@ -2216,6 +2218,73 @@ export interface GatewayMessagePollVoteDispatchData { answer_id: number; } +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedDispatch< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> = _DataPayload>; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatch = + GatewayRateLimitedDispatch; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export interface GatewayRateLimitedDispatchData< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> { + /** + * {@link GatewayOpcodes | Gateway opcode} of the event that was rate limited + */ + opcode: Opcode; + /** + * The number of seconds to wait before submitting another request + */ + retry_after: number; + /** + * Metadata for the event that was rate limited + */ + meta: GatewayOpcodeRateLimitMetadataMap[Opcode]; +} + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatchData = + GatewayRateLimitedDispatchData; + +/** + * Map of gateway opcodes to their rate limit metadata types + * + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited-rate-limit-metadata-for-opcode-structure} + */ +export interface GatewayOpcodeRateLimitMetadataMap { + [GatewayOpcodes.RequestGuildMembers]: GatewayRequestGuildMemberRateLimitMetadata; +} + +/** + * Types of metadata that can be received in a {@link GatewayRateLimitedDispatchData.meta} field + */ +export type GatewayRateLimitedMetadata = GatewayOpcodeRateLimitMetadataMap[keyof GatewayOpcodeRateLimitMetadataMap]; + +/** + * Rate limit metadata for the {@link GatewayOpcodes.RequestGuildMembers} opcode + */ +export interface GatewayRequestGuildMemberRateLimitMetadata { + /** + * Id of the guild members were requested for + */ + guild_id: Snowflake; + /** + * Nonce used to identify the {@link GatewayGuildMembersChunkDispatch} response + */ + nonce?: string; +} + // #endregion Dispatch Payloads // #region Sendable Payloads diff --git a/gateway/v10.ts b/gateway/v10.ts index 6e62c300..f99d60b5 100644 --- a/gateway/v10.ts +++ b/gateway/v10.ts @@ -286,6 +286,7 @@ export enum GatewayDispatchEvents { MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', MessageUpdate = 'MESSAGE_UPDATE', PresenceUpdate = 'PRESENCE_UPDATE', + RateLimited = 'RATE_LIMITED', Ready = 'READY', Resumed = 'RESUMED', StageInstanceCreate = 'STAGE_INSTANCE_CREATE', @@ -374,6 +375,7 @@ export type GatewayDispatchPayload = | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch + | GatewayRateLimitedDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewaySoundboardSoundsDispatch @@ -2217,6 +2219,73 @@ export interface GatewayMessagePollVoteDispatchData { answer_id: number; } +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedDispatch< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> = _DataPayload>; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatch = + GatewayRateLimitedDispatch; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export interface GatewayRateLimitedDispatchData< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> { + /** + * {@link GatewayOpcodes | Gateway opcode} of the event that was rate limited + */ + opcode: Opcode; + /** + * The number of seconds to wait before submitting another request + */ + retry_after: number; + /** + * Metadata for the event that was rate limited + */ + meta: GatewayOpcodeRateLimitMetadataMap[Opcode]; +} + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatchData = + GatewayRateLimitedDispatchData; + +/** + * Map of gateway opcodes to their rate limit metadata types + * + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited-rate-limit-metadata-for-opcode-structure} + */ +export interface GatewayOpcodeRateLimitMetadataMap { + [GatewayOpcodes.RequestGuildMembers]: GatewayRequestGuildMemberRateLimitMetadata; +} + +/** + * Types of metadata that can be received in a {@link GatewayRateLimitedDispatchData.meta} field + */ +export type GatewayRateLimitedMetadata = GatewayOpcodeRateLimitMetadataMap[keyof GatewayOpcodeRateLimitMetadataMap]; + +/** + * Rate limit metadata for the {@link GatewayOpcodes.RequestGuildMembers} opcode + */ +export interface GatewayRequestGuildMemberRateLimitMetadata { + /** + * Id of the guild members were requested for + */ + guild_id: Snowflake; + /** + * Nonce used to identify the {@link GatewayGuildMembersChunkDispatch} response + */ + nonce?: string; +} + // #endregion Dispatch Payloads // #region Sendable Payloads diff --git a/gateway/v9.ts b/gateway/v9.ts index 173e48a3..1ff377c2 100644 --- a/gateway/v9.ts +++ b/gateway/v9.ts @@ -285,6 +285,7 @@ export enum GatewayDispatchEvents { MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', MessageUpdate = 'MESSAGE_UPDATE', PresenceUpdate = 'PRESENCE_UPDATE', + RateLimited = 'RATE_LIMITED', Ready = 'READY', Resumed = 'RESUMED', StageInstanceCreate = 'STAGE_INSTANCE_CREATE', @@ -373,6 +374,7 @@ export type GatewayDispatchPayload = | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch + | GatewayRateLimitedDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewaySoundboardSoundsDispatch @@ -2216,6 +2218,73 @@ export interface GatewayMessagePollVoteDispatchData { answer_id: number; } +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedDispatch< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> = _DataPayload>; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatch = + GatewayRateLimitedDispatch; + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export interface GatewayRateLimitedDispatchData< + Opcode extends keyof GatewayOpcodeRateLimitMetadataMap = keyof GatewayOpcodeRateLimitMetadataMap, +> { + /** + * {@link GatewayOpcodes | Gateway opcode} of the event that was rate limited + */ + opcode: Opcode; + /** + * The number of seconds to wait before submitting another request + */ + retry_after: number; + /** + * Metadata for the event that was rate limited + */ + meta: GatewayOpcodeRateLimitMetadataMap[Opcode]; +} + +/** + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited} + */ +export type GatewayRateLimitedRequestGuildMembersDispatchData = + GatewayRateLimitedDispatchData; + +/** + * Map of gateway opcodes to their rate limit metadata types + * + * @see {@link https://discord.com/developers/docs/events/gateway-events#rate-limited-rate-limit-metadata-for-opcode-structure} + */ +export interface GatewayOpcodeRateLimitMetadataMap { + [GatewayOpcodes.RequestGuildMembers]: GatewayRequestGuildMemberRateLimitMetadata; +} + +/** + * Types of metadata that can be received in a {@link GatewayRateLimitedDispatchData.meta} field + */ +export type GatewayRateLimitedMetadata = GatewayOpcodeRateLimitMetadataMap[keyof GatewayOpcodeRateLimitMetadataMap]; + +/** + * Rate limit metadata for the {@link GatewayOpcodes.RequestGuildMembers} opcode + */ +export interface GatewayRequestGuildMemberRateLimitMetadata { + /** + * Id of the guild members were requested for + */ + guild_id: Snowflake; + /** + * Nonce used to identify the {@link GatewayGuildMembersChunkDispatch} response + */ + nonce?: string; +} + // #endregion Dispatch Payloads // #region Sendable Payloads