Discord rpc как сделать

Обновлено: 07.07.2024

This library has been deprecated in favor of Discord's GameSDK. Learn more here

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).

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.

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:

  1. Download the latest release for each operating system you are targeting and the zipped source code
  2. In the source code zip, copy the UE plugin— examples/unrealstatus/Plugins/discordrpc —to your project's plugin directory
  3. At [YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/ , create an Include folder and copy discord_rpc.h and discord_register.h to it from the zip
  4. Follow the steps below for each OS
  5. Build your UE4 project
  6. Launch the editor, and enable the Discord plugin.
  • At [YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/ , create a Win64 folder
  • Copy lib/discord-rpc.lib and bin/discord-rpc.dll from [RELEASE_ZIP]/win64-dynamic to the Win64 folder
  • At [YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/ , create a Mac folder
  • Copy libdiscord-rpc.dylib from [RELEASE_ZIP]/osx-dynamic/lib to the Mac folder
  • At [YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/ , create a Linux folder
  • Inside, create another folder x86_64-unknown-linux-gnu
  • Copy libdiscord-rpc.so from [RELEASE_ZIP]/linux-dynamic/lib to Linux/x86_64-unknown-linux-gnu

If you're a Unity developer looking to integrate Rich Presence into your game, follow this simple guide to get started towards success:

  1. Download the DLLs for any platform that you need from our releases
  2. In your Unity project, create a Plugins folder inside your Assets folder if you don't already have one
  3. Copy the file DiscordRpc.cs from here into your Assets folder. This is basically your header file for the SDK

We've got our Plugins folder ready, so let's get platform-specific!

  1. Create x86 and x86_64 folders inside Assets/Plugins/
  2. Copy discord-rpc-win/win64-dynamic/bin/discord-rpc.dll to Assets/Plugins/x86_64/
  3. Copy discord-rpc-win/win32-dynamic/bin/discord-rpc.dll to Assets/Plugins/x86/
  4. Click on both DLLs and make sure they are targetting the correct architectures in the Unity editor properties pane
  5. Done!
  1. Copy discord-rpc-osx/osx-dynamic/lib/libdiscord-rpc.dylib to Assets/Plugins/
  2. Rename libdiscord-rpc.dylib to discord-rpc.bundle
  3. Done!
  1. Copy discord-rpc-linux/linux-dynamic-lib/libdiscord-rpc.so to Assets/Plugins/
  2. 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

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.

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:

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).

Why do we have three of these? Three times the fun!

CI badge
TravisCI
AppVeyor
Buildkite (internal)

This is a text adventure "game" that inits/deinits the connection to Discord, and sends a presence update on each command.

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.

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:

Beautify your Discord profile with a fully customizable Discord Rich Presence, now with buttons.

Table of Contents

If you receive the RPC_CONNECTION_TIMEOUT error, please refresh Discord with CTRL + R whilst Discord is in focus, then try again.

Download and install NodeJS.

Download the latest .ZIP from the Releases section from this repo. (feel free to clone/fork for further tweaking/development)

Run npm i from inside of the directory to install all of the node_module required packages for the project.

Open the config.json.example file, modify the contents, and then save it as config.json . (see below for a few examples)

Run node . or node index.js to start the application. (ensuring you followed Step 4 beforehand)

Breakdown

Location Configuration Notes
First row below title details
Second row below title state
Third row below title timestamps.startTimestamp Converted to a format such as 12:34:56 elapsed
timestamps.endTimestamp Converted to a format such as 12:34:56 remaining
First button at the bottom buttons.primary Button can display any text, and have a link/url assigned
Second button at the bottom buttons.secondary Button can display any text, and have a link/url assigned
Text shown on large image:hover assets.largeImageText
Large image to the left of content assets.largeImageKey Four rows high, includes the title but not the bottom buttons
Text shown on small image:hover assets.smallImageText
Small image to the left of content assets.smallImageKey Small icon inset on the bottom right of the largeImageKey

Sending endTimestamp will always have the time displayed as "remaining" until the given time. Sending startTimestamp will show "elapsed" as long as there is no endTimestamp sent.

The useTimer setting accepts either true or false . If you want to enable the timer, set it to true . Otherwise, set it to false .

Setting startTimestamp and endTimestamp to null whilst useTimer is true will display the time elapsed since the RPC was started.

For example, if I started the RPC at Sat, 23 Oct 2021 09:00:00 UTC it will display 00:00 elapsed and from there, it will increase.

Setting startTimestamp to an Epoch value and endTimestamp to null will display the time elapsed since the start Epoch time/date.

For example, the startTimestamp is equal to Sat, 23 Oct 2021 09:30:00 UTC whilst the endTimestamp is equal to null .

  • If I started the RPC at Sat, 23 Oct 2021 09:45:00 UTC it will display 15:00 elapsed .

Setting startTimestamp and endTimestamp to an Epoch value, with the endTimestamp being greater, will display the time left.

For example, the startTimestamp is equal to Sat, 23 Oct 2021 09:50:00 UTC whilst the endTimestamp is equal to 10:00:00 UTC .

  • If I started the RPC anywhere between 09:50:00 UTC - 10:00:00 UTC it will display the time left until 10:00:00 UTC .

Setting startTimestamp to null and endTimestamp to an Epoch value will display the time left until the end Epoch time/date is met.

For example, the startTimestamp is equal to null whilst the endTimestamp is equal to Sat, 23 Oct 2021 10:20:00 UTC .

  • If I started the RPC at 10:00:00 UTC it will display 20:00 left .

Please note, Discord currently limits the timestamps to a maximum of 24 hours left or elapsed.

  • For example, if you set the startTimestamp to Sat, 23 Oct 2021 10:45:00 UTC and the endTimestamp to Sat 24 Oct 2021 10:50:00 UTC the timer will display 05:00 left instead of 24:05:00 left .

Discord Rich Presence Example

This is one of many use cases I've experimented with throughout development, preview shown below.

Q-dance

About

Beautify your Discord profile with a fully customizable Discord Rich Presence, now with buttons.


Implementing Discord RPC into the Source engine is simple, and it makes your mod stand out more, as your in-game "presence" can be seen through Discord.

Contents

What is Discord RPC?

Discord RPC 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.


Below is an example using this article as a base, with obvious modifications:

DiscordRPCExample.jpg

The Installation

First off you'll need to download the latest version Discord RPC. You can do so by going to Discord's GitHub repository here. And download the latest discord-rpc-win.zip file, as of writing we'll be using v3.3.0. Once downloaded, open the archive and go to win32-dynamic/lib/ and extract discord-rpc.lib to your mod's <src code directory>/src/lib/public/ once that's done we'll do the same for the include files, in your archive take a step back and go into the include folder, now extract discord_rpc.h and discord_register.h to <src code directory>/src/public/. Now for the final step, once again in your archive take a step back and go into the bin folder, now extract discord-rpc.dll to your mod's /bin folder ex. <Steam directory>/steamapps/sourcemods/YourMod/bin/.

The Setup

Now that the installation is done, it's time to set up our system. There's not a whole lot to do here, but this is a necessary step you'll have to take to make the implementation work.

To start off, go into <src code directory>/src/vpc_scripts/ and open source_dll_win32_base.vpc with your favorite text editor (I personally use Notepad++). Once you've opened the file, scroll all the way down to $Folder "Link Libraries" and under $Implib "$LIBPUBLIC\vstdlib" add $Lib "$LIBPUBLIC\discord-rpc" . After you've modified the VPC scripts, make sure to rerun createallprojects.bat and/or creategameprojects.bat before continuing, otherwise you might experience errors while building.

where the numbers after cl_discord_appid is your application's RPC AppID, to set up a RPC client go here, once your application is set up the number you'll want to place after cl_discord_appid is the "Client ID" seen in "General Information".

When that's done add the following above CHLClient::CHLClient()

Now scroll down to CHLClient::Init( . ) and add the following above return true; at the bottom of the function.

"ModImageHere" is an image key, remember that Discord developer page you were on earlier, where you set up your application? Go back there and to your application page, now go down to "Rich Presence" and click on "Art Assets" and click "Add Image(s)". Add an image you want for your mod and whatever you name that image is the name you replace "ModImageHere" with.

Now go further down to CHLClient::LevelInitPreEntity( . ) and above the comment for g_RagdollLVManager.SetLowViolence( pMapName ); add

Now we'll add the last piece of code into CHLClient::LevelShutdown( void ) . Below

Conclusion

The installation and setup are both complete! Try launching your mod and check your Discord status, now load up a map and check again!

This implementation works on Source SDK 2013 (SP/MP), as well as Source SDK 2007 (thanks to the IOSoccer team for testing!).

Читайте также: