valkyrie-api-types/gateway/v9.ts
2024-09-12 19:14:45 +12:00

2262 lines
62 KiB
TypeScript

/**
* 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<APIGuild, 'emojis' | 'id' | 'premium_subscription_count' | 'roles' | 'stickers'> & {
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<GatewayDispatchEvents.Ready, GatewayReadyDispatchData>;
/**
* 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<APIApplication, 'id' | 'flags'>;
}
/**
* https://discord.com/developers/docs/topics/gateway-events#resumed
*/
export type GatewayResumedDispatch = DataPayload<GatewayDispatchEvents.Resumed, never>;
/**
* 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<GatewayDispatchEvents.GuildUpdate, GatewayGuildModifyDispatchData>;
/**
* 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<GatewayDispatchEvents.GuildCreate, GatewayGuildCreateDispatchData>;
/**
* 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<GatewayDispatchEvents.GuildDelete, GatewayGuildDeleteDispatchData>;
/**
* 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<APIGuildMember, 'deaf' | 'mute' | 'user' | 'joined_at'> &
Partial<Pick<APIGuildMember, 'deaf' | 'mute'>> &
Required<Pick<APIGuildMember, 'user'>> &
Nullable<Pick<APIGuildMember, 'joined_at'>> & {
/**
* 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<APIApplication>;
/**
* 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<APIMessage, 'mentions'> & 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<Partial<APIMessage>, '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<APIGuildMember, 'user'> })[];
}
/**
* 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<GatewayDispatchEvents.MessageReactionAdd>;
/**
* 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<GatewayDispatchEvents.MessageReactionRemove, 'member'>;
/**
* 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<GatewayDispatchEvents.TypingStart, GatewayTypingStartDispatchData>;
/**
* 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<GatewayDispatchEvents.UserUpdate, GatewayUserUpdateDispatchData>;
/**
* 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<string, [number, number][]>;
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<GatewayActivity, 'name' | 'type' | 'url'>;
// #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<BasePayload, 't' | 's'> & {
t: null;
s: null;
};
interface DataPayload<Event extends GatewayDispatchEvents, D = unknown> extends BasePayload {
op: GatewayOpcodes.Dispatch;
t: Event;
d: D;
}
type ReactionData<E extends GatewayDispatchEvents, O extends string = never> = 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