⚔️
discord-sdk
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
Achievements
TODO:Activities (Rich Presence)
Commands
- Update Activity
- Clear Activity
- Send Join Request Reply
- Send Invite - NOTE: This seems to be broken on Windows.
- Accept Invite
Events
Other
Applications
TODO:Voice
TODO:Images
TODO:Lobbies
Commands
- Create Lobby
- Update Lobby
- Delete Lobby
- Connect Lobby
- Disconnect Lobby
- Update Member
- Send Lobby Message
- Search - NOTE: This seems to be completely broken and never returns results.
- Connect Voice
- Disconnect Voice
Events
Other
Networking
TODO: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.
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
- Toggle Visibility
- Open Activity Invite
- Open Guild Invite
- Open Voice Settings - NOTE: AFAICT, if your application does not have the overlay enabled (eg, because it is Vulkan or a CLI or whatnot), this will crash Discord.
Events
Relationships
TODO:Storage
TODO:Store
TODO?:Users
Commands
Events
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
NOTE: This test does not work on Windows due to a bug in Discord with the Invite
command.
cargo test --features local-testing test_activity
Lobbies
NOTE: This a 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_local_lobbies
Contribution
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 + 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
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
For clarity, "your" refers to Embark or any other licensee/user of the contribution.