Skip to content

Capabilities

Capabilities is a field (capabilities) within the IDENTIFY payload that communicates what the client is "capable" of. Unfortunately this means Discord's API does weird things that don't match what the documentation says.

The following capability names are arbitrary and not taken from Discord since Discord does not name each bit, but hardcodes their value.

Key Value Description
LAZY_USER_NOTES 1 << 0 don't send user notes in READY
NO_AFFINE_USER_IDS 1 << 1
VERSIONED_READ_STATES 1 << 2
VERSIONED_USER_GUILD_SETTINGS 1 << 3
DEDUPLICATE_USER_OBJECTS 1 << 4
PRIORITIZED_READY_PAYLOAD 1 << 5 responsible for sending READY_SUPPLEMENTAL
MULTIPLE_GUILD_EXPERIMENT_POPULATIONS 1 << 6
NON_CHANNEL_READ_STATES 1 << 7
AUTH_TOKEN_REFRESH 1 << 8
USER_SETTINGS_PROTO 1 << 9 user_settings in the READY message will be omitted
CLIENT_STATE_V2 1 << 10 heavily alters the guild object
PASSIVE_GUILD_UPDATE 1 << 11 causes the gateway to send PASSIVE_UPDATE_V1 events
AUTO_CALL_CONNECT 1 << 12 causes the gateway to send CALL_CONNECT for active calls at time of connection instead of requiring manual request
DEBOUNCE_MESSAGE_REACTIONS 1 << 13 causes gateway to send MESSAGE_REACTION_ADD_MANY instead of rapid MESSAGE_REACTION_ADD events

As of 3 July 2023, Discord uses 16381 which corresponds to all bits except NO_AFFINE_USER_IDS

USER_SETTINGS_PROTO

Forces usage of the user_settings_proto field which uses Google's protobuf instead of the standard user_settings. The reconstructed .proto is available here

CLIENT_STATE_V2

The following fields of the guild object are moved into a new field called properties:

  • afk_channel_id
  • afk_timeout
  • application_id
  • banner
  • default_message_notifications
  • description
  • discovery_splash
  • explicit_content_filter
  • features
  • guild_hashes (removed)
  • home_header
  • hub_type
  • icon
  • latest_onboarding_question_id
  • max_members
  • max_stage_video_channel_users
  • max_video_channel_users
  • mfa_level
  • name
  • nsfw
  • nsfw_level
  • owner_id
  • preferred_locale
  • premium_progress_bar_enabled
  • premium_tier
  • public_updates_channel_id
  • region (removed)
  • rules_channel_id
  • safety_alerts_channel_id
  • splash
  • system_channel_flags
  • system_channel_id
  • vanity_url_code
  • verification_level

The version field in channel and other objects within guild are removed.

The data_mode field is added to the guild object. Currently seems to always be "full."

PASSIVE_GUILD_UPDATE

Causes a PASSIVE_UPDATE_V1 dispatch event to be sent periodically instead of CHANNEL_UNREADS_UPDATE

PASSIVE_UPDATE_V1 object

Field Type Description
voice_states array of voice state voice states for users in the guild
members array of guild member some of the members
guild_id snowflake the guild the update is for
channels array of read state entries read state of the guild

Unnamed bit 12

Behavior unknown. Only changed observed so far is CALL_CREATE events being fired for calls that are active at time of connection

Unnamed bit 13

Causes the gateway to send MESSAGE_REACTION_ADD_MANY events.

MESSAGE_REACTION_ADD_MANY object

Field Type Description
guild_id snowflake guild the message is in
channel_id snowflake channel the message is in
message_id snowflake message reactions are being added to
reactions array of many reaction objects reactions that were added

many reaction object

Field Type Description
users array of snowflake users who added the reaction
emoji partial emoji object emoji information