/** * Types extracted from https://discord.com/developers/docs/topics/gateway */ import type { Snowflake } from '../globals'; import type { GatewayPresenceUpdate } from '../payloads/v9/gateway'; import type { APIApplication, APIApplicationCommandPermission, APIAutoModerationRule, APIAutoModerationAction, APIChannel, APIEmoji, APIGuild, APIGuildIntegration, APIGuildMember, APIGuildScheduledEvent, APIInteraction, APIMessage, APIRole, APIStageInstance, APISticker, APIThreadChannel, APIThreadMember, APIUnavailableGuild, APIUser, GatewayActivity, GatewayPresenceUpdate as RawGatewayPresenceUpdate, GatewayThreadListSync as RawGatewayThreadListSync, GatewayThreadMembersUpdate as RawGatewayThreadMembersUpdate, GatewayVoiceState, InviteTargetType, PresenceUpdateStatus, AutoModerationRuleTriggerType, APIAuditLogEntry, APIConnection, APIUserSettings, APIReadState, APIRelationship, } from '../payloads/v9/index'; import type { Nullable } from '../utils/internals'; export * from './common'; export const GatewayVersion = '9'; /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes */ export enum GatewayOpcodes { /** * An event was dispatched */ Dispatch, /** * A bidirectional opcode to maintain an active gateway connection. * Fired periodically by the client, or fired by the gateway to request an immediate heartbeat from the client. */ Heartbeat, /** * Starts a new session during the initial handshake */ Identify, /** * Update the client's presence */ PresenceUpdate, /** * Used to join/leave or move between voice channels */ VoiceStateUpdate, /** * Resume a previous session that was disconnected */ Resume = 6, /** * You should attempt to reconnect and resume immediately */ Reconnect, /** * Request information about offline guild members in a large guild */ RequestGuildMembers, /** * The session has been invalidated. You should reconnect and identify/resume accordingly */ InvalidSession, /** * Sent immediately after connecting, contains the `heartbeat_interval` to use */ Hello, /** * Sent in response to receiving a heartbeat to acknowledge that it has been received */ HeartbeatAck, GuildSync, LazyRequest = 14, } /** * https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-close-event-codes */ export enum GatewayCloseCodes { /** * We're not sure what went wrong. Try reconnecting? */ UnknownError = 4000, /** * You sent an invalid Gateway opcode or an invalid payload for an opcode. Don't do that! * * See https://discord.com/developers/docs/topics/gateway-events#payload-structure */ UnknownOpcode, /** * You sent an invalid payload to us. Don't do that! * * See https://discord.com/developers/docs/topics/gateway#sending-events */ DecodeError, /** * You sent us a payload prior to identifying * * See https://discord.com/developers/docs/topics/gateway-events#identify */ NotAuthenticated, /** * The account token sent with your identify payload is incorrect * * See https://discord.com/developers/docs/topics/gateway-events#identify */ AuthenticationFailed, /** * You sent more than one identify payload. Don't do that! */ AlreadyAuthenticated, /** * The sequence sent when resuming the session was invalid. Reconnect and start a new session * * See https://discord.com/developers/docs/topics/gateway-events#resume */ InvalidSeq = 4007, /** * Woah nelly! You're sending payloads to us too quickly. Slow it down! You will be disconnected on receiving this */ RateLimited, /** * Your session timed out. Reconnect and start a new one */ SessionTimedOut, /** * You sent us an invalid shard when identifying * * See https://discord.com/developers/docs/topics/gateway#sharding */ InvalidShard, /** * The session would have handled too many guilds - you are required to shard your connection in order to connect * * See https://discord.com/developers/docs/topics/gateway#sharding */ ShardingRequired, /** * You sent an invalid version for the gateway */ InvalidAPIVersion, /** * You sent an invalid intent for a Gateway Intent. You may have incorrectly calculated the bitwise value * * See https://discord.com/developers/docs/topics/gateway#gateway-intents */ InvalidIntents, /** * You sent a disallowed intent for a Gateway Intent. You may have tried to specify an intent that you have not * enabled or are not whitelisted for * * See https://discord.com/developers/docs/topics/gateway#gateway-intents * * See https://discord.com/developers/docs/topics/gateway#privileged-intents */ DisallowedIntents, } /** * https://discord.com/developers/docs/topics/gateway#list-of-intents */ export enum GatewayIntentBits { Guilds = 1 << 0, GuildMembers = 1 << 1, GuildModeration = 1 << 2, /** * @deprecated This is the old name for {@apilink GatewayIntentBits#GuildModeration} */ GuildBans = GuildModeration, GuildEmojisAndStickers = 1 << 3, GuildIntegrations = 1 << 4, GuildWebhooks = 1 << 5, GuildInvites = 1 << 6, GuildVoiceStates = 1 << 7, GuildPresences = 1 << 8, GuildMessages = 1 << 9, GuildMessageReactions = 1 << 10, GuildMessageTyping = 1 << 11, DirectMessages = 1 << 12, DirectMessageReactions = 1 << 13, DirectMessageTyping = 1 << 14, GuildScheduledEvents = 1 << 16, AutoModerationConfiguration = 1 << 20, AutoModerationExecution = 1 << 21, } /** * https://discord.com/developers/docs/topics/gateway-events#receive-events */ export enum GatewayDispatchEvents { ApplicationCommandPermissionsUpdate = 'APPLICATION_COMMAND_PERMISSIONS_UPDATE', ChannelCreate = 'CHANNEL_CREATE', ChannelDelete = 'CHANNEL_DELETE', ChannelPinsUpdate = 'CHANNEL_PINS_UPDATE', ChannelUpdate = 'CHANNEL_UPDATE', GuildBanAdd = 'GUILD_BAN_ADD', GuildBanRemove = 'GUILD_BAN_REMOVE', GuildCreate = 'GUILD_CREATE', GuildDelete = 'GUILD_DELETE', GuildEmojisUpdate = 'GUILD_EMOJIS_UPDATE', GuildIntegrationsUpdate = 'GUILD_INTEGRATIONS_UPDATE', GuildMemberAdd = 'GUILD_MEMBER_ADD', GuildMemberListUpdate = 'GUILD_MEMBER_LIST_UPDATE', GuildMemberRemove = 'GUILD_MEMBER_REMOVE', GuildMembersChunk = 'GUILD_MEMBERS_CHUNK', GuildMemberUpdate = 'GUILD_MEMBER_UPDATE', GuildRoleCreate = 'GUILD_ROLE_CREATE', GuildRoleDelete = 'GUILD_ROLE_DELETE', GuildRoleUpdate = 'GUILD_ROLE_UPDATE', GuildStickersUpdate = 'GUILD_STICKERS_UPDATE', GuildUpdate = 'GUILD_UPDATE', IntegrationCreate = 'INTEGRATION_CREATE', IntegrationDelete = 'INTEGRATION_DELETE', IntegrationUpdate = 'INTEGRATION_UPDATE', InteractionCreate = 'INTERACTION_CREATE', InviteCreate = 'INVITE_CREATE', InviteDelete = 'INVITE_DELETE', MessageCreate = 'MESSAGE_CREATE', MessageDelete = 'MESSAGE_DELETE', MessageDeleteBulk = 'MESSAGE_DELETE_BULK', MessageReactionAdd = 'MESSAGE_REACTION_ADD', MessageReactionRemove = 'MESSAGE_REACTION_REMOVE', MessageReactionRemoveAll = 'MESSAGE_REACTION_REMOVE_ALL', MessageReactionRemoveEmoji = 'MESSAGE_REACTION_REMOVE_EMOJI', MessageUpdate = 'MESSAGE_UPDATE', PresenceUpdate = 'PRESENCE_UPDATE', StageInstanceCreate = 'STAGE_INSTANCE_CREATE', StageInstanceDelete = 'STAGE_INSTANCE_DELETE', StageInstanceUpdate = 'STAGE_INSTANCE_UPDATE', Ready = 'READY', Resumed = 'RESUMED', ThreadCreate = 'THREAD_CREATE', ThreadDelete = 'THREAD_DELETE', ThreadListSync = 'THREAD_LIST_SYNC', ThreadMembersUpdate = 'THREAD_MEMBERS_UPDATE', ThreadMemberUpdate = 'THREAD_MEMBER_UPDATE', ThreadUpdate = 'THREAD_UPDATE', TypingStart = 'TYPING_START', UserUpdate = 'USER_UPDATE', VoiceServerUpdate = 'VOICE_SERVER_UPDATE', VoiceStateUpdate = 'VOICE_STATE_UPDATE', WebhooksUpdate = 'WEBHOOKS_UPDATE', GuildScheduledEventCreate = 'GUILD_SCHEDULED_EVENT_CREATE', GuildScheduledEventUpdate = 'GUILD_SCHEDULED_EVENT_UPDATE', GuildScheduledEventDelete = 'GUILD_SCHEDULED_EVENT_DELETE', GuildScheduledEventUserAdd = 'GUILD_SCHEDULED_EVENT_USER_ADD', GuildScheduledEventUserRemove = 'GUILD_SCHEDULED_EVENT_USER_REMOVE', AutoModerationRuleCreate = 'AUTO_MODERATION_RULE_CREATE', AutoModerationRuleUpdate = 'AUTO_MODERATION_RULE_UPDATE', AutoModerationRuleDelete = 'AUTO_MODERATION_RULE_DELETE', AutoModerationActionExecution = 'AUTO_MODERATION_ACTION_EXECUTION', GuildAuditLogEntryCreate = 'GUILD_AUDIT_LOG_ENTRY_CREATE', } export type GatewaySendPayload = | GatewayHeartbeat | GatewayIdentify | GatewayUpdatePresence | GatewayVoiceStateUpdate | GatewayResume | GatewayRequestGuildMembers | GatewayLazyRequest; export type GatewayReceivePayload = | GatewayHello | GatewayHeartbeatRequest | GatewayHeartbeatAck | GatewayInvalidSession | GatewayReconnect | GatewayDispatchPayload; export type GatewayDispatchPayload = | GatewayApplicationCommandPermissionsUpdateDispatch | GatewayAutoModerationRuleModifyDispatch | GatewayAutoModerationRuleCreateDispatch | GatewayAutoModerationRuleDeleteDispatch | GatewayAutoModerationActionExecutionDispatch | GatewayChannelModifyDispatch | GatewayChannelPinsUpdateDispatch | GatewayGuildBanModifyDispatch | GatewayGuildCreateDispatch | GatewayGuildDeleteDispatch | GatewayGuildEmojisUpdateDispatch | GatewayGuildIntegrationsUpdateDispatch | GatewayGuildMemberAddDispatch | GatewayGuildMemberListUpdateDispatch | GatewayGuildMemberRemoveDispatch | GatewayGuildMembersChunkDispatch | GatewayGuildMemberUpdateDispatch | GatewayGuildModifyDispatch | GatewayGuildRoleDeleteDispatch | GatewayGuildRoleModifyDispatch | GatewayGuildScheduledEventCreateDispatch | GatewayGuildScheduledEventUpdateDispatch | GatewayGuildScheduledEventDeleteDispatch | GatewayGuildScheduledEventUserAddDispatch | GatewayGuildScheduledEventUserRemoveDispatch | GatewayGuildStickersUpdateDispatch | GatewayIntegrationCreateDispatch | GatewayIntegrationDeleteDispatch | GatewayIntegrationUpdateDispatch | GatewayInteractionCreateDispatch | GatewayInviteCreateDispatch | GatewayInviteDeleteDispatch | GatewayMessageCreateDispatch | GatewayMessageDeleteBulkDispatch | GatewayMessageDeleteDispatch | GatewayMessageReactionAddDispatch | GatewayMessageReactionRemoveAllDispatch | GatewayMessageReactionRemoveDispatch | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch | GatewayStageInstanceCreateDispatch | GatewayStageInstanceDeleteDispatch | GatewayStageInstanceUpdateDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewayThreadListSyncDispatch | GatewayThreadMembersUpdateDispatch | GatewayThreadMemberUpdateDispatch | GatewayThreadModifyDispatch | GatewayTypingStartDispatch | GatewayUserUpdateDispatch | GatewayVoiceServerUpdateDispatch | GatewayVoiceStateUpdateDispatch | GatewayWebhooksUpdateDispatch | GatewayGuildAuditLogEntryCreateDispatch; export type GatewayGuildProperties = Pick< APIGuild, | 'name' | 'description' | 'icon' | 'splash' | 'banner' | 'features' | 'preferred_locale' | 'owner_id' | 'application_id' | 'afk_channel_id' | 'afk_timeout' | 'system_channel_id' | 'verification_level' | 'explicit_content_filter' | 'default_message_notifications' | 'mfa_level' | 'vanity_url_code' | 'premium_tier' | 'system_channel_flags' | 'discovery_splash' | 'rules_channel_id' | 'public_updates_channel_id' | 'max_video_channel_users' | 'max_members' | 'nsfw_level' | 'hub_type' >; export type GatewayGuild = Pick & { application_command_counts?: { 1: number; 2: number; 3: number }; // ???????????? data_mode: string; // known types are "partial" and "full" lazy: boolean; version: string; /** * When this guild was joined at * */ joined_at: string; /** * `true` if this is considered a large guild * */ large: boolean; /** * Total number of members in this guild * */ member_count: number; /** * Users in the guild * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ members: APIGuildMember[]; /** * Channels in the guild * * See https://discord.com/developers/docs/resources/channel#channel-object */ channels: APIChannel[]; /** * Threads in the guild * * See https://discord.com/developers/docs/resources/channel#channel-object */ threads: APIChannel[]; /** * Presences of the members in the guild, will only include non-offline members if the size is greater than `large_threshold` * * See https://discord.com/developers/docs/topics/gateway-events#presence-update */ presences: GatewayPresenceUpdate[]; /** * The stage instances in the guild * * See https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-stage-instance-structure */ stage_instances: APIStageInstance[]; /** * The scheduled events in the guild * * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object */ guild_scheduled_events: APIGuildScheduledEvent[]; properties: GatewayGuildProperties; }; // #region Dispatch Payloads /** * https://discord.com/developers/docs/topics/gateway-events#hello */ export interface GatewayHello extends NonDispatchPayload { op: GatewayOpcodes.Hello; d: GatewayHelloData; } /** * https://discord.com/developers/docs/topics/gateway-events#hello */ export interface GatewayHelloData { /** * The interval (in milliseconds) the client should heartbeat with */ heartbeat_interval: number; } /** * https://discord.com/developers/docs/topics/gateway#sending-heartbeats */ export interface GatewayHeartbeatRequest extends NonDispatchPayload { op: GatewayOpcodes.Heartbeat; d: never; } /** * https://discord.com/developers/docs/topics/gateway-events#heartbeat */ export interface GatewayHeartbeatAck extends NonDispatchPayload { op: GatewayOpcodes.HeartbeatAck; d: never; } /** * https://discord.com/developers/docs/topics/gateway-events#invalid-session */ export interface GatewayInvalidSession extends NonDispatchPayload { op: GatewayOpcodes.InvalidSession; d: GatewayInvalidSessionData; } /** * https://discord.com/developers/docs/topics/gateway-events#invalid-session */ export type GatewayInvalidSessionData = boolean; /** * https://discord.com/developers/docs/topics/gateway-events#reconnect */ export interface GatewayReconnect extends NonDispatchPayload { op: GatewayOpcodes.Reconnect; d: never; } /** * https://discord.com/developers/docs/topics/gateway-events#ready */ export type GatewayReadyDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#ready */ export interface GatewayReadyDispatchData { /** * Gateway version * * See https://discord.com/developers/docs/reference#api-versioning */ v: number; /** * Information about the user including email * * See https://discord.com/developers/docs/resources/user#user-object */ user: APIUser; /** * The private channels the user is in */ private_channels: APIChannel[]; /** * The guilds the user is in * * See https://discord.com/developers/docs/resources/guild#unavailable-guild-object */ guilds: GatewayGuild[]; analytics_token?: string; connected_accounts?: APIConnection[]; consents?: { personalization?: { consented?: boolean; }; }; country_code?: string; friend_suggestion_count?: number; geo_ordered_rtc_regions?: string[]; // ["europe","russie","india","us-east","us-central"] experiments?: [number, number, number, number, number][]; guild_experiments?: [ number, null, number, [ [ number, { e: number; s: number; }[], ], ], [number, [[number, [number, number]]]], { b: number; k: bigint[]; }[], ][]; guild_join_requests?: unknown[]; user_settings?: APIUserSettings; relationships?: APIRelationship[]; // TODO read_state: { entries: APIReadState[]; // TODO partial: boolean; version: number; }; user_guild_settings?: { entries: unknown[]; // TODO: types version: number; partial: boolean; }; merged_members?: APIGuildMember[][]; users?: APIUser[]; sessions: unknown[]; /** * Used for resuming connections */ session_id: string; /** * Gateway url for resuming connections */ resume_gateway_url: string; /** * The shard information associated with this session, if sent when identifying * * See https://discord.com/developers/docs/topics/gateway#sharding */ shard?: [shard_id: number, shard_count: number]; /** * Contains `id` and `flags` * * See https://discord.com/developers/docs/resources/application#application-object */ application: Pick; } /** * https://discord.com/developers/docs/topics/gateway-events#resumed */ export type GatewayResumedDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-create * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-update * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-delete */ export type GatewayAutoModerationRuleModifyDispatch = DataPayload< | GatewayDispatchEvents.AutoModerationRuleCreate | GatewayDispatchEvents.AutoModerationRuleUpdate | GatewayDispatchEvents.AutoModerationRuleDelete, GatewayAutoModerationRuleModifyDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-create * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-update * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-delete */ export type GatewayAutoModerationRuleModifyDispatchData = APIAutoModerationRule; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-create */ export type GatewayAutoModerationRuleCreateDispatch = GatewayAutoModerationRuleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-create */ export type GatewayAutoModerationRuleCreateDispatchData = GatewayAutoModerationRuleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-update */ export type GatewayAutoModerationRuleUpdateDispatch = GatewayAutoModerationRuleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-update */ export type GatewayAutoModerationRuleUpdateDispatchData = GatewayAutoModerationRuleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-delete */ export type GatewayAutoModerationRuleDeleteDispatch = GatewayAutoModerationRuleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-delete */ export type GatewayAutoModerationRuleDeleteDispatchData = GatewayAutoModerationRuleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-action-execution */ export type GatewayAutoModerationActionExecutionDispatch = DataPayload< GatewayDispatchEvents.AutoModerationActionExecution, GatewayAutoModerationActionExecutionDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#auto-moderation-action-execution */ export interface GatewayAutoModerationActionExecutionDispatchData { /** * The id of the guild in which action was executed */ guild_id: Snowflake; /** * The action which was executed */ action: APIAutoModerationAction; /** * The id of the rule which action belongs to */ rule_id: Snowflake; /** * The trigger type of rule which was triggered */ rule_trigger_type: AutoModerationRuleTriggerType; /** * The id of the user which generated the content which triggered the rule */ user_id: Snowflake; /** * The id of the channel in which user content was posted */ channel_id?: Snowflake; /** * The id of any user message which content belongs to * * This field will not be present if message was blocked by AutoMod or content was not part of any message */ message_id?: Snowflake; /** * The id of any system auto moderation messages posted as a result of this action * * This field will not be present if this event does not correspond to an action with type {@link AutoModerationActionType.SendAlertMessage} */ alert_system_message_id?: Snowflake; /** * The user generated text content * * `MESSAGE_CONTENT` (`1 << 15`) gateway intent is required to receive non-empty values from this field */ content: string; /** * The word or phrase configured in the rule that triggered the rule */ matched_keyword: string | null; /** * The substring in content that triggered the rule * * `MESSAGE_CONTENT` (`1 << 15`) gateway intent is required to receive non-empty values from this field */ matched_content: string | null; } /** * https://discord.com/developers/docs/topics/gateway-events#application-command-permissions-update */ export type GatewayApplicationCommandPermissionsUpdateDispatch = DataPayload< GatewayDispatchEvents.ApplicationCommandPermissionsUpdate, GatewayApplicationCommandPermissionsUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#application-command-permissions-update */ export interface GatewayApplicationCommandPermissionsUpdateDispatchData { /** * ID of the command or the application ID */ id: Snowflake; /** * ID of the application the command belongs to */ application_id: Snowflake; /** * ID of the guild */ guild_id: Snowflake; /** * Permissions for the command in the guild, max of 100 */ permissions: APIApplicationCommandPermission[]; } /** * https://discord.com/developers/docs/topics/gateway-events#channel-create * https://discord.com/developers/docs/topics/gateway-events#channel-update * https://discord.com/developers/docs/topics/gateway-events#channel-delete */ export type GatewayChannelModifyDispatch = DataPayload< GatewayDispatchEvents.ChannelCreate | GatewayDispatchEvents.ChannelDelete | GatewayDispatchEvents.ChannelUpdate, GatewayChannelModifyDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#channel-create * https://discord.com/developers/docs/topics/gateway-events#channel-update * https://discord.com/developers/docs/topics/gateway-events#channel-delete */ export type GatewayChannelModifyDispatchData = APIChannel; /** * https://discord.com/developers/docs/topics/gateway-events#channel-create */ export type GatewayChannelCreateDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#channel-create */ export type GatewayChannelCreateDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#channel-update */ export type GatewayChannelUpdateDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#channel-update */ export type GatewayChannelUpdateDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#channel-delete */ export type GatewayChannelDeleteDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#channel-delete */ export type GatewayChannelDeleteDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#channel-pins-update */ export type GatewayChannelPinsUpdateDispatch = DataPayload< GatewayDispatchEvents.ChannelPinsUpdate, GatewayChannelPinsUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#channel-pins-update */ export interface GatewayChannelPinsUpdateDispatchData { /** * The id of the guild */ guild_id?: Snowflake; /** * The id of the channel */ channel_id: Snowflake; /** * The time at which the most recent pinned message was pinned */ last_pin_timestamp?: string | null; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-update */ export type GatewayGuildModifyDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#guild-update */ export type GatewayGuildModifyDispatchData = APIGuild; /** * https://discord.com/developers/docs/topics/gateway-events#guild-create */ export type GatewayGuildCreateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#guild-create * https://discord.com/developers/docs/topics/gateway-events#guild-create-guild-create-extra-fields */ export interface GatewayGuildCreateDispatchData { /** * When this guild was joined at * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** */ joined_at: string; /** * Total number of members in this guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** */ member_count: number; /** * Users in the guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ members: APIGuildMember[]; /** * Channels in the guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * See https://discord.com/developers/docs/resources/channel#channel-object */ channels: APIChannel[]; /** * Threads in the guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * See https://discord.com/developers/docs/resources/channel#channel-object */ threads: APIChannel[]; /** * Presences of the members in the guild, will only include non-offline members if the size is greater than `large_threshold` * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * See https://discord.com/developers/docs/topics/gateway-events#presence-update */ presences: GatewayPresenceUpdate[]; /** * The stage instances in the guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * See https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-stage-instance-structure */ stage_instances: APIStageInstance[]; /** * The scheduled events in the guild * * **This field is only sent within the [GUILD_CREATE](https://discord.com/developers/docs/topics/gateway-events#guild-create) event** * * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object */ guild_scheduled_events: APIGuildScheduledEvent[]; guild_hashes: unknown; properties: GatewayGuildProperties; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-update */ export type GatewayGuildUpdateDispatch = GatewayGuildModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#guild-update */ export type GatewayGuildUpdateDispatchData = GatewayGuildModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#guild-delete */ export type GatewayGuildDeleteDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#guild-delete */ export type GatewayGuildDeleteDispatchData = APIUnavailableGuild; /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-add * https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove */ export type GatewayGuildBanModifyDispatch = DataPayload< GatewayDispatchEvents.GuildBanAdd | GatewayDispatchEvents.GuildBanRemove, GatewayGuildBanModifyDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-add * https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove */ export interface GatewayGuildBanModifyDispatchData { /** * ID of the guild */ guild_id: Snowflake; /** * The banned user * * See https://discord.com/developers/docs/resources/user#user-object */ user: APIUser; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-add */ export type GatewayGuildBanAddDispatch = GatewayGuildBanModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-add */ export type GatewayGuildBanAddDispatchData = GatewayGuildBanModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove */ export type GatewayGuildBanRemoveDispatch = GatewayGuildBanModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove */ export type GatewayGuildBanRemoveDispatchData = GatewayGuildBanModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#guild-emojis-update */ export type GatewayGuildEmojisUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildEmojisUpdate, GatewayGuildEmojisUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-emojis-update */ export interface GatewayGuildEmojisUpdateDispatchData { /** * ID of the guild */ guild_id: Snowflake; /** * Array of emojis * * See https://discord.com/developers/docs/resources/emoji#emoji-object */ emojis: APIEmoji[]; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-stickers-update */ export type GatewayGuildStickersUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildStickersUpdate, GatewayGuildStickersUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-stickers-update */ export interface GatewayGuildStickersUpdateDispatchData { /** * ID of the guild */ guild_id: Snowflake; /** * Array of stickers * * See https://discord.com/developers/docs/resources/sticker#sticker-object */ stickers: APISticker[]; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-integrations-update */ export type GatewayGuildIntegrationsUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildIntegrationsUpdate, GatewayGuildIntegrationsUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-integrations-update */ export interface GatewayGuildIntegrationsUpdateDispatchData { /** * ID of the guild whose integrations were updated */ guild_id: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-add */ export type GatewayGuildMemberAddDispatch = DataPayload< GatewayDispatchEvents.GuildMemberAdd, GatewayGuildMemberAddDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-add */ export interface GatewayGuildMemberAddDispatchData extends APIGuildMember { /** * The id of the guild */ guild_id: Snowflake; } export type GatewayGuildMemberListUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildMemberListUpdate, GatewayGuildMemberListUpdateDispatchData >; export enum GatewayGuildMemberListUpdateOperation { SYNC = 'SYNC', INVALIDATE = 'INVALIDATE', INSERT = 'INSERT', DELETE = 'DELETE', UPDATE = 'UPDATE', } export interface GatewayGuildMemberListUpdateGroup { count: number; id: string; } export interface GatewayGuildMemberListUpdateMember extends APIGuildMember { index: number; id: Snowflake; guild_id: Snowflake; presence: { id: Snowflake; user_id: Snowflake; user: { id: Snowflake }; activities: GatewayActivity[]; status: PresenceUpdateStatus; }; } export interface GatewayGuildMemberListUpdateDispatchData { groups: GatewayGuildMemberListUpdateGroup[]; guild_id: Snowflake; id: string; member_count: number; online_count: number; ops: { op: keyof typeof GatewayGuildMemberListUpdateOperation; range: number[]; items: ({ group: GatewayGuildMemberListUpdateGroup } | { member: GatewayGuildMemberListUpdateMember })[]; index: number; item: { group: GatewayGuildMemberListUpdateGroup } | { member: GatewayGuildMemberListUpdateMember }; }[]; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-remove */ export type GatewayGuildMemberRemoveDispatch = DataPayload< GatewayDispatchEvents.GuildMemberRemove, GatewayGuildMemberRemoveDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-remove */ export interface GatewayGuildMemberRemoveDispatchData { /** * The id of the guild */ guild_id: Snowflake; /** * The user who was removed * * See https://discord.com/developers/docs/resources/user#user-object */ user: APIUser; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-update */ export type GatewayGuildMemberUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildMemberUpdate, GatewayGuildMemberUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-member-update */ export type GatewayGuildMemberUpdateDispatchData = Omit & Partial> & Required> & Nullable> & { /** * The id of the guild */ guild_id: Snowflake; }; /** * https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk */ export type GatewayGuildMembersChunkDispatch = DataPayload< GatewayDispatchEvents.GuildMembersChunk, GatewayGuildMembersChunkDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk */ export interface GatewayGuildMembersChunkDispatchData { /** * The id of the guild */ guild_id: Snowflake; /** * Set of guild members * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ members: APIGuildMember[]; /** * The chunk index in the expected chunks for this response (`0 <= chunk_index < chunk_count`) */ chunk_index: number; /** * The total number of expected chunks for this response */ chunk_count: number; /** * If passing an invalid id to `REQUEST_GUILD_MEMBERS`, it will be returned here */ not_found?: unknown[]; /** * If passing true to `REQUEST_GUILD_MEMBERS`, presences of the returned members will be here * * See https://discord.com/developers/docs/topics/gateway-events#update-presence */ presences?: RawGatewayPresenceUpdate[]; /** * The nonce used in the Guild Members Request * * See https://discord.com/developers/docs/topics/gateway-events#request-guild-members */ nonce?: string; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-create * https://discord.com/developers/docs/topics/gateway-events#guild-role-update */ export type GatewayGuildRoleModifyDispatch = DataPayload< GatewayDispatchEvents.GuildRoleCreate | GatewayDispatchEvents.GuildRoleUpdate, GatewayGuildRoleModifyDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-create * https://discord.com/developers/docs/topics/gateway-events#guild-role-update */ export interface GatewayGuildRoleModifyDispatchData { /** * The id of the guild */ guild_id: Snowflake; /** * The role created or updated * * See https://discord.com/developers/docs/topics/permissions#role-object */ role: APIRole; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-create */ export type GatewayGuildRoleCreateDispatch = GatewayGuildRoleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-create */ export type GatewayGuildRoleCreateDispatchData = GatewayGuildRoleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-update */ export type GatewayGuildRoleUpdateDispatch = GatewayGuildRoleModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-update */ export type GatewayGuildRoleUpdateDispatchData = GatewayGuildRoleModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-delete */ export type GatewayGuildRoleDeleteDispatch = DataPayload< GatewayDispatchEvents.GuildRoleDelete, GatewayGuildRoleDeleteDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-role-delete */ export interface GatewayGuildRoleDeleteDispatchData { /** * The id of the guild */ guild_id: Snowflake; /** * The id of the role */ role_id: Snowflake; } export type GatewayGuildScheduledEventCreateDispatch = DataPayload< GatewayDispatchEvents.GuildScheduledEventCreate, GatewayGuildScheduledEventCreateDispatchData >; export type GatewayGuildScheduledEventCreateDispatchData = APIGuildScheduledEvent; export type GatewayGuildScheduledEventUpdateDispatch = DataPayload< GatewayDispatchEvents.GuildScheduledEventUpdate, GatewayGuildScheduledEventUpdateDispatchData >; export type GatewayGuildScheduledEventUpdateDispatchData = APIGuildScheduledEvent; export type GatewayGuildScheduledEventDeleteDispatch = DataPayload< GatewayDispatchEvents.GuildScheduledEventDelete, GatewayGuildScheduledEventDeleteDispatchData >; export type GatewayGuildScheduledEventDeleteDispatchData = APIGuildScheduledEvent; export type GatewayGuildScheduledEventUserAddDispatch = DataPayload< GatewayDispatchEvents.GuildScheduledEventUserAdd, GatewayGuildScheduledEventUserAddDispatchData >; export interface GatewayGuildScheduledEventUserAddDispatchData { guild_scheduled_event_id: Snowflake; user_id: Snowflake; guild_id: Snowflake; } export type GatewayGuildScheduledEventUserRemoveDispatch = DataPayload< GatewayDispatchEvents.GuildScheduledEventUserRemove, GatewayGuildScheduledEventUserAddDispatchData >; export interface GatewayGuildScheduledEventUserRemoveDispatchData { guild_scheduled_event_id: Snowflake; user_id: Snowflake; guild_id: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#integration-create */ export type GatewayIntegrationCreateDispatch = DataPayload< GatewayDispatchEvents.IntegrationCreate, GatewayIntegrationCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#integration-create */ export type GatewayIntegrationCreateDispatchData = APIGuildIntegration & { guild_id: Snowflake }; /** * https://discord.com/developers/docs/topics/gateway-events#integration-update */ export type GatewayIntegrationUpdateDispatch = DataPayload< GatewayDispatchEvents.IntegrationUpdate, GatewayIntegrationUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#integration-update */ export type GatewayIntegrationUpdateDispatchData = APIGuildIntegration & { guild_id: Snowflake }; /** * https://discord.com/developers/docs/topics/gateway-events#integration-update */ export type GatewayIntegrationDeleteDispatch = DataPayload< GatewayDispatchEvents.IntegrationDelete, GatewayIntegrationDeleteDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#integration-delete */ export interface GatewayIntegrationDeleteDispatchData { /** * Integration id */ id: Snowflake; /** * ID of the guild */ guild_id: Snowflake; /** * ID of the bot/OAuth2 application for this Discord integration */ application_id?: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#interaction-create */ export type GatewayInteractionCreateDispatch = DataPayload< GatewayDispatchEvents.InteractionCreate, GatewayInteractionCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#interaction-create */ export type GatewayInteractionCreateDispatchData = APIInteraction; /** * https://discord.com/developers/docs/topics/gateway-events#invite-create */ export type GatewayInviteCreateDispatch = DataPayload< GatewayDispatchEvents.InviteCreate, GatewayInviteCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#invite-create */ export interface GatewayInviteCreateDispatchData { /** * The channel the invite is for */ channel_id: Snowflake; /** * The unique invite code * * See https://discord.com/developers/docs/resources/invite#invite-object */ code: string; /** * The time at which the invite was created */ created_at: number; /** * The guild of the invite */ guild_id?: Snowflake; /** * The user that created the invite * * See https://discord.com/developers/docs/resources/user#user-object */ inviter?: APIUser; /** * How long the invite is valid for (in seconds) */ max_age: number; /** * The maximum number of times the invite can be used */ max_uses: number; /** * The type of target for this voice channel invite * * See https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types */ target_type?: InviteTargetType; /** * The user whose stream to display for this voice channel stream invite * * See https://discord.com/developers/docs/resources/user#user-object */ target_user?: APIUser; /** * The embedded application to open for this voice channel embedded application invite */ target_application?: Partial; /** * Whether or not the invite is temporary (invited users will be kicked on disconnect unless they're assigned a role) */ temporary: boolean; /** * How many times the invite has been used (always will be `0`) */ uses: 0; } /** * https://discord.com/developers/docs/topics/gateway-events#invite-delete */ export type GatewayInviteDeleteDispatch = DataPayload< GatewayDispatchEvents.InviteDelete, GatewayInviteDeleteDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#invite-delete */ export interface GatewayInviteDeleteDispatchData { /** * The channel of the invite */ channel_id: Snowflake; /** * The guild of the invite */ guild_id?: Snowflake; /** * The unique invite code * * See https://discord.com/developers/docs/resources/invite#invite-object */ code: string; } /** * https://discord.com/developers/docs/topics/gateway-events#message-create */ export type GatewayMessageCreateDispatch = DataPayload< GatewayDispatchEvents.MessageCreate, GatewayMessageCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-create */ export type GatewayMessageCreateDispatchData = Omit & GatewayMessageEventExtraFields; /** * https://discord.com/developers/docs/topics/gateway-events#message-update */ export type GatewayMessageUpdateDispatch = DataPayload< GatewayDispatchEvents.MessageUpdate, GatewayMessageUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-update */ export type GatewayMessageUpdateDispatchData = Omit, 'mentions'> & GatewayMessageEventExtraFields & { /** * ID of the message */ id: Snowflake; /** * ID of the channel the message was sent in */ channel_id: Snowflake; }; export interface GatewayMessageEventExtraFields { /** * ID of the guild the message was sent in */ guild_id?: Snowflake; /** * Member properties for this message's author * * The member object exists in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events * from text-based guild channels * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ member?: APIGuildMember; /** * Users specifically mentioned in the message * * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events * from text-based guild channels * * See https://discord.com/developers/docs/resources/user#user-object * See https://discord.com/developers/docs/resources/guild#guild-member-object */ mentions: (APIUser & { member?: Omit })[]; } /** * https://discord.com/developers/docs/topics/gateway-events#message-delete */ export type GatewayMessageDeleteDispatch = DataPayload< GatewayDispatchEvents.MessageDelete, GatewayMessageDeleteDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-delete */ export interface GatewayMessageDeleteDispatchData { /** * The id of the message */ id: Snowflake; /** * The id of the channel */ channel_id: Snowflake; /** * The id of the guild */ guild_id?: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#message-delete-bulk */ export type GatewayMessageDeleteBulkDispatch = DataPayload< GatewayDispatchEvents.MessageDeleteBulk, GatewayMessageDeleteBulkDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-delete-bulk */ export interface GatewayMessageDeleteBulkDispatchData { /** * The ids of the messages */ ids: Snowflake[]; /** * The id of the channel */ channel_id: Snowflake; /** * The id of the guild */ guild_id?: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-add */ export type GatewayMessageReactionAddDispatch = ReactionData; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-add */ export type GatewayMessageReactionAddDispatchData = GatewayMessageReactionAddDispatch['d']; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove */ export type GatewayMessageReactionRemoveDispatch = ReactionData; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove */ export type GatewayMessageReactionRemoveDispatchData = GatewayMessageReactionRemoveDispatch['d']; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-all */ export type GatewayMessageReactionRemoveAllDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveAll, GatewayMessageReactionRemoveAllDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-all */ export type GatewayMessageReactionRemoveAllDispatchData = MessageReactionRemoveData; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-emoji */ export type GatewayMessageReactionRemoveEmojiDispatch = DataPayload< GatewayDispatchEvents.MessageReactionRemoveEmoji, GatewayMessageReactionRemoveEmojiDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-emoji */ export interface GatewayMessageReactionRemoveEmojiDispatchData extends MessageReactionRemoveData { /** * The emoji that was removed */ emoji: APIEmoji; } /** * https://discord.com/developers/docs/topics/gateway-events#presence-update */ export type GatewayPresenceUpdateDispatch = DataPayload< GatewayDispatchEvents.PresenceUpdate, GatewayPresenceUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#presence-update */ export type GatewayPresenceUpdateDispatchData = RawGatewayPresenceUpdate; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-create */ export type GatewayStageInstanceCreateDispatch = DataPayload< GatewayDispatchEvents.StageInstanceCreate, GatewayStageInstanceCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-create */ export type GatewayStageInstanceCreateDispatchData = APIStageInstance; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-delete */ export type GatewayStageInstanceDeleteDispatch = DataPayload< GatewayDispatchEvents.StageInstanceDelete, GatewayStageInstanceDeleteDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-delete */ export type GatewayStageInstanceDeleteDispatchData = APIStageInstance; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-update */ export type GatewayStageInstanceUpdateDispatch = DataPayload< GatewayDispatchEvents.StageInstanceUpdate, GatewayStageInstanceUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#stage-instance-update */ export type GatewayStageInstanceUpdateDispatchData = APIStageInstance; /** * https://discord.com/developers/docs/topics/gateway-events#thread-list-sync */ export type GatewayThreadListSyncDispatch = DataPayload< GatewayDispatchEvents.ThreadListSync, GatewayThreadListSyncDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#thread-list-sync */ export type GatewayThreadListSyncDispatchData = RawGatewayThreadListSync; /** * https://discord.com/developers/docs/topics/gateway-events#thread-members-update */ export type GatewayThreadMembersUpdateDispatch = DataPayload< GatewayDispatchEvents.ThreadMembersUpdate, GatewayThreadMembersUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#thread-members-update */ export type GatewayThreadMembersUpdateDispatchData = RawGatewayThreadMembersUpdate; /** * https://discord.com/developers/docs/topics/gateway-events#thread-member-update */ export type GatewayThreadMemberUpdateDispatch = DataPayload< GatewayDispatchEvents.ThreadMemberUpdate, GatewayThreadMemberUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#thread-member-update */ export type GatewayThreadMemberUpdateDispatchData = APIThreadMember & { guild_id: Snowflake }; /** * https://discord.com/developers/docs/topics/gateway-events#thread-create * https://discord.com/developers/docs/topics/gateway-events#thread-update * https://discord.com/developers/docs/topics/gateway-events#thread-delete */ export type GatewayThreadModifyDispatch = DataPayload< GatewayDispatchEvents.ThreadCreate | GatewayDispatchEvents.ThreadDelete | GatewayDispatchEvents.ThreadUpdate, GatewayChannelModifyDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#thread-create */ export type GatewayThreadCreateDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#thread-create */ export interface GatewayThreadCreateDispatchData extends APIThreadChannel { /** * Whether the thread is newly created or not. */ newly_created?: true; } /** * https://discord.com/developers/docs/topics/gateway-events#thread-update */ export type GatewayThreadUpdateDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#thread-update */ export type GatewayThreadUpdateDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#thread-delete */ export type GatewayThreadDeleteDispatch = GatewayChannelModifyDispatch; /** * https://discord.com/developers/docs/topics/gateway-events#thread-delete */ export type GatewayThreadDeleteDispatchData = GatewayChannelModifyDispatchData; /** * https://discord.com/developers/docs/topics/gateway-events#typing-start */ export type GatewayTypingStartDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#typing-start */ export interface GatewayTypingStartDispatchData { /** * The id of the channel */ channel_id: Snowflake; /** * The id of the guild */ guild_id?: Snowflake; /** * The id of the user */ user_id: Snowflake; /** * Unix time (in seconds) of when the user started typing */ timestamp: number; /** * The member who started typing if this happened in a guild * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ member?: APIGuildMember; } /** * https://discord.com/developers/docs/topics/gateway-events#user-update */ export type GatewayUserUpdateDispatch = DataPayload; /** * https://discord.com/developers/docs/topics/gateway-events#user-update */ export type GatewayUserUpdateDispatchData = APIUser; /** * https://discord.com/developers/docs/topics/gateway-events#voice-state-update */ export type GatewayVoiceStateUpdateDispatch = DataPayload< GatewayDispatchEvents.VoiceStateUpdate, GatewayVoiceStateUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#voice-state-update */ export type GatewayVoiceStateUpdateDispatchData = GatewayVoiceState; /** * https://discord.com/developers/docs/topics/gateway-events#voice-server-update */ export type GatewayVoiceServerUpdateDispatch = DataPayload< GatewayDispatchEvents.VoiceServerUpdate, GatewayVoiceServerUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#voice-server-update */ export interface GatewayVoiceServerUpdateDispatchData { /** * Voice connection token */ token: string; /** * The guild this voice server update is for */ guild_id: Snowflake; /** * The voice server host * * A `null` endpoint means that the voice server allocated has gone away and is trying to be reallocated. * You should attempt to disconnect from the currently connected voice server, and not attempt to reconnect * until a new voice server is allocated */ endpoint: string | null; } /** * https://discord.com/developers/docs/topics/gateway-events#webhooks-update */ export type GatewayWebhooksUpdateDispatch = DataPayload< GatewayDispatchEvents.WebhooksUpdate, GatewayWebhooksUpdateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#webhooks-update */ export interface GatewayWebhooksUpdateDispatchData { /** * The id of the guild */ guild_id: Snowflake; /** * The id of the channel */ channel_id: Snowflake; } /** * https://discord.com/developers/docs/topics/gateway-events#guild-audit-log-entry-create */ export type GatewayGuildAuditLogEntryCreateDispatch = DataPayload< GatewayDispatchEvents.GuildAuditLogEntryCreate, GatewayGuildAuditLogEntryCreateDispatchData >; /** * https://discord.com/developers/docs/topics/gateway-events#guild-audit-log-entry-create */ export interface GatewayGuildAuditLogEntryCreateDispatchData extends APIAuditLogEntry { /** * ID of the guild */ guild_id: Snowflake; } // #endregion Dispatch Payloads // #region Sendable Payloads /** * https://discord.com/developers/docs/topics/gateway#sending-heartbeats */ export interface GatewayHeartbeat { op: GatewayOpcodes.Heartbeat; d: GatewayHeartbeatData; } /** * https://discord.com/developers/docs/topics/gateway#sending-heartbeats */ export type GatewayHeartbeatData = number | null; /** * https://discord.com/developers/docs/topics/gateway-events#identify */ export interface GatewayIdentify { op: GatewayOpcodes.Identify; d: GatewayIdentifyData; } /** * https://discord.com/developers/docs/topics/gateway-events#identify */ export interface GatewayIdentifyData { /** * Authentication token */ token: string; /** * Connection properties * * See https://discord.com/developers/docs/topics/gateway-events#identify-identify-connection-properties */ properties: GatewayIdentifyProperties; /** * Whether this connection supports compression of packets * * @default false */ compress?: boolean; /** * Value between 50 and 250, total number of members where the gateway will stop sending * offline members in the guild member list * * @default 50 */ large_threshold?: number; largeThreshold?: number; /** * Used for Guild Sharding * * See https://discord.com/developers/docs/topics/gateway#sharding */ shard?: [shard_id: number, shard_count: number]; /** * Presence structure for initial presence information * * See https://discord.com/developers/docs/topics/gateway-events#update-presence */ presence?: GatewayPresenceUpdateData; /** * The Gateway Intents you wish to receive * * See https://discord.com/developers/docs/topics/gateway#gateway-intents */ intents?: number; guild_subscriptions?: boolean; capabilities?: number; client_state?: { guild_hashes?: unknown; highest_last_message_id?: string | number; read_state_version?: number; user_guild_settings_version?: number; user_settings_version?: number; useruser_guild_settings_version?: number; private_channels_version?: number; guild_versions?: unknown; api_code_version?: number; }; clientState?: { guildHashes?: unknown; highestLastMessageId?: string | number; readStateVersion?: number; userGuildSettingsVersion?: number; useruserGuildSettingsVersion?: number; guildVersions?: unknown; apiCodeVersion?: number; }; } /** * https://discord.com/developers/docs/topics/gateway-events#identify-identify-connection-properties */ export interface GatewayIdentifyProperties { os?: string; os_atch?: string; browser?: string; device?: string; $os?: string; $browser?: string; $device?: string; browser_user_agent?: string; browser_version?: string; os_version?: string; referrer?: string; referring_domain?: string; referrer_current?: string; referring_domain_current?: string; release_channel?: 'stable' | 'dev' | 'ptb' | 'canary'; client_build_number?: number; client_event_source?: string; client_version?: string; system_locale?: string; } /** * https://discord.com/developers/docs/topics/gateway-events#resume */ export interface GatewayResume { op: GatewayOpcodes.Resume; d: GatewayResumeData; } /** * https://discord.com/developers/docs/topics/gateway-events#resume */ export interface GatewayResumeData { /** * Session token */ token: string; /** * Session id */ session_id: string; /** * Last sequence number received */ seq: number; } /** * https://discord.com/developers/docs/topics/gateway-events#request-guild-members */ export interface GatewayRequestGuildMembers { op: GatewayOpcodes.RequestGuildMembers; d: GatewayRequestGuildMembersData; } export interface GatewayRequestGuildMembersDataBase { /** * ID of the guild to get members for */ guild_id: Snowflake; /** * Used to specify if we want the presences of the matched members */ presences?: boolean; /** * Nonce to identify the Guild Members Chunk response * * Nonce can only be up to 32 bytes. If you send an invalid nonce it will be ignored and the reply member_chunk(s) will not have a `nonce` set. * * See https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk */ nonce?: string; } export interface GatewayLazyRequest { op: GatewayOpcodes.LazyRequest; d: GatewayLazyRequestData; } export interface GatewayLazyRequestData { guild_id: string; channels?: Record; activities?: boolean; threads?: boolean; typing?: boolean; members?: string[]; thread_member_lists?: unknown[]; } export interface GatewayRequestGuildMembersDataWithUserIds extends GatewayRequestGuildMembersDataBase { /** * Used to specify which users you wish to fetch */ user_ids: Snowflake | Snowflake[]; } export interface GatewayRequestGuildMembersDataWithQuery extends GatewayRequestGuildMembersDataBase { /** * String that username starts with, or an empty string to return all members */ query: string; /** * Maximum number of members to send matching the `query`; * a limit of `0` can be used with an empty string `query` to return all members */ limit: number; } /** * https://discord.com/developers/docs/topics/gateway-events#request-guild-members */ export type GatewayRequestGuildMembersData = | GatewayRequestGuildMembersDataWithUserIds | GatewayRequestGuildMembersDataWithQuery; /** * https://discord.com/developers/docs/topics/gateway-events#update-voice-state */ export interface GatewayVoiceStateUpdate { op: GatewayOpcodes.VoiceStateUpdate; d: GatewayVoiceStateUpdateData; } /** * https://discord.com/developers/docs/topics/gateway-events#update-voice-state */ export interface GatewayVoiceStateUpdateData { /** * ID of the guild */ guild_id: Snowflake; /** * ID of the voice channel client wants to join (`null` if disconnecting) */ channel_id: Snowflake | null; /** * Is the client muted */ self_mute: boolean; /** * Is the client deafened */ self_deaf: boolean; } /** * https://discord.com/developers/docs/topics/gateway-events#update-presence */ export interface GatewayUpdatePresence { op: GatewayOpcodes.PresenceUpdate; d: GatewayPresenceUpdateData; } /** * https://discord.com/developers/docs/topics/gateway-events#update-presence-gateway-presence-update-structure */ export interface GatewayPresenceUpdateData { /** * Unix time (in milliseconds) of when the client went idle, or `null` if the client is not idle */ since: number | null; /** * The user's activities * * See https://discord.com/developers/docs/topics/gateway-events#activity-object */ activities: GatewayActivityUpdateData[]; /** * The user's new status * * See https://discord.com/developers/docs/topics/gateway-events#update-presence-status-types */ status: PresenceUpdateStatus; /** * Whether or not the client is afk */ afk: boolean; } /** * https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-structure */ export type GatewayActivityUpdateData = Pick; // #endregion Sendable Payloads // #region Shared interface BasePayload { /** * Opcode for the payload */ op: GatewayOpcodes; /** * Event data */ d?: unknown; /** * Sequence number, used for resuming sessions and heartbeats */ s: number; /** * The event name for this payload */ t?: string; } type NonDispatchPayload = Omit & { t: null; s: null; }; interface DataPayload extends BasePayload { op: GatewayOpcodes.Dispatch; t: Event; d: D; } type ReactionData = DataPayload< E, Omit< { /** * The id of the user */ user_id: Snowflake; /** * The id of the channel */ channel_id: Snowflake; /** * The id of the message */ message_id: Snowflake; /** * The id of the guild */ guild_id?: Snowflake; /** * The member who reacted if this happened in a guild * * See https://discord.com/developers/docs/resources/guild#guild-member-object */ member?: APIGuildMember; /** * The emoji used to react * * See https://discord.com/developers/docs/resources/emoji#emoji-object */ emoji: APIEmoji; }, O > >; interface MessageReactionRemoveData { /** * The id of the channel */ channel_id: Snowflake; /** * The id of the message */ message_id: Snowflake; /** * The id of the guild */ guild_id?: Snowflake; } // #endregion Shared