Crate discord_sdk[][src]

Expand description

⚔️ discord-sdk

Embark Embark Crates.io Docs dependency status Build status

An (unofficial) open source Rust implementation of the Discord Game SDK.

Why not use this?

  • This project is not official and is using a largely undocumented protocol that Discord could change/break at any time in the future.
  • There is already a Rust wrapper for the official Game SDK.
  • Your project is not also in Rust. We may add a C API for this crate in the future, but for now this is a Rust only project.

Why use this?

  • You use Rust for your project and want to integrate features such as rich presence/activities provided by Discord.
  • You don’t want to have a dependency on a closed source, shared library.
  • You like to live dangerously (though this library does also have some automated tests!).

Implemented Features

TODO: Achievements

Activities (Rich Presence)

Commands
Events
Other

TODO: Applications

⚠️ Voice

Commands
Events
  • VOICE_SETTINGS_UPDATE_2 - Undocumented, but this event is fired for all voice settings changes, except for “Set Local Volume”.

TODO: Images

⚠️ Lobbies

Commands
Events
Other

⚠️ Networking

Overlay

NOTE: These are only tested insofar as the protocol is (probably) correct, however, the overlay is currently extremely limited, and so we were unable to test that the overlay commands actually function correctly since our primary project is Vulkan.

Note, there are a few other cases that overlay will not work with. The overlay is currently not supported for Mac, games with Vulkan support, and generally old games.

Also note, the SDK itself and its documentation uses the utterly confusing terminology of Un/Locked when talking about the overlay, this crate instead uses Visibility, as in Visible or Hidden.

Commands
Events

Relationships

Commands
  • Get Relationships - NOTE: This command is not really exposed directly from the regular Game SDK, but is implicitly executed by the SDK during intialization.
Events

TODO: Storage

TODO?: Store

Users

Commands
Events

⚠️ Deprecation

This hasn’t been officially announced by Discord yet, but the Voice, Lobbies, and Networking functionality will be deprecated and removed sometime in the future. Since only the lobbies functionality has been implemented thusfar, we will mark that functionality as deprecated once it is official.

Testing

Unfortunately Discord does not provide a convenient way to perform automated testing, as it requires an actual working Discord application to be running and logged in, which makes automated (particularly headless) testing…annoying.

For now, it’s required that you manually spin up 2 different Discord applications (eg, Stable and Canary) and log in with separate accounts on the same machine, then run one test at a time.

Activities

cargo test --features local-testing test_activity

Lobbies

NOTE: This does not test the lobby search functionality as that command seems to be non-functioning and never returns results, even if the REST equivalent does return the expected results.

cargo test --features local-testing test_lobbies

Contribution

Contributor Covenant

We welcome community contributions to this project.

Please read our Contributor Guide for more information on how to get started. Please also read our Contributor Terms before you make any contributions.

Any contribution intentionally submitted for inclusion in an Embark Studios project, shall comply with the Rust standard licensing model (MIT OR Apache 2.0) and therefore be dual licensed as described below, without any additional terms or conditions:

License

This contribution is dual licensed under EITHER OF

at your option.

For clarity, “your” refers to Embark or any other licensee/user of the contribution.

Re-exports

pub use error::DiscordApiErr;
pub use error::DiscordErr;
pub use error::Error;
pub use crossbeam_channel as cc;

Modules

Provides types and functionality for Activities , also known as Rich Presence

Provides types and functionality for Lobbies

Provides types and functionality for the Discord Overlay

Functionality for registering an application with Discord so that Discord can start it in the future eg. when the user accpets an invite to play the game by another user

Provides types and functionality for Relationships

Provides types and functionality around Users

Structs

Discord uses snowflakes for most/all of their unique identifiers, including users, lobbies, etc

Enums

The details on the Application you’ve created in Discord.

An event or error sent from Discord

An event sent from Discord to notify us of some kind of state change or completed action.

Traits

Type Definitions