4824b20f28
* Choose pipe number on initialize * Get pipe from base connection instance * UE4 support * Warnings as errors yelling * Fix windows connection * Oops all variables * maybe this fixes it * This one actually works!!!! * Fix double function declaration |
||
---|---|---|
documentation | ||
examples | ||
include | ||
src | ||
.clang-format | ||
.gitignore | ||
.travis.yml | ||
appveyor.yml | ||
build.py | ||
CMakeLists.txt | ||
LICENSE | ||
README.md |
Discord RPC
This is a library for interfacing your game with a locally running Discord desktop client. It's known to work on Windows, macOS, and Linux. You can use the lib directly if you like, or use it as a guide to writing your own if it doesn't suit your game as is. PRs/feedback welcome if you have an improvement everyone might want, or can describe how this doesn't meet your needs.
Included here are some quick demos that implement the very minimal subset to show current status, and have callbacks for where a more complete game would do more things (joining, spectating, etc).
Documentation
The most up to date documentation for Rich Presence can always be found on our developer site! If you're interested in rolling your own native implementation of Rich Presence via IPC sockets instead of using our SDK—hey, you've got free time, right?—check out the "Hard Mode" documentation.
Basic Usage
Zeroith, you should be set up to build things because you are a game developer, right?
First, head on over to the Discord developers site and make yourself an app. Keep track of Client ID
-- you'll need it here to pass to the init function.
Unreal Engine 4 Setup
To use the Rich Presense plugin with Unreal Engine Projects:
- Download the latest release for each operating system you are targeting and the zipped source code
- In the source code zip, copy the UE plugin—
examples/unrealstatus/Plugins/discordrpc
—to your project's plugin directory - At
[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/
, create anInclude
folder and copydiscord_rpc.h
anddiscord_register.h
to it from the zip - Follow the steps below for each OS
- Build your UE4 project
- Launch the editor, and enable the Discord plugin.
Windows
- At
[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/
, create aWin64
folder - Copy
lib/discord-rpc.lib
andbin/discord-rpc.dll
from[RELEASE_ZIP]/win64-dynamic
to theWin64
folder
Mac
- At
[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/
, create aMac
folder - Copy
libdiscord-rpc.dylib
from[RELEASE_ZIP]/osx-dynamic/lib
to theMac
folder
Linux
- At
[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/
, create aLinux
folder - Inside, create another folder
x86_64-unknown-linux-gnu
- Copy
libdiscord-rpc.so
from[RELEASE_ZIP]/linux-dynamic/lib
toLinux/x86_64-unknown-linux-gnu
Unity Setup
If you're a Unity developer looking to integrate Rich Presence into your game, follow this simple guide to get started towards success:
- Download the DLLs for any platform that you need from our releases
- In your Unity project, create a
Plugins
folder inside yourAssets
folder if you don't already have one - Copy the file
DiscordRpc.cs
from here into yourAssets
folder. This is basically your header file for the SDK
We've got our Plugins
folder ready, so let's get platform-specific!
Windows
- Create
x86
andx86_64
folders insideAssets/Plugins/
- Copy
discord-rpc-win/win64-dynamic/bin/discord-rpc.dll
toAssets/Plugins/x86_64/
- Copy
discord-rpc-win/win32-dynamic/bin/discord-rpc.dll
toAssets/Plugins/x86/
- Click on both DLLs and make sure they are targetting the correct architectures in the Unity editor properties pane
- Done!
MacOS
- Copy
discord-rpc-osx/osx-dynamic/lib/libdiscord-rpc.dylib
toAssets/Plugins/
- Rename
libdiscord-rpc.dylib
todiscord-rpc.bundle
- Done!
Linux
- Copy
discord-rpc-linux/linux-dynamic-lib/libdiscord-rpc.so
toAssets/Plugins/
- Done!
You're ready to roll! For code examples on how to interact with the SDK using the DiscordRpc.cs
header file, check out our example
From package
Download a release package for your platform(s) -- they have subdirs with various prebuilt options, select the one you need add /include
to your compile includes, /lib
to your linker paths, and link with discord-rpc
. For the dynamically linked builds, you'll need to ship the associated file along with your game.
From repo
First-eth, you'll want CMake
. There's a few different ways to install it on your system, and you should refer to their website. Many package managers provide ways of installing CMake as well.
To make sure it's installed correctly, type cmake --version
into your flavor of terminal/cmd. If you get a response with a version number, you're good to go!
There's a CMake file that should be able to generate the lib for you; Sometimes I use it like this:
cd <path to discord-rpc>
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=<path to install discord-rpc to>
cmake --build . --config Release --target install
There is a wrapper build script build.py
that runs cmake
with a few different options.
Usually, I run build.py
to get things started, then use the generated project files as I work on things. It does depend on click
library, so do a quick pip install click
to make sure you have it if you want to run build.py
.
There are some CMake options you might care about:
flag | default | does |
---|---|---|
ENABLE_IO_THREAD |
ON |
When enabled, we start up a thread to do io processing, if disabled you should call Discord_UpdateConnection yourself. |
USE_STATIC_CRT |
OFF |
(Windows) Enable to statically link the CRT, avoiding requiring users install the redistributable package. (The prebuilt binaries enable this option) |
BUILD_SHARED_LIBS |
OFF |
Build library as a DLL |
WARNINGS_AS_ERRORS |
OFF |
When enabled, compiles with -Werror (on *nix platforms). |
Continuous Builds
Why do we have three of these? Three times the fun!
CI | badge |
---|---|
TravisCI | |
AppVeyor | |
Buildkite (internal) |
Sample: send-presence
This is a text adventure "game" that inits/deinits the connection to Discord, and sends a presence update on each command.
Sample: button-clicker
This is a sample Unity project that wraps a DLL version of the library, and sends presence updates when you click on a button. Run python build.py unity
in the root directory to build the correct library files and place them in their respective folders.
Sample: unrealstatus
This is a sample Unreal project that wraps the DLL version of the library with an Unreal plugin, exposes a blueprint class for interacting with it, and uses that to make a very simple UI. Run python build.py unreal
in the root directory to build the correct library files and place them in their respective folders.
Wrappers and Implementations
Below is a table of unofficial, community-developed wrappers for and implementations of Rich Presence in various languages. If you would like to have yours added, please make a pull request adding your repository to the table. The repository should include:
- The code
- A brief ReadMe of how to use it
- A working example
Rich Presence Wrappers and Implementations
Name | Language |
---|---|
Discord RPC C# | C# |
Discord RPC D | D |
discord-rpc.jar | Java |
java-discord-rpc | Java |
Discord-IPC | Java |
Discord Rich Presence | JavaScript |
drpc4k | Kotlin |
lua-discordRPC | LuaJIT (FFI) |
pypresence | Python |
SwordRPC | Swift |