{"id":28450881,"url":"https://github.com/imjuniper/unrealdiscordgamesdk","last_synced_at":"2026-04-28T14:03:07.086Z","repository":{"id":281583516,"uuid":"945732824","full_name":"imjuniper/UnrealDiscordGameSDK","owner":"imjuniper","description":"Unreal Engine support for the legacy Discord Game SDK, featuring Rich Presence, Game Invites and Overlay.","archived":false,"fork":false,"pushed_at":"2025-11-03T17:50:56.000Z","size":180,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-01T14:37:55.254Z","etag":null,"topics":["discord","discord-game-sdk","unreal-engine"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imjuniper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"jakobbouchard"}},"created_at":"2025-03-10T03:19:54.000Z","updated_at":"2025-11-03T17:50:59.000Z","dependencies_parsed_at":"2025-04-01T17:02:17.135Z","dependency_job_id":null,"html_url":"https://github.com/imjuniper/UnrealDiscordGameSDK","commit_stats":null,"previous_names":["jakobbouchard/discordunrealengine","imjuniper/discordunrealengine","imjuniper/unrealdiscordgamesdk"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/imjuniper/UnrealDiscordGameSDK","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjuniper%2FUnrealDiscordGameSDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjuniper%2FUnrealDiscordGameSDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjuniper%2FUnrealDiscordGameSDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjuniper%2FUnrealDiscordGameSDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imjuniper","download_url":"https://codeload.github.com/imjuniper/UnrealDiscordGameSDK/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjuniper%2FUnrealDiscordGameSDK/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32383791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T11:25:28.583Z","status":"ssl_error","status_checked_at":"2026-04-28T11:25:05.435Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","discord-game-sdk","unreal-engine"],"created_at":"2025-06-06T15:35:35.499Z","updated_at":"2026-04-28T14:03:07.079Z","avatar_url":"https://github.com/imjuniper.png","language":"C++","funding_links":["https://github.com/sponsors/jakobbouchard"],"categories":[],"sub_categories":[],"readme":"# Discord Integration for UE5\n\n- Tested Unreal Engine versions: 5.4, 5.5, 5.6\n\n\u003e [!NOTE]\n\u003e Discord has now released their new [Social SDK](https://discord.com/developers/docs/discord-social-sdk/overview), with an official Unreal Engine plugin to go along with it. Currently, this new SDK requires manual authentication, since it doesn't communicate with the Discord app directly, which can be annoying in a lot of cases, so this plugin should still be useful to some who require minimal features, such as Rich Presence!\n\n\u003c!-- no toc --\u003e\n- [Installation](#installation)\n\t- [Pre-built](#pre-built)\n\t- [Building from source](#building-from-source)\n- [Usage](#usage)\n\t- [Discord Game SDK Settings (project settings)](#discord-game-sdk-settings-project-settings)\n\t- [Discord Subsystem (`UDiscordSubsystem`)](#discord-subsystem-udiscordsubsystem)\n\t- [Discord Activity Manager (`UDiscordActivityManager`)](#discord-activity-manager-udiscordactivitymanager)\n\t\t- [Discord Activity (`FDiscordActivity`)](#discord-activity-fdiscordactivity)\n\t- [Discord User Manager (`UDiscordUserManager`)](#discord-user-manager-udiscordusermanager)\n\t\t- [Discord User (`FDiscordUser`)](#discord-user-fdiscorduser)\n\t- [Discord Overlay Manager (`UDiscordOverlayManager`)](#discord-overlay-manager-udiscordoverlaymanager)\n\n# Installation\n\n## Pre-built\n\nYou can download the latest pre-built version in the Releases page.\n\n## Building from source\n\nDownload this repo, put it in the `Plugins/` folder of your project. Ensure that you have the Discord Game SDK binaries downloaded. If you used the pre-built version before, they will be downloaded already. If not, you can run the `DownloadBinaries` script which will download them, and unzip them in the correct folders.\n\n# Usage\n\nThe large majority of the functions match what's available directly from the SDK. See [Discord's documentation](https://discord.com/developers/docs/developer-tools/game-sdk#using-the-sdk) for more information.\n\n\u003e [!NOTE]\n\u003e The Blueprint versions of functions with a `Callback` parameter are latent and don't return the error code, they just have execution pins for **Success** and **Failed** as well as output pins for the other callback output parameters.\n\n## Discord Game SDK Settings (project settings)\n\n**`Require Discord`**  \nIf checked, the game will force Discord to launch and relaunch itself. Does not work in-editor.\n\n---\n**`Client ID`**  \nThis can be obtained from Discord Developer Portal.\n\n---\n**`Timeout Seconds`**  \nThe time to wait before assuming a callback failed.\n\n## Discord Subsystem (`UDiscordSubsystem`)\n\nThe **Discord Subsystem** is used to managed the Discord Client and create the three managers.\n\n---\n**`bool IsActive()`**  \nReturns whether the subsystem is currently initialized. Will usually return false if the Client ID isn't set in settings, if the Discord SDK binaries are missing or if the Client failed to initialize.\n\n---\n\u003cb\u003e\u003ccode\u003e[UDiscordActivityManager](#discord-activity-manager-udiscordactivitymanager)* GetDiscordActivityManager()\u003c/code\u003e\u003c/b\u003e  \nReturns the current instance of [Discord Activity Manager](#discord-activity-manager-udiscordactivitymanager).\n\n---\n\u003cb\u003e\u003ccode\u003e[UDiscordUserManager](#discord-user-manager-udiscordusermanager)* GetDiscordUserManager()\u003c/code\u003e\u003c/b\u003e  \nReturns the current instance of [Discord User Manager](#discord-user-manager-udiscordusermanager).\n\n---\n\u003cb\u003e\u003ccode\u003e[UDiscordOverlayManager](#discord-overlay-manager-udiscordoverlaymanager)* GetDiscordOverlayManager()\u003c/code\u003e\u003c/b\u003e  \nReturns the current instance of [Discord Overlay Manager](#discord-overlay-manager-udiscordoverlaymanager).\n\n## Discord Activity Manager (`UDiscordActivityManager`)\n\n**`bool RegisterCommand(const FString Command)`**  \nReturns whether the call was a success. Registers a command by which Discord can launch your game. This might be a custom protocol, like `my-awesome-game://`, or a path to an executable. It also supports any launch parameters that may be needed, like `game.exe --full-screen --no-hax`.\n\n---\n**`bool RegisterSteam(const int32 SteamAppID)`**  \nReturns whether the call was a success. Used if you are distributing this SDK on Steam. Registers your game's Steam App ID for the protocol `steam://run-game-id/\u003cid\u003e`.\n\n---\n\n\u003cb\u003e\u003ccode\u003evoid UpdateActivity(const [FDiscordActivity](#discord-activity-fdiscordactivity) NewActivity, TFunction\u003cvoid(discord::Result)\u003e Callback)\u003c/code\u003e\u003c/b\u003e  \nGet user information for a given id.\n\n---\n\u003e [!WARNING]\n\u003e This probably won't work, see [issue 6612](https://github.com/discord/discord-api-docs/issues/6612) in the Discord API Docs.\n\n**`void ClearActivity(TFunction\u003cvoid(discord::Result)\u003e Callback)`**  \nClear's a user's presence in Discord to make it show nothing.\n\n---\n\u003cb\u003e\u003ccode\u003evoid SendRequestReply(const int64 UserID, const [EDiscordActivityJoinRequestReplyTypes::Type](#discord-activity-join-request-reply-types-ediscordactivityjoinrequestreplytypes) Reply, TFunction\u003cvoid(discord::Result)\u003e Callback)\u003c/code\u003e\u003c/b\u003e  \nSends a reply to an Ask to Join request.\n\n---\n**`void SendInvite(const int64 UserID, const FString Content, TFunction\u003cvoid(discord::Result)\u003e Callback)\u003e Callback)`**  \nSends a game invite to a given user. If you do not have a valid activity with all the required fields, this call will error.\n\n---\n**`void AcceptInvite(const int64 UserID)`**  \nAccepts a game invitation from a given User ID.\n\n### Discord Activity Join Request Reply Types (`EDiscordActivityJoinRequestReplyTypes`)\n\nPossible values:\n\n- No\n- Yes\n- Ignore (note that this seem to do the same as **No**)\n\n### Discord Activity Timestamps (`FDiscordActivityTimestamps`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`int64 Start`**  \nUnix timestamp. Send this to have an \"elapsed\" timer.\n\n---\n**`int64 End`**  \nUnix timestamp. Send this to have a \"remaining\" timer.\n\n### Discord Activity Assets (`FDiscordActivityAssets`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`FString LargeImageKey`**  \nKey for the large image..\n\n---\n**`FString LargeImageText`**  \nHover text for the large image.\n\n---\n**`FString SmallImageKey`**  \nKey for the small image.\n\n---\n**`FString SmallImageText`**  \nHover text for the small image.\n\n### Discord Activity Party (`FDiscordActivityParty`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`FString ID`**  \nA unique identifier for this party.\n\n---\n**`int32 CurrentSize`**  \nThe current size of the party. Setting to 0 means no party.\n\n---\n**`int32 MaxSize`**  \nThe max possible size of the party. Setting to 0 means no party.\n\n### Discord Activity Secrets (`FDiscordActivitySecrets`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`FString Match`**  \nUnique hash for the given match context.\n\n---\n**`FString Join`**  \nUnique hash for chat invites and Ask to Join.\n\n### Discord Activity (`FDiscordActivity`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`int64 ApplicationID` (read-only)**  \nYour application ID.\n\n---\n**`FString Name` (read-only)**  \nName of the application.\n\n---\n**`FString State`**  \nThe player's current party status.\n\n---\n**`FString Details`**  \nWhat the player is currently doing.\n\n---\n\u003cb\u003e\u003ccode\u003e[FDiscordActivityTimestamps](#discord-activity-timestamps-fdiscordactivitytimestamps) Timestamps\u003c/code\u003e\u003c/b\u003e  \nHelps create elapsed/remaining timestamps on a player's profile.\n\n---\n\u003cb\u003e\u003ccode\u003e[FDiscordActivityAssets](#discord-activity-assets-fdiscordactivityassets) Assets\u003c/code\u003e\u003c/b\u003e  \nAssets to display on the player's profile.\n\n---\n\u003cb\u003e\u003ccode\u003e[FDiscordActivityParty](#discord-activity-party-fdiscordactivityparty) Party\u003c/code\u003e\u003c/b\u003e  \nInformation about the player's party.\n\n---\n\u003cb\u003e\u003ccode\u003e[FDiscordActivitySecrets](#discord-activity-secrets-fdiscordactivitysecrets)) Secrets\u003c/code\u003e\u003c/b\u003e  \nSecret passwords for joining the player's game.\n\n---\n**`bool bInstance`**  \nWhether this activity is an instanced context, like a match.\n\n## Discord User Manager (`UDiscordUserManager`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n\u003cb\u003e\u003ccode\u003ebool GetCurrentUser([FDiscordUser](#discord-user-fdiscorduser)\u0026 User)\u003c/code\u003e\u003c/b\u003e  \nFetch information about the currently connected user account. Returns whether the call was a success.\n\n---\n\u003cb\u003e\u003ccode\u003eOnCurrentUserUpdated([FDiscordUser](#discord-user-fdiscorduser) User)\u003c/code\u003e (delegate)\u003c/b\u003e  \nFires when the `User` struct of the currently connected user changes. They may have changed their avatar, username, or something else.\n\n---\n**`void GetUser(const int64 UserID, TFunction\u003cvoid(discord::Result, discord::User const\u0026)\u003e Callback)`**  \nGet user information for a given User ID.\n\n---\n\u003cb\u003e\u003ccode\u003eTEnumAsByte\u003c[EDiscordPremiumTypes::Type](#discord-premium-types-ediscordpremiumtypes)\u003e GetCurrentUserPremiumType()\u003c/code\u003e\u003c/b\u003e  \nReturns the [EDiscordPremiumTypes](#discord-premium-types-ediscordpremiumtypes) of the current user.\n\n---\n\u003cb\u003e\u003ccode\u003ebool CurrentUserHasFlag([EDiscordUserFlags](#discord-user-flags-ediscorduserflags) Flag)\u003c/code\u003e\u003c/b\u003e  \nReturns whether the current user has the flag.\n\n### Discord User (`FDiscordUser`)\n\nFor C++ usage, has a converting constructor for the native Discord type, and can be converted to that type with `ToDiscordType()`.\n\n---\n**`int64 ID` (read-only)**  \nThe user's ID.\n\n---\n**`FString Username`**  \nTheir username. This is NOT the display name.\n\n---\n**`FString DEPRECATED_Discriminator`**  \nThe user's unique discriminator. This will only exist on \"legacy\" usernames, new usernames will have this as `0`. See their [help center article about this change](https://support.discord.com/hc/en-us/articles/12620128861463-New-Usernames-Display-Names).\n\n---\n**`FString Avatar`**  \nThe hash of the user's avatar. Not super useful on its own.\n\n---\n**`bool bIsBot`**  \nWhether the user is a bot.\n\n### Discord User Flags (`EDiscordUserFlags`)\n\nPossible values:\n\n- Partner (Discord Partner)\n- HypeSquadEvents (HypeSquad Events participant)\n- HypeSquadHouse1 (House Bravery)\n- HypeSquadHouse2 (House Brilliance)\n- HypeSquadHouse3 (House Balance)\n\n### Discord Premium Types (`EDiscordPremiumTypes`)\n\nPossible values:\n\n- None (No Nitro)\n- Tier 1 (Nitro Classic)\n- Tier 2 (Nitro)\n- Tier 3 (Nitro Basic)\n\n## Discord Overlay Manager (`UDiscordOverlayManager`)\n\n**`bool IsEnabled()`**  \nReturn whether the user has the overlay enabled or disabled. If the overlay is disabled, all the functionality in this manager will still work. The calls will instead focus the Discord client and show the modal there instead.\n\n---\n**`bool IsLocked()`**  \nReturn whether the overlay is currently locked or unlocked\n\n---\n**`OnToggled(bool bLocked)` (delegate)**  \nFires when the overlay is locked or unlocked (a.k.a. opened or closed).\n\n---\n**`void SetLocked(const bool bLocked, TFunction\u003cvoid(discord::Result)\u003e Callback)`**  \nLocks or unlocks input in the overlay. Calling `SetLocked(true)` will also close any modals in the overlay.\n\n---\n**`void OpenActivityInvite()`**  \nOpens the overlay modal for sending game invitations to users, channels, and servers. If you do not have a valid activity with all the required fields, this call will error.\n\n---\n**`void OpenGuildInvite(const FString InviteCode)`**  \nOpens the overlay modal for joining a Discord guild, given its invite code.\n\n---\n**`void OpenVoiceSettings()`**  \nOpens the overlay widget for voice settings for the currently connected application. These settings are unique to each user within the context of your application.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimjuniper%2Funrealdiscordgamesdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimjuniper%2Funrealdiscordgamesdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimjuniper%2Funrealdiscordgamesdk/lists"}