refactor progress

This commit is contained in:
Hampus Kraft
2026-02-17 12:22:36 +00:00
parent cb31608523
commit d5abd1a7e4
8257 changed files with 1190207 additions and 761040 deletions

View File

@@ -0,0 +1,25 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "AUTH_SESSION_CHANGE",
"description": "Authentication session has changed. Sent when the user's token is rotated due to a security-sensitive operation like password change.",
"scope": "presence",
"dispatchedBy": ["PATCH /users/@me (when password is changed)"],
"payload": {
"type": "object",
"properties": {
"old_auth_session_id_hash": {
"type": "string",
"description": "Base64url-encoded hash of the old session ID"
},
"new_auth_session_id_hash": {
"type": "string",
"description": "Base64url-encoded hash of the new session ID"
},
"new_token": {
"type": "string",
"description": "The new authentication token"
}
},
"required": ["old_auth_session_id_hash", "new_auth_session_id_hash", "new_token"]
}
}

View File

@@ -0,0 +1,36 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CALL_CREATE",
"description": "Sent when a DM or group DM call is started.",
"scope": "presence",
"dispatchedBy": ["gateway"],
"note": "Dispatched to all recipients of the DM/group DM when a call is initiated",
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID of the call"
},
"message_id": {
"type": "string",
"description": "ID of the call message"
},
"region": {
"type": ["string", "null"],
"description": "Voice region for the call"
},
"ringing": {
"type": "array",
"items": {"type": "string"},
"description": "Array of user IDs currently being rung"
},
"voice_states": {
"type": "array",
"items": {"$ref": "VoiceStateResponse"},
"description": "Voice states of current participants in the call"
}
},
"required": ["channel_id", "message_id", "ringing", "voice_states"]
}
}

View File

@@ -0,0 +1,18 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CALL_DELETE",
"description": "Sent when a DM or group DM call ends.",
"scope": "presence",
"dispatchedBy": ["gateway"],
"note": "Dispatched to all recipients when the call terminates (all participants leave or timeout)",
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID of the ended call"
}
},
"required": ["channel_id"]
}
}

View File

@@ -0,0 +1,36 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CALL_UPDATE",
"description": "Sent when a DM or group DM call is updated (participants join/leave, ringing state changes).",
"scope": "presence",
"dispatchedBy": ["gateway"],
"note": "Dispatched to all recipients when call state changes",
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID of the call"
},
"message_id": {
"type": "string",
"description": "ID of the call message"
},
"region": {
"type": ["string", "null"],
"description": "Voice region for the call"
},
"ringing": {
"type": "array",
"items": {"type": "string"},
"description": "Array of user IDs currently being rung"
},
"voice_states": {
"type": "array",
"items": {"$ref": "VoiceStateResponse"},
"description": "Voice states of current participants in the call"
}
},
"required": ["channel_id", "message_id", "ringing", "voice_states"]
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_CREATE",
"description": "Sent when a new channel is created or opened for a user.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope for each recipient",
"dispatchedBy": [
"POST /guilds/:guild_id/channels",
"POST /users/@me/channels",
"PUT /channels/:channel_id/recipients/:user_id",
"POST /invites/:invite_code (group DM invites)"
],
"payload": {
"$ref": "ChannelResponse",
"description": "The created or opened channel object"
}
}

View File

@@ -0,0 +1,12 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_DELETE",
"description": "Sent when a channel is deleted or closed for a user.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope for each recipient",
"dispatchedBy": ["DELETE /channels/:channel_id", "DELETE /channels/:channel_id/recipients/:user_id"],
"payload": {
"$ref": "ChannelResponse",
"description": "The deleted or closed channel object"
}
}

View File

@@ -0,0 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_PINS_ACK",
"description": "Sent when channel pins were acknowledged by the user.",
"scope": "presence",
"dispatchedBy": ["POST /channels/:channel_id/pins/ack"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Timestamp of acknowledgement"
}
},
"required": ["channel_id", "timestamp"]
}
}

View File

@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_PINS_UPDATE",
"description": "Sent when a message is pinned or unpinned.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope",
"dispatchedBy": ["PUT /channels/:channel_id/pins/:message_id", "DELETE /channels/:channel_id/pins/:message_id"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"last_pin_timestamp": {
"type": ["string", "null"],
"format": "date-time",
"description": "ISO 8601 timestamp of the last pinned message, or null if no pins remain"
}
},
"required": ["channel_id", "last_pin_timestamp"]
}
}

View File

@@ -0,0 +1,21 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_RECIPIENT_ADD",
"description": "Sent when a user is added to a group DM. Dispatched to existing members only (the new user receives CHANNEL_CREATE instead).",
"scope": "presence",
"dispatchedBy": ["PUT /channels/:channel_id/recipients/:user_id", "POST /invites/:invite_code (group DM invites)"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID of the group DM"
},
"user": {
"$ref": "UserPartialResponse",
"description": "The user that was added"
}
},
"required": ["channel_id", "user"]
}
}

View File

@@ -0,0 +1,21 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_RECIPIENT_REMOVE",
"description": "Sent when a user is removed from a group DM.",
"scope": "presence",
"dispatchedBy": ["DELETE /channels/:channel_id/recipients/:user_id"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID of the group DM"
},
"user": {
"$ref": "UserPartialResponse",
"description": "The user that was removed"
}
},
"required": ["channel_id", "user"]
}
}

View File

@@ -0,0 +1,16 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_UPDATE",
"description": "Sent when a channel is updated.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope",
"dispatchedBy": [
"PATCH /channels/:channel_id",
"PUT /channels/:channel_id/permissions/:overwrite_id",
"DELETE /channels/:channel_id/permissions/:overwrite_id"
],
"payload": {
"$ref": "ChannelResponse",
"description": "The updated channel object"
}
}

View File

@@ -0,0 +1,18 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "CHANNEL_UPDATE_BULK",
"description": "Sent when multiple channels are updated (e.g. reordering).",
"scope": "guild",
"dispatchedBy": ["PATCH /guilds/:guild_id/channels"],
"payload": {
"type": "object",
"properties": {
"channels": {
"type": "array",
"items": {"$ref": "ChannelResponse"},
"description": "Array of updated channels (filtered by user permissions)"
}
},
"required": ["channels"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "FAVORITE_MEME_CREATE",
"description": "A favourite meme was added to the user's collection.",
"scope": "presence",
"dispatchedBy": ["POST /users/@me/memes", "POST /channels/:channel_id/messages/:message_id/memes"],
"payload": {
"$ref": "FavoriteMemeResponse",
"description": "The created favourite meme"
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "FAVORITE_MEME_DELETE",
"description": "A favourite meme was deleted from the user's collection.",
"scope": "presence",
"dispatchedBy": ["DELETE /users/@me/memes/:meme_id"],
"payload": {
"type": "object",
"properties": {
"meme_id": {
"type": "string",
"description": "ID of the deleted favourite meme"
}
},
"required": ["meme_id"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "FAVORITE_MEME_UPDATE",
"description": "A favourite meme was updated in the user's collection.",
"scope": "presence",
"dispatchedBy": ["PATCH /users/@me/memes/:meme_id"],
"payload": {
"$ref": "FavoriteMemeResponse",
"description": "The updated favourite meme"
}
}

View File

@@ -0,0 +1,25 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_BAN_ADD",
"description": "Sent when a user is banned from a guild.",
"scope": "guild",
"dispatchedBy": ["PUT /guilds/:guild_id/bans/:user_id"],
"payload": {
"type": "object",
"properties": {
"guild_id": {
"type": "string",
"description": "Guild ID"
},
"user": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "User ID"}
},
"required": ["id"],
"description": "Partial user object"
}
},
"required": ["guild_id", "user"]
}
}

View File

@@ -0,0 +1,25 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_BAN_REMOVE",
"description": "Sent when a user is unbanned from a guild.",
"scope": "guild",
"dispatchedBy": ["DELETE /guilds/:guild_id/bans/:user_id"],
"payload": {
"type": "object",
"properties": {
"guild_id": {
"type": "string",
"description": "Guild ID"
},
"user": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "User ID"}
},
"required": ["id"],
"description": "Partial user object"
}
},
"required": ["guild_id", "user"]
}
}

View File

@@ -0,0 +1,38 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_CREATE",
"description": "Sent when a guild becomes available, when the user joins a new guild, or for lazy-loading of unavailable guilds.",
"scope": "guild",
"dispatchedBy": ["POST /guilds", "POST /invites/:invite_code", "gateway"],
"payload": {
"$ref": "GuildResponse",
"description": "The guild object with additional fields for full state",
"additionalProperties": {
"channels": {
"type": "array",
"items": {"$ref": "ChannelResponse"},
"description": "Channels in the guild"
},
"members": {
"type": "array",
"items": {"$ref": "GuildMemberResponse"},
"description": "Members in the guild (user field contains only id for deduplication)"
},
"presences": {
"type": "array",
"items": {"$ref": "PresenceResponse"},
"description": "Presences of online members"
},
"voice_states": {
"type": "array",
"items": {"$ref": "VoiceStateResponse"},
"description": "Voice states of members in voice channels"
},
"joined_at": {
"type": "string",
"format": "date-time",
"description": "When the current user joined the guild"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_DELETE",
"description": "Sent when a guild becomes unavailable or the user is removed from a guild.",
"scope": "guild",
"dispatchedBy": ["DELETE /guilds/:guild_id", "DELETE /users/@me/guilds/:guild_id", "gateway"],
"payload": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Guild ID"
},
"unavailable": {
"type": "boolean",
"description": "True if the guild is unavailable due to an outage (not a leave/kick)"
}
},
"required": ["id"]
}
}

View File

@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_EMOJIS_UPDATE",
"description": "Sent when guild emojis were updated.",
"scope": "guild",
"dispatchedBy": [
"POST /guilds/:guild_id/emojis",
"POST /guilds/:guild_id/emojis/bulk",
"PATCH /guilds/:guild_id/emojis/:emoji_id",
"DELETE /guilds/:guild_id/emojis/:emoji_id"
],
"payload": {
"type": "object",
"properties": {
"emojis": {
"type": "array",
"items": {"$ref": "GuildEmojiResponse"},
"description": "Array of all emojis in the guild"
}
},
"required": ["emojis"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_MEMBER_ADD",
"description": "Sent when a new user joins a guild.",
"scope": "guild",
"dispatchedBy": ["POST /invites/:invite_code", "PUT /guilds/:guild_id/members/:user_id"],
"payload": {
"$ref": "GuildMemberResponse",
"description": "The guild member object"
}
}

View File

@@ -0,0 +1,25 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_MEMBER_REMOVE",
"description": "Sent when a user is removed from a guild (leave, kick, or ban).",
"scope": "guild",
"dispatchedBy": [
"DELETE /guilds/:guild_id/members/:user_id",
"DELETE /users/@me/guilds/:guild_id",
"PUT /guilds/:guild_id/bans/:user_id"
],
"payload": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "User ID"}
},
"required": ["id"],
"description": "Partial user object containing only the user ID"
}
},
"required": ["user"]
}
}

View File

@@ -0,0 +1,16 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_MEMBER_UPDATE",
"description": "Sent when a guild member is updated.",
"scope": "guild",
"dispatchedBy": [
"PATCH /guilds/:guild_id/members/:user_id",
"PATCH /guilds/:guild_id/members/@me",
"PUT /guilds/:guild_id/members/:user_id/roles/:role_id",
"DELETE /guilds/:guild_id/members/:user_id/roles/:role_id"
],
"payload": {
"$ref": "GuildMemberResponse",
"description": "The updated guild member object"
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_ROLE_CREATE",
"description": "Sent when a guild role is created.",
"scope": "guild",
"dispatchedBy": ["POST /guilds/:guild_id/roles"],
"payload": {
"type": "object",
"properties": {
"role": {
"$ref": "GuildRoleResponse",
"description": "The created role"
}
},
"required": ["role"]
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_ROLE_DELETE",
"description": "Sent when a guild role is deleted.",
"scope": "guild",
"dispatchedBy": ["DELETE /guilds/:guild_id/roles/:role_id"],
"payload": {
"type": "object",
"properties": {
"role_id": {
"type": "string",
"description": "ID of the deleted role"
}
},
"required": ["role_id"]
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_ROLE_UPDATE",
"description": "Sent when a guild role is updated.",
"scope": "guild",
"dispatchedBy": ["PATCH /guilds/:guild_id/roles/:role_id"],
"payload": {
"type": "object",
"properties": {
"role": {
"$ref": "GuildRoleResponse",
"description": "The updated role"
}
},
"required": ["role"]
}
}

View File

@@ -0,0 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_ROLE_UPDATE_BULK",
"description": "Sent when multiple guild roles are updated (e.g. reordering or hoist position changes).",
"scope": "guild",
"dispatchedBy": [
"PATCH /guilds/:guild_id/roles",
"PATCH /guilds/:guild_id/roles/hoist-positions",
"DELETE /guilds/:guild_id/roles/hoist-positions"
],
"payload": {
"type": "object",
"properties": {
"roles": {
"type": "array",
"items": {"$ref": "GuildRoleResponse"},
"description": "The updated roles"
}
},
"required": ["roles"]
}
}

View File

@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_STICKERS_UPDATE",
"description": "Sent when guild stickers were updated.",
"scope": "guild",
"dispatchedBy": [
"POST /guilds/:guild_id/stickers",
"POST /guilds/:guild_id/stickers/bulk",
"PATCH /guilds/:guild_id/stickers/:sticker_id",
"DELETE /guilds/:guild_id/stickers/:sticker_id"
],
"payload": {
"type": "object",
"properties": {
"stickers": {
"type": "array",
"items": {"$ref": "GuildStickerResponse"},
"description": "Array of all stickers in the guild"
}
},
"required": ["stickers"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "GUILD_UPDATE",
"description": "Sent when a guild is updated.",
"scope": "guild",
"dispatchedBy": ["PATCH /guilds/:guild_id"],
"payload": {
"$ref": "GuildResponse",
"description": "The updated guild object"
}
}

View File

@@ -0,0 +1,220 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "INVITE_CREATE",
"description": "Sent when an invite to a channel or pack is created. The payload structure varies based on invite type.",
"scope": "guild",
"scopeNote": "Guild scope for guild invites (MANAGE_CHANNELS permission required), presence scope for group DM invites (sent to all recipients)",
"dispatchedBy": ["POST /channels/:channel_id/invites", "POST /packs/:pack_id/invites"],
"payload": {
"oneOf": [
{
"type": "object",
"description": "Guild invite metadata response",
"properties": {
"code": {
"type": "string",
"description": "The unique invite code"
},
"type": {
"type": "integer",
"const": 0,
"description": "Invite type (0 = guild)"
},
"guild": {
"$ref": "GuildPartialResponse",
"description": "The guild this invite is for"
},
"channel": {
"$ref": "ChannelPartialResponse",
"description": "The channel this invite is for"
},
"inviter": {
"$ref": "UserPartialResponse",
"description": "User who created the invite"
},
"member_count": {
"type": "integer",
"description": "Approximate total member count of the guild"
},
"presence_count": {
"type": "integer",
"description": "Approximate online member count of the guild"
},
"expires_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "ISO8601 timestamp of when the invite expires"
},
"temporary": {
"type": "boolean",
"description": "Whether the invite grants temporary membership"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "ISO8601 timestamp of when the invite was created"
},
"uses": {
"type": "integer",
"description": "Number of times the invite has been used"
},
"max_uses": {
"type": "integer",
"description": "Maximum number of times the invite can be used"
},
"max_age": {
"type": "integer",
"description": "Duration in seconds before the invite expires"
}
},
"required": [
"code",
"type",
"guild",
"channel",
"member_count",
"presence_count",
"temporary",
"created_at",
"uses",
"max_uses",
"max_age"
]
},
{
"type": "object",
"description": "Group DM invite metadata response",
"properties": {
"code": {
"type": "string",
"description": "The unique invite code"
},
"type": {
"type": "integer",
"const": 1,
"description": "Invite type (1 = group DM)"
},
"channel": {
"$ref": "ChannelPartialResponse",
"description": "The group DM channel this invite is for"
},
"inviter": {
"$ref": "UserPartialResponse",
"description": "User who created the invite"
},
"member_count": {
"type": "integer",
"description": "Current member count of the group DM"
},
"expires_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "ISO8601 timestamp of when the invite expires"
},
"temporary": {
"type": "boolean",
"description": "Whether the invite grants temporary membership"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "ISO8601 timestamp of when the invite was created"
},
"uses": {
"type": "integer",
"description": "Number of times the invite has been used"
},
"max_uses": {
"type": "integer",
"description": "Maximum number of times the invite can be used"
}
},
"required": ["code", "type", "channel", "member_count", "temporary", "created_at", "uses", "max_uses"]
},
{
"type": "object",
"description": "Pack invite metadata response (emoji or sticker pack)",
"properties": {
"code": {
"type": "string",
"description": "The unique invite code"
},
"type": {
"type": "integer",
"enum": [2, 3],
"description": "Invite type (2 = emoji pack, 3 = sticker pack)"
},
"pack": {
"type": "object",
"description": "The pack this invite is for",
"properties": {
"id": {
"type": "string",
"description": "Pack ID"
},
"name": {
"type": "string",
"description": "Pack name"
},
"description": {
"type": ["string", "null"],
"description": "Pack description"
},
"type": {
"type": "string",
"enum": ["emoji", "sticker"],
"description": "Pack type"
},
"creator_id": {
"type": "string",
"description": "ID of the user who created the pack"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "ISO8601 timestamp of when the pack was created"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "ISO8601 timestamp of when the pack was last updated"
},
"creator": {
"$ref": "UserPartialResponse",
"description": "The user who created the pack"
}
},
"required": ["id", "name", "type", "creator_id", "created_at", "updated_at", "creator"]
},
"inviter": {
"$ref": "UserPartialResponse",
"description": "User who created the invite"
},
"expires_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "ISO8601 timestamp of when the invite expires"
},
"temporary": {
"type": "boolean",
"description": "Whether the invite grants temporary access"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "ISO8601 timestamp of when the invite was created"
},
"uses": {
"type": "integer",
"description": "Number of times the invite has been used"
},
"max_uses": {
"type": "integer",
"description": "Maximum number of times the invite can be used"
}
},
"required": ["code", "type", "pack", "temporary", "created_at", "uses", "max_uses"]
}
]
}
}

View File

@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "INVITE_DELETE",
"description": "Sent when an invite to a channel is deleted.",
"scope": "guild",
"scopeNote": "Guild scope for guild invites (MANAGE_CHANNELS permission required), presence scope for group DM invites (sent to all recipients)",
"dispatchedBy": ["DELETE /invites/:invite_code"],
"payload": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The invite code that was deleted"
},
"channel_id": {
"type": "string",
"description": "Channel ID the invite was for (present for guild and group DM invites)"
},
"guild_id": {
"type": "string",
"description": "Guild ID (present for guild invites only)"
}
},
"required": ["code"]
}
}

View File

@@ -0,0 +1,30 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_ACK",
"description": "Sent when a message is acknowledged (marked as read).",
"scope": "presence",
"scopeNote": "Always dispatched to the user's presence scope only",
"dispatchedBy": ["POST /channels/:channel_id/messages/:message_id/ack"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "ID of the last read message"
},
"mention_count": {
"type": "integer",
"description": "Remaining unread mention count after this acknowledgement"
},
"manual": {
"type": "boolean",
"description": "Whether this was a manual acknowledgement"
}
},
"required": ["channel_id", "message_id", "mention_count"]
}
}

View File

@@ -0,0 +1,24 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_CREATE",
"description": "Sent when a message is created.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope; personal notes dispatch to presence scope",
"dispatchedBy": [
"POST /channels/:channel_id/messages",
"POST /webhooks/:webhook_id/:token",
"POST /webhooks/:webhook_id/:token/github",
"POST /webhooks/:webhook_id/:token/slack",
"POST /webhooks/:webhook_id/:token/sentry"
],
"payload": {
"$ref": "MessageResponse",
"description": "The created message object with additional channel_type field",
"additionalProperties": {
"channel_type": {
"type": "integer",
"description": "Type of the channel the message was sent in"
}
}
}
}

View File

@@ -0,0 +1,34 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_DELETE",
"description": "Sent when a message is deleted.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope",
"dispatchedBy": [
"DELETE /channels/:channel_id/messages/:message_id",
"internal:admin_message_delete",
"internal:bulk_delete_user_messages"
],
"payload": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the deleted message"
},
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"content": {
"type": "string",
"description": "Content of the deleted message (for audit purposes)"
},
"author_id": {
"type": "string",
"description": "ID of the message author"
}
},
"required": ["id", "channel_id"]
}
}

View File

@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_DELETE_BULK",
"description": "Sent when multiple messages are deleted at once.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope",
"dispatchedBy": ["POST /channels/:channel_id/messages/bulk-delete", "internal:bulk_delete_user_messages"],
"payload": {
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {"type": "string"},
"description": "IDs of the deleted messages"
},
"channel_id": {
"type": "string",
"description": "Channel ID"
}
},
"required": ["ids", "channel_id"]
}
}

View File

@@ -0,0 +1,51 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_REACTION_ADD",
"description": "Sent when a user adds a reaction to a message.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope.",
"dispatchedBy": ["PUT /channels/:channel_id/messages/:message_id/reactions/:emoji/@me"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "Message ID"
},
"emoji": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "Emoji ID (only present for custom emoji)"},
"name": {"type": "string", "description": "Emoji name (unicode character or custom emoji name)"},
"animated": {
"type": "boolean",
"description": "Whether the emoji is animated (only present for custom emoji)"
}
},
"required": ["name"],
"description": "The emoji used"
},
"user_id": {
"type": "string",
"description": "ID of the user who reacted"
},
"session_id": {
"type": "string",
"description": "Session ID of the user who reacted"
},
"guild_id": {
"type": "string",
"description": "Guild ID (only present for guild channels)"
},
"member": {
"$ref": "GuildMemberResponse",
"description": "Guild member object (only present for guild channels)"
}
},
"required": ["channel_id", "message_id", "emoji", "user_id"]
}
}

View File

@@ -0,0 +1,57 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_REACTION_ADD_MANY",
"description": "Sent when multiple reaction add events are batched together within a debounce window. Only dispatched to sessions that set the DEBOUNCE_MESSAGE_REACTIONS identify flag. When only a single reaction occurs within the window, a regular MESSAGE_REACTION_ADD is sent instead.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope. This is a virtual event synthesised by the gateway from buffered MESSAGE_REACTION_ADD events.",
"dispatchedBy": ["PUT /channels/:channel_id/messages/:message_id/reactions/:emoji/@me"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "Message ID"
},
"guild_id": {
"type": "string",
"description": "Guild ID (only present for guild channels)"
},
"reactions": {
"type": "array",
"description": "Array of individual reaction entries",
"items": {
"type": "object",
"properties": {
"user_id": {
"type": "string",
"description": "ID of the user who reacted"
},
"emoji": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "Emoji ID (only present for custom emoji)"},
"name": {"type": "string", "description": "Emoji name (unicode character or custom emoji name)"},
"animated": {
"type": "boolean",
"description": "Whether the emoji is animated (only present for custom emoji)"
}
},
"required": ["name"],
"description": "The emoji used"
},
"member": {
"$ref": "GuildMemberResponse",
"description": "Guild member object (only present for guild channels)"
}
},
"required": ["user_id", "emoji"]
}
}
},
"required": ["channel_id", "message_id", "reactions"]
}
}

View File

@@ -0,0 +1,50 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_REACTION_REMOVE",
"description": "Sent when a user removes a reaction from a message.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope.",
"dispatchedBy": [
"DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji/@me",
"DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji/:user_id"
],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "Message ID"
},
"emoji": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "Emoji ID (only present for custom emoji)"},
"name": {"type": "string", "description": "Emoji name (unicode character or custom emoji name)"}
},
"required": ["name"],
"description": "The emoji that was removed"
},
"user_id": {
"type": "string",
"description": "ID of the user whose reaction was removed"
},
"session_id": {
"type": "string",
"description": "Session ID of the user whose reaction was removed"
},
"guild_id": {
"type": "string",
"description": "Guild ID (only present for guild channels)"
},
"member": {
"$ref": "GuildMemberResponse",
"description": "Guild member object (only present for guild channels)"
}
},
"required": ["channel_id", "message_id", "emoji", "user_id"]
}
}

View File

@@ -0,0 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_REACTION_REMOVE_ALL",
"description": "Sent when all reactions are removed from a message.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope.",
"dispatchedBy": ["DELETE /channels/:channel_id/messages/:message_id/reactions"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "Message ID"
}
},
"required": ["channel_id", "message_id"]
}
}

View File

@@ -0,0 +1,31 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_REACTION_REMOVE_EMOJI",
"description": "Sent when all reactions for a specific emoji are removed from a message.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope.",
"dispatchedBy": ["DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"message_id": {
"type": "string",
"description": "Message ID"
},
"emoji": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "Emoji ID (only present for custom emoji)"},
"name": {"type": "string", "description": "Emoji name (unicode character or custom emoji name)"}
},
"required": ["name"],
"description": "The emoji that was removed"
}
},
"required": ["channel_id", "message_id", "emoji"]
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "MESSAGE_UPDATE",
"description": "Sent when a message is edited or updated (e.g., embeds added).",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope",
"dispatchedBy": [
"PATCH /channels/:channel_id/messages/:message_id",
"internal:embed_processing",
"internal:pin_update",
"internal:reaction_update"
],
"payload": {
"$ref": "MessageResponse",
"description": "The updated message object"
}
}

View File

@@ -0,0 +1,49 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "PRESENCE_UPDATE",
"description": "User presence was updated. Sent when a friend's or group DM member's status changes.",
"scope": "presence",
"dispatchedBy": ["gateway"],
"note": "Dispatched to users who are subscribed to the target user's presence (friends, group DM members)",
"payload": {
"type": "object",
"properties": {
"user": {
"type": "object",
"description": "Normalized user object",
"properties": {
"id": {"type": "string", "description": "User ID"},
"username": {"type": "string", "description": "Username"},
"display_name": {"type": ["string", "null"], "description": "Display name"},
"avatar": {"type": ["string", "null"], "description": "Avatar hash"},
"bot": {"type": "boolean", "description": "Whether user is a bot"}
},
"required": ["id"]
},
"status": {
"type": "string",
"enum": ["online", "idle", "dnd", "offline", "invisible"],
"description": "User's current status"
},
"mobile": {
"type": "boolean",
"description": "Whether the user has any mobile session active"
},
"afk": {
"type": "boolean",
"description": "Whether the user is marked as AFK"
},
"custom_status": {
"type": ["object", "null"],
"description": "User's custom status (null if offline/invisible or not set)",
"properties": {
"text": {"type": ["string", "null"], "description": "Custom status text"},
"emoji_id": {"type": ["string", "null"], "description": "Custom emoji ID"},
"emoji_name": {"type": ["string", "null"], "description": "Emoji name (for unicode emoji)"},
"expires_at": {"type": ["string", "null"], "description": "ISO8601 timestamp when status expires"}
}
}
},
"required": ["user", "status", "mobile", "afk", "custom_status"]
}
}

View File

@@ -0,0 +1,121 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "READY",
"description": "Contains initial state information sent after identifying. This is the first event received after a successful IDENTIFY.",
"scope": "session",
"dispatchedBy": ["gateway"],
"payload": {
"type": "object",
"properties": {
"version": {
"type": "integer",
"description": "Gateway protocol version"
},
"session_id": {
"type": "string",
"description": "Session ID for resuming"
},
"user": {
"$ref": "UserPrivateResponse",
"description": "The current user"
},
"guilds": {
"type": "array",
"items": {"$ref": "GuildReadyResponse"},
"description": "Guilds the user is in (includes full guild data for non-bots, unavailable placeholders for bots)"
},
"private_channels": {
"type": "array",
"items": {"$ref": "ChannelResponse"},
"description": "DM and group DM channels"
},
"relationships": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "User ID of the related user"},
"type": {
"type": "integer",
"description": "Relationship type (1=friend, 2=blocked, 3=incoming_request, 4=outgoing_request)"
},
"since": {"type": "string", "description": "ISO8601 timestamp of when the relationship was established"},
"nickname": {"type": "string", "nullable": true, "description": "Custom nickname for the related user"}
},
"required": ["id", "type"],
"description": "Relationship with user field stripped (user data in users array)"
},
"description": "User relationships (friends, blocked, pending) with user objects stripped"
},
"users": {
"type": "array",
"items": {"$ref": "UserPartialResponse"},
"description": "Users referenced by relationships, channels, and guild members (deduped)"
},
"presences": {
"type": "array",
"items": {"$ref": "PresenceResponse"},
"description": "Presences of friends and group DM recipients"
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Session identifier ('all' for aggregated, or specific ID)"
},
"status": {
"type": "string",
"enum": ["online", "offline", "idle", "dnd", "invisible"],
"description": "Session status"
},
"mobile": {"type": "boolean", "description": "Whether the session is from a mobile device"},
"afk": {"type": "boolean", "description": "Whether the session is AFK"}
},
"required": ["session_id", "status", "mobile", "afk"]
},
"description": "Active gateway sessions for the current user"
},
"user_settings": {
"$ref": "UserSettingsResponse",
"description": "User settings"
},
"user_guild_settings": {
"type": "array",
"items": {"$ref": "UserGuildSettingsResponse"},
"description": "Per-guild notification settings"
},
"read_states": {
"type": "array",
"items": {"$ref": "ReadStateResponse"},
"description": "Channel read state (last read message IDs)"
},
"notes": {
"type": "object",
"additionalProperties": {"type": "string"},
"description": "User notes keyed by user ID"
},
"country_code": {
"type": "string",
"description": "Two-letter country code based on IP geolocation"
},
"pinned_dms": {
"type": "array",
"items": {"type": "string"},
"description": "Array of pinned DM channel IDs"
},
"favorite_memes": {
"type": "array",
"items": {"$ref": "FavoriteMemeResponse"},
"description": "User's favourite memes"
},
"auth_session_id_hash": {
"type": "string",
"description": "Hash of the authentication session ID"
}
},
"required": ["version", "session_id", "user", "guilds"]
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "RECENT_MENTION_DELETE",
"description": "A recent mention was deleted from the user's mentions list.",
"scope": "presence",
"dispatchedBy": ["DELETE /users/@me/mentions/:message_id"],
"payload": {
"type": "object",
"properties": {
"message_id": {
"type": "string",
"description": "ID of the deleted mention's message"
}
},
"required": ["message_id"]
}
}

View File

@@ -0,0 +1,15 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "RELATIONSHIP_ADD",
"description": "Sent when a user relationship is added (friend request sent/received, blocked).",
"scope": "presence",
"dispatchedBy": [
"PUT /users/@me/relationships/:user_id",
"POST /users/@me/relationships",
"POST /users/@me/relationships/:user_id"
],
"payload": {
"$ref": "RelationshipResponse",
"description": "The relationship object"
}
}

View File

@@ -0,0 +1,18 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "RELATIONSHIP_REMOVE",
"description": "Sent when a user relationship is removed (unfriended, unblocked, request cancelled, or replaced by a block).",
"scope": "presence",
"dispatchedBy": ["DELETE /users/@me/relationships/:user_id", "PUT /users/@me/relationships/:user_id"],
"dispatchedByNote": "Also dispatched via PUT when blocking a user replaces an existing friend or pending relationship",
"payload": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the user whose relationship was removed"
}
},
"required": ["id"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "RELATIONSHIP_UPDATE",
"description": "Sent when a user relationship is updated (friend request accepted, nickname changed).",
"scope": "presence",
"dispatchedBy": ["PUT /users/@me/relationships/:user_id", "PATCH /users/@me/relationships/:user_id"],
"payload": {
"$ref": "RelationshipResponse",
"description": "The updated relationship object"
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "RESUMED",
"description": "Response to a successful resume request. The client should replay any missed events from the buffer.",
"scope": "session",
"dispatchedBy": ["gateway"],
"payload": {
"type": "null",
"description": "Null payload; presence of this event indicates successful resume"
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "SAVED_MESSAGE_CREATE",
"description": "A message was saved to the user's saved messages.",
"scope": "presence",
"dispatchedBy": ["POST /users/@me/saved-messages"],
"payload": {
"$ref": "MessageResponse",
"description": "The saved message"
}
}

View File

@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "SAVED_MESSAGE_DELETE",
"description": "A saved message was deleted from the user's saved messages.",
"scope": "presence",
"dispatchedBy": ["DELETE /users/@me/saved-messages/:message_id"],
"payload": {
"type": "object",
"properties": {
"message_id": {
"type": "string",
"description": "ID of the deleted saved message"
}
},
"required": ["message_id"]
}
}

View File

@@ -0,0 +1,34 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "SESSIONS_REPLACE",
"description": "User sessions have been replaced. Sent when sessions are updated across devices.",
"scope": "presence",
"dispatchedBy": ["gateway"],
"payload": {
"type": "array",
"items": {
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Session identifier ('all' for aggregated status, or specific session ID)"
},
"status": {
"type": "string",
"enum": ["online", "offline", "idle", "dnd", "invisible"],
"description": "Current status of the session"
},
"mobile": {
"type": "boolean",
"description": "Whether this session is from a mobile device"
},
"afk": {
"type": "boolean",
"description": "Whether this session is AFK"
}
},
"required": ["session_id", "status", "mobile", "afk"]
},
"description": "Array of session status entries. Includes an 'all' entry with aggregated status plus individual session entries."
}
}

View File

@@ -0,0 +1,34 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "TYPING_START",
"description": "Sent when a user starts typing in a channel.",
"scope": "channel",
"scopeNote": "Guild channels dispatch to guild scope; DMs dispatch to presence scope. May be disabled per-guild via guild settings.",
"dispatchedBy": ["POST /channels/:channel_id/typing"],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID"
},
"user_id": {
"type": "string",
"description": "ID of the user who started typing"
},
"timestamp": {
"type": "integer",
"description": "Unix timestamp (milliseconds) when typing started"
},
"guild_id": {
"type": "string",
"description": "Guild ID (only present for guild channels)"
},
"member": {
"$ref": "GuildMemberResponse",
"description": "Guild member object (only present for guild channels)"
}
},
"required": ["channel_id", "user_id", "timestamp"]
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "USER_GUILD_SETTINGS_UPDATE",
"description": "User guild settings have been updated.",
"scope": "presence",
"dispatchedBy": ["PATCH /users/@me/guilds/:guild_id/settings"],
"payload": {
"$ref": "UserGuildSettingsResponse",
"description": "The updated guild settings for the user"
}
}

View File

@@ -0,0 +1,21 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "USER_NOTE_UPDATE",
"description": "User note for a target user has been updated.",
"scope": "presence",
"dispatchedBy": ["PUT /users/@me/notes/:user_id"],
"payload": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "User ID the note is about"
},
"note": {
"type": "string",
"description": "The note content"
}
},
"required": ["id", "note"]
}
}

View File

@@ -0,0 +1,12 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "USER_PINNED_DMS_UPDATE",
"description": "User pinned DMs have been updated.",
"scope": "presence",
"dispatchedBy": ["PUT /users/@me/channels/:channel_id/pin", "DELETE /users/@me/channels/:channel_id/pin"],
"payload": {
"type": "array",
"items": {"type": "string"},
"description": "Array of pinned channel IDs (snowflakes as strings)"
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "USER_SETTINGS_UPDATE",
"description": "User settings have been updated.",
"scope": "presence",
"dispatchedBy": ["PATCH /users/@me/settings"],
"payload": {
"$ref": "UserSettingsResponse",
"description": "The updated user settings"
}
}

View File

@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "USER_UPDATE",
"description": "Properties about the current user changed.",
"scope": "presence",
"dispatchedBy": ["PATCH /users/@me", "PATCH /users/@me/profile"],
"payload": {
"$ref": "UserPrivateResponse",
"description": "The updated user object"
}
}

View File

@@ -0,0 +1,34 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "VOICE_SERVER_UPDATE",
"description": "Sent when the voice server for a guild or call is updated.",
"scope": "presence",
"dispatchedBy": ["gateway"],
"note": "Sent after joining a voice channel or when the voice server changes. Includes channel_id for both guild voice and DM calls.",
"payload": {
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Voice connection token for authenticating with the voice server"
},
"endpoint": {
"type": "string",
"description": "Voice server host (hostname:port)"
},
"connection_id": {
"type": "string",
"description": "Connection ID for this voice connection"
},
"guild_id": {
"type": "string",
"description": "Guild ID (present for guild voice channels)"
},
"channel_id": {
"type": "string",
"description": "Channel ID"
}
},
"required": ["token", "endpoint", "connection_id"]
}
}

View File

@@ -0,0 +1,88 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "VOICE_STATE_UPDATE",
"description": "Sent when a user's voice state is updated (join/leave/move voice channel, mute/deafen).",
"scope": "guild",
"dispatchedBy": ["gateway"],
"note": "Triggered by client sending VOICE_STATE_UPDATE opcode (4)",
"payload": {
"type": "object",
"properties": {
"guild_id": {
"type": "string",
"description": "Guild ID (only present for guild voice, not for DM calls)"
},
"channel_id": {
"type": ["string", "null"],
"description": "Channel ID the user is in (null if disconnected)"
},
"user_id": {
"type": "string",
"description": "User ID"
},
"connection_id": {
"type": "string",
"description": "Connection ID for this voice state"
},
"session_id": {
"type": "string",
"description": "Session ID for this voice state"
},
"member": {
"$ref": "GuildMemberResponse",
"description": "Guild member object (if guild voice)"
},
"deaf": {
"type": "boolean",
"description": "Whether the user is server deafened"
},
"mute": {
"type": "boolean",
"description": "Whether the user is server muted"
},
"self_deaf": {
"type": "boolean",
"description": "Whether the user is self deafened"
},
"self_mute": {
"type": "boolean",
"description": "Whether the user is self muted"
},
"self_video": {
"type": "boolean",
"description": "Whether the user's camera is on"
},
"self_stream": {
"type": "boolean",
"description": "Whether the user is streaming"
},
"is_mobile": {
"type": "boolean",
"description": "Whether the user is connected from a mobile device"
},
"viewer_stream_keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of stream keys the user is currently viewing"
},
"version": {
"type": "integer",
"description": "Voice state version number, incremented on each update"
}
},
"required": [
"user_id",
"connection_id",
"mute",
"deaf",
"self_mute",
"self_deaf",
"self_video",
"self_stream",
"is_mobile",
"version"
]
}
}

View File

@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"name": "WEBHOOKS_UPDATE",
"description": "Sent when a guild channel webhook is created, updated, or deleted. Indicates that webhooks for the channel should be re-fetched.",
"scope": "guild",
"dispatchedBy": [
"POST /channels/:channel_id/webhooks",
"PATCH /webhooks/:webhook_id",
"DELETE /webhooks/:webhook_id",
"PATCH /webhooks/:webhook_id/:token",
"DELETE /webhooks/:webhook_id/:token"
],
"payload": {
"type": "object",
"properties": {
"channel_id": {
"type": "string",
"description": "Channel ID whose webhooks were updated"
}
},
"required": ["channel_id"]
}
}