Socket
Book a DemoInstallSign in
Socket

discord-protos

Package Overview
Dependencies
Maintainers
2
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

discord-protos

A parser for Discord's protobufs

1.2.65
latest
Source
npmnpm
Version published
Weekly downloads
394
-1.75%
Maintainers
2
Weekly downloads
 
Created
Source

Discord Protocol Buffers

Reverse-engineering Discord's protobufs.

This repository provides protocol buffer files for all protobufs found in Discord's client source, automatically generated and automatically updated. The protobufs are provided as .proto files in the out/ directory.

These protobufs are used by Discord clients for transmitting data like user settings and premium marketing.

Provided for educational purposes only.

Credits

  • arHSM for originally reverse-engineering the technology behind Discord's protobuf implementation.

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)

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

TypeValueFileUse
1PRELOADED_USER_SETTINGSPreloadedUserSettings.protoGeneral Discord user settings.
2FRECENCY_AND_FAVORITES_SETTINGSFrecencyUserSettings.protoFrecency and favorites storage for various things.
3TEST_SETTINGS-Unknown.

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.

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.

Development

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

FAQs

Package last updated on 29 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.