Convert Figma logo to code with AI

discord logodiscord-rpc

No description available

1,051
323
1,051
62

Top Related Projects

Official Discord API Documentation

A powerful JavaScript library for interacting with the Discord API

An API wrapper for Discord written in Python.

An unofficial .Net wrapper for the Discord API (https://discord.com/)

A .NET library for making bots using the Discord API.

Quick Overview

The discord/discord-rpc repository is a C++ library that provides a simple API for integrating Discord Rich Presence functionality into your application. Rich Presence allows your application to display custom information about the user's current activity on their Discord profile.

Pros

  • Cross-platform: The library supports Windows, macOS, and Linux platforms.
  • Easy integration: The API provides a straightforward interface for integrating Rich Presence into your application.
  • Active development: The project is actively maintained, with regular updates and bug fixes.
  • Open-source: The library is open-source, allowing for community contributions and customizations.

Cons

  • Dependency on Discord: The library is tightly coupled with the Discord platform, limiting its use to Discord-specific applications.
  • Limited functionality: The library primarily focuses on Rich Presence, and may not provide more advanced Discord integration features.
  • Potential compatibility issues: As the Discord platform evolves, there may be compatibility issues that require updates to the library.
  • Learning curve: Integrating the library into your application may require some initial setup and understanding of the Discord Rich Presence API.

Code Examples

Here are a few examples of how to use the discord-rpc library:

  1. Initializing the library:
#include <discord_rpc.h>

int main() {
    DiscordEventHandlers handlers = {};
    Discord_Initialize("your_application_id", &handlers, 1, NULL);
    // Your application logic here
    Discord_Shutdown();
    return 0;
}
  1. Updating the Rich Presence:
DiscordRichPresence discordPresence;
memset(&discordPresence, 0, sizeof(discordPresence));
discordPresence.state = "Playing a game";
discordPresence.details = "Level 1";
discordPresence.largeImageKey = "large_image";
discordPresence.largeImageText = "Large Image Text";
discordPresence.smallImageKey = "small_image";
discordPresence.smallImageText = "Small Image Text";
discordPresence.startTimestamp = time(NULL);
Discord_UpdatePresence(&discordPresence);
  1. Handling Discord events:
static void handleDiscordReady() {
    printf("Discord: ready\n");
}

static void handleDiscordDisconnected(int errorCode, const char* message) {
    printf("Discord: disconnected (%d: %s)\n", errorCode, message);
}

DiscordEventHandlers handlers = {
    .ready = handleDiscordReady,
    .disconnected = handleDiscordDisconnected,
    // Other event handlers
};

Getting Started

To get started with the discord-rpc library, follow these steps:

  1. Clone the repository:
git clone https://github.com/discord/discord-rpc.git
  1. Build the library:

    • On Windows, use Visual Studio or CMake to build the project.
    • On macOS or Linux, use CMake to build the project.
  2. Include the library in your project and link against it.

  3. Initialize the library and update the Rich Presence as needed:

#include <discord_rpc.h>

int main() {
    DiscordEventHandlers handlers = {};
    Discord_Initialize("your_application_id", &handlers, 1, NULL);

    DiscordRichPresence discordPresence;
    memset(&discordPresence, 0, sizeof(discordPresence));
    discordPresence.state = "Playing a game";
    discordPresence.details = "Level 1";
    discordPresence.largeImageKey = "large_image";
    discordPresence.startTimestamp = time(NULL);
    Discord_UpdatePresence(&discordPresence);

    // Your application logic here

    Discord_Shutdown();
    return 0;
}

Make sure to replace "your_application_id" with the actual application ID provided by the Discord Developer Portal.

Competitor Comparisons

Official Discord API Documentation

Pros of discord-api-docs

  • Comprehensive documentation covering all aspects of Discord's API
  • Regularly updated with the latest API changes and features
  • Provides examples and explanations for various API endpoints

Cons of discord-api-docs

  • Lacks direct implementation code for developers to use
  • Requires more effort to integrate into projects compared to a ready-to-use library

Code comparison

discord-api-docs (documentation example):

{
  "name": "test",
  "type": 1,
  "description": "This is just a test command",
  "options": []
}

discord-rpc (implementation example):

#include <discord_rpc.h>

void Initialize() {
    DiscordEventHandlers handlers;
    memset(&handlers, 0, sizeof(handlers));
    Discord_Initialize("YOUR_APPLICATION_ID", &handlers, 1, NULL);
}

Summary

discord-api-docs provides comprehensive documentation for Discord's API, offering detailed explanations and examples for various endpoints. It's regularly updated but requires more effort to implement in projects. On the other hand, discord-rpc is a ready-to-use library for implementing Discord Rich Presence, making it easier to integrate into applications but with a more limited scope focused on Rich Presence functionality.

A powerful JavaScript library for interacting with the Discord API

Pros of discord.js

  • More comprehensive API coverage, allowing for full bot development
  • Larger community and more extensive documentation
  • Regular updates and active maintenance

Cons of discord.js

  • Steeper learning curve due to more complex features
  • Higher resource usage for simple applications
  • Requires Node.js runtime environment

Code Comparison

discord-rpc:

const DiscordRPC = require('discord-rpc');
const client = new DiscordRPC.Client({ transport: 'ipc' });
client.on('ready', () => {
  client.setActivity({ details: 'Playing a game' });
});
client.login({ clientId: 'YOUR_CLIENT_ID' });

discord.js:

const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
  client.user.setActivity('Playing a game');
});
client.login('YOUR_BOT_TOKEN');

Summary

discord-rpc is focused solely on Rich Presence functionality, making it lightweight and easy to implement for specific use cases. discord.js, on the other hand, offers a full-featured library for creating Discord bots with extensive capabilities. The choice between the two depends on the project requirements, with discord-rpc being suitable for simple presence updates and discord.js for more complex bot development.

An API wrapper for Discord written in Python.

Pros of discord.py

  • More comprehensive Discord API coverage, allowing for bot development and advanced features
  • Extensive documentation and large community support
  • Supports both synchronous and asynchronous programming

Cons of discord.py

  • Steeper learning curve for beginners
  • Requires more setup and configuration for basic functionality
  • Larger library size and potentially higher resource usage

Code Comparison

discord.py:

import discord

client = discord.Client()

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

client.run('YOUR_BOT_TOKEN')

discord-rpc:

#include <discord_rpc.h>

static void handleDiscordReady(const DiscordUser* user) {
    printf("Discord: ready\n");
}

int main() {
    DiscordEventHandlers handlers;
    memset(&handlers, 0, sizeof(handlers));
    handlers.ready = handleDiscordReady;
    Discord_Initialize("YOUR_APP_ID", &handlers, 1, NULL);
    return 0;
}

Summary

discord.py is a full-featured Python library for Discord bot development, offering extensive API coverage and community support. It's ideal for complex bot projects but may be overkill for simple applications. discord-rpc, on the other hand, is a lightweight C++ library focused specifically on Rich Presence integration, making it more suitable for game developers or applications that only need to display custom status in Discord.

An unofficial .Net wrapper for the Discord API (https://discord.com/)

Pros of Discord.Net

  • More comprehensive library for Discord bot development
  • Supports a wider range of Discord API features
  • Active community and regular updates

Cons of Discord.Net

  • Steeper learning curve for beginners
  • Requires more setup and configuration
  • Potentially higher resource usage for simple applications

Code Comparison

Discord.Net example:

using Discord;
using Discord.WebSocket;

public class Program
{
    private DiscordSocketClient _client;

    public static void Main(string[] args)
        => new Program().MainAsync().GetAwaiter().GetResult();

    public async Task MainAsync()
    {
        _client = new DiscordSocketClient();
        await _client.LoginAsync(TokenType.Bot, "token");
        await _client.StartAsync();
        await Task.Delay(-1);
    }
}

discord-rpc example:

#include <discord_rpc.h>

int main()
{
    DiscordEventHandlers handlers;
    memset(&handlers, 0, sizeof(handlers));
    Discord_Initialize("client_id", &handlers, 1, NULL);
    
    // Main loop
    while (1) {
        Discord_RunCallbacks();
    }
    
    Discord_Shutdown();
    return 0;
}

The Discord.Net example shows a more structured approach for creating a Discord bot, while the discord-rpc example demonstrates a simpler implementation for Rich Presence integration.

A .NET library for making bots using the Discord API.

Pros of DSharpPlus

  • Full-featured Discord API wrapper with extensive functionality
  • Active development and community support
  • Supports both bot and user accounts

Cons of DSharpPlus

  • Steeper learning curve for beginners
  • Larger codebase and potentially higher resource usage

Code Comparison

DSharpPlus:

var discord = new DiscordClient(new DiscordConfiguration {
    Token = "your-bot-token",
    TokenType = TokenType.Bot
});

await discord.ConnectAsync();

discord-rpc:

DiscordEventHandlers handlers;
memset(&handlers, 0, sizeof(handlers));
Discord_Initialize("your-app-id", &handlers, 1, NULL);

Summary

DSharpPlus is a comprehensive Discord API wrapper for .NET, offering extensive features and active development. It's suitable for complex bot projects but may be overwhelming for simple applications. discord-rpc, on the other hand, is a lightweight library focused specifically on Rich Presence integration, making it easier to use for that particular purpose but limited in overall functionality compared to DSharpPlus.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Discord RPC

Deprecation Notice

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

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:

  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.

Windows

  • 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

Mac

  • 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

Linux

  • 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

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:

  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!

Windows

  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!

MacOS

  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!

Linux

  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

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:

flagdefaultdoes
ENABLE_IO_THREADONWhen enabled, we start up a thread to do io processing, if disabled you should call Discord_UpdateConnection yourself.
USE_STATIC_CRTOFF(Windows) Enable to statically link the CRT, avoiding requiring users install the redistributable package. (The prebuilt binaries enable this option)
BUILD_SHARED_LIBSOFFBuild library as a DLL
WARNINGS_AS_ERRORSOFFWhen enabled, compiles with -Werror (on *nix platforms).

Continuous Builds

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

CIbadge
TravisCIBuild status
AppVeyorBuild status
Buildkite (internal)Build status

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
NameLanguage
Discord RPC C#C#
Discord RPC DD
discord-rpc.jarJava
java-discord-rpcJava
Discord-IPCJava
Discord Rich PresenceJavaScript
drpc4kKotlin
lua-discordRPCLuaJIT (FFI)
pypresencePython
SwordRPCSwift

NPM DownloadsLast 30 Days