Skip to main content

Discord user settings protobufs.

Project description

Discord Protocol Buffers

Reverse-engineering Discord's user settings protobufs.

This repository provides protocol buffer files for Discord's user settings automatically generated and automatically updated. The protobufs are provided as .proto files in the out/ directory, one file per settings type.

These protobufs are used by the Discord clients for user settings.

Provided for educational purposes only.

Usage

Note

Automating user accounts is against the Discord ToS. This repository is a proof of concept and I cannot recommend using it. Do so at your own risk.

Installation

# with npm
npm install discord-protos

# with yarn
yarn add discord-protos

# with pnpm
pnpm add discord-protos

# with pip
pip install discord-protos

Example

JavaScript:

const { PreloadedUserSettings } = require('discord-protos');

const encoded = PreloadedUserSettings.toBase64({
    status: {
        status: {
            value: "online",
        },
        customStatus: {
            text: "Hello World",
            emojiId: 0n,
            emojiName: "",
            expiresAtMs: 0n,
        },
    },
});

const decoded = PreloadedUserSettings.fromBase64(encoded);

console.log(encoded, decoded);

Python:

import base64
from discord_protos import PreloadedUserSettings

settings = PreloadedUserSettings()
encoded = base64.b64encode(settings.ParseDict({
    'status': {
        'status': {
            'value': 'online',
        },
        'custom_status': {
            'text': 'Hello World',
            'emoji_id': 0,
            'emoji_name': '',
            'expires_at_ms': 0,
        },
    },
}).SerializeToString())

decoded = PreloadedUserSettings.FromString(base64.b64decode(encoded))

print(encoded, decoded)

Mapping

The following table shows which protobuf user settings correspond to which .proto file (the Python package also provides a UserSettingsType enum for convenience).

Type Value File Use
1 PRELOADED_USER_SETTINGS PreloadedUserSettings.proto General Discord user settings.
2 FRECENCY_AND_FAVORITES_SETTINGS FrecencyUserSettings.proto Frecency and favorites storage for various things.
3 TEST_SETTINGS - Unknown.

Protobufs

The .proto files can be compiled down to Python or JavaScript files by running npm run py or npm run js. This requires protoc to be installed.

Base64-encoded data for these protobufs are provided by the GET /users/@me/settings-proto/{type} endpoint. For preloaded user settings, base64-encoded data is provided in the user_settings_proto key of the READY event received in the Discord Gateway, as well as in USER_SETTINGS_PROTO_UPDATE events.

Development

Running pnpm load will extract and save the latest protobufs to the discord_protos/ directory.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discord-protos-0.0.2.tar.gz (13.4 kB view details)

Uploaded Source

File details

Details for the file discord-protos-0.0.2.tar.gz.

File metadata

  • Download URL: discord-protos-0.0.2.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for discord-protos-0.0.2.tar.gz
Algorithm Hash digest
SHA256 23953a05f32beedb40b708ec4b457530a6196a49c8d75d337ae9282a2a41c997
MD5 1cd71dfed6c3315cd9af62250c9cc50f
BLAKE2b-256 3a7c4b9eaf1f85caa5ff93caa948ee47a2fc5be2d2bbd4b60d3f989da84c8140

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page