{"id":26260413,"url":"https://github.com/jakobbouchard/discordunrealengine","last_synced_at":"2025-03-13T23:14:50.756Z","repository":{"id":281583516,"uuid":"945732824","full_name":"jakobbouchard/DiscordUnrealEngine","owner":"jakobbouchard","description":"Unreal Engine support for Discord Rich Presence, Game Invites and Overlay.","archived":false,"fork":false,"pushed_at":"2025-03-10T03:26:15.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-10T03:55:58.685Z","etag":null,"topics":["discord","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/jakobbouchard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"jakobbouchard"}},"created_at":"2025-03-10T03:19:54.000Z","updated_at":"2025-03-10T03:26:20.000Z","dependencies_parsed_at":"2025-03-10T20:00:40.212Z","dependency_job_id":null,"html_url":"https://github.com/jakobbouchard/DiscordUnrealEngine","commit_stats":null,"previous_names":["jakobbouchard/discordunrealengine"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakobbouchard%2FDiscordUnrealEngine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakobbouchard%2FDiscordUnrealEngine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakobbouchard%2FDiscordUnrealEngine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakobbouchard%2FDiscordUnrealEngine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jakobbouchard","download_url":"https://codeload.github.com/jakobbouchard/DiscordUnrealEngine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243495495,"owners_count":20299923,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","unreal-engine"],"created_at":"2025-03-13T23:14:50.032Z","updated_at":"2025-03-13T23:14:50.749Z","avatar_url":"https://github.com/jakobbouchard.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 \u0026 5.5\n\n# Installation\n\n## Pre-built\n\n\u003e [!NOTE]\n\u003e I only provide prebuilt binaries for Unreal 5.5 at this moment.\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## 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**`UDiscordActivityManager* GetDiscordActivityManager()`**  \nReturns the current instance of [Discord Activity Manager](#discord-activity-manager).\n\n---\n**`UDiscordUserManager* GetDiscordUserManager()`**  \nReturns the current instance of [Discord User Manager](#discord-user-manager).\n\n---\n**`UDiscordOverlayManager* GetDiscordOverlayManager()`**  \nReturns the current instance of [Discord Overlay Manager](#discord-overlay-manager).\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\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\n\n**`void UpdateActivity(const FDiscordActivity NewActivity, TFunction\u003cvoid(discord::Result)\u003e Callback)`**  \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\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\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\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\n\n**`void SendRequestReply(const int64 UserID, const EDiscordActivityJoinRequestReplyTypes::Type Reply, TFunction\u003cvoid(discord::Result)\u003e Callback)`**  \nSends a reply to an Ask to Join request.\n\n---\n\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\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**`FDiscordActivityTimestamps Timestamps`**  \nHelps create elapsed/remaining timestamps on a player's profile.\n\n---\n**`FDiscordActivityAssets Assets`**  \nAssets to display on the player's profile.\n\n---\n**`FDiscordActivityParty Party`**  \nInformation about the player's party.\n\n---\n**`FDiscordActivitySecrets Secrets`**  \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**`bool GetCurrentUser(FDiscordUser\u0026 User)`**  \nFetch information about the currently connected user account. Returns whether the call was a success.\n\n---\n**`OnCurrentUserUpdated(FDiscordUser User)` (delegate)**  \nFires when the `User` struct of the currently connected user changes. They may have changed their avatar, username, or something else.\n\n---\n\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\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**`TEnumAsByte\u003cEDiscordPremiumTypes::Type\u003e GetCurrentUserPremiumType()`**  \nReturns the [EDiscordPremiumTypes](#discord-premium-types-enum) of the current user.\n\n---\n**`bool CurrentUserHasFlag(EDiscordUserFlags Flag)`**  \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\u003e [!NOTE]\n\u003e The Blueprint version is latent and doesn't return the error code, it just has pins for **Success** and **Failed**.\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%2Fjakobbouchard%2Fdiscordunrealengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjakobbouchard%2Fdiscordunrealengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakobbouchard%2Fdiscordunrealengine/lists"}