Authenticate with Discord #

In this section, we’ll log into the platform with Discord. This method is appropriate for use in production. A Discord account is required to complete this section.

Complete Set Up the Unity SDK and Log Into the Platform before starting this section.

Discord admin panel setup #

  1. Log into the Discord Admin Panel.
  2. Click on the Applications tab, then click the New Application button.
If the application has already been created, then you can click on it under My Applications.

  1. Name your application, then click the Create button.

  1. (optional) After your application has been created, you can click on the Bot section in the left sidebar, then click the Add Bot button. Confirm that you wish to create a bot. Once the bot has been created, click Reset Token and save the generated token–you can use this later in your config as the botToken.

  1. Click on OAuth2 in the left sidebar, then click the Add Redirect button. Paste the following URL: http://localhost:11000/v1/account/discord-redirect. Click the Save Changes button.

  1. In the left sidebar, click URL Generator which is nested under OAuth2. Tick the identify and email boxes, then choose http://localhost:11000/v1/account/discord-redirect under the Select Redirect URL dropdown.

Configure the Pragma Engine Discord Identity Provider #

  1. Obtain your clientSecret and clientId from the OAuth2 General tab of your application in the Discord Admin Panel. If you have not yet been issued a Client Secret, click the Reset Secret button.

The fields botToken, guildId, and authorizedRoleId are only required if you plan on using a bot to automatically authorize users from your Discord server who have a specific role.
  1. Open the User Settings cog in your Discord client, then scroll down to Advanced and toggle on Developer Mode.

  2. Access your guildId by right-clicking on a server and selecting Copy ID.

  3. Access your authorizedRoleId by opening Server Settings within a server, opening the Roles page, right-clicking on the desired Role, and selecting Copy ID.

  4. Navigate to the pragma-engine/platform/<PROJECT>/config/ directory and open local-dev.yml.

  5. Insert the following code while making sure to edit in your clientId, clientSecret, and redirectUri:

social:
  pluginConfigs:
    AccountService.identityProviderPlugins:
      plugins:
        Discord:
          class: "pragma.account.DiscordIdentityProviderPlugin"
          config:
            clientId: "${discordClientId}"
            clientSecret: "${discordClientSecret}"
            redirectUri: "http://localhost:11000/v1/account/discord-redirect"
            botToken: "${discordBotToken}"
            guildId: "${guildId}"
            allowedRoleIds: 
              1: "${RoleId1}"
              2: "${RoleId2}"
            playerLoginEnabled: true
            operatorLoginEnabled: false
            accountLinkingEnabled: true
            showPortalLoginButton: false
            visibleToOtherPlayers: false
  1. Run Pragma Engine via one of the following methods.
Running via Command Line
From your pragma-engine/platform working directory, run ./pragma run to start the platform.
Running in IntelliJ
Run Pragma from the IDE by selecting the ‘Run Pragma’ run configuration from the dropdown in the upper right.

Once the engine has started successfully, it prints the message INFO main - Pragma server startup complete.

Import the Discord SDK into Unity #

  1. Download the Discord SDK from the Discord Developer site.
  2. Follow the directions on the Discord developer site to import the Discord SDK into your Unity project.
  3. Remove the x86 folder from your Unity Project’s Assets/Plugins directory.
If you’re building for a 32-bit platform, then remove the x86-64 folder instead.
  1. Open your game project in Unity Editor.

Integrate your game with Discord #

  1. In the Project panel, navigate to your Scripts directory and create a new DiscordController C# script.

  2. Replace the contents of DiscordController with the following code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Discord;

public class DiscordController : MonoBehaviour
{

    public Discord.Discord discord;

    [SerializeField] private PragmaManager pragmaManager;

    // Use this for initialization
    void Start()
    {
        pragmaManager = this.GetComponent<PragmaManager>();
        discord = new Discord.Discord(
            "**INSERT YOUR DISCORD APPLICATION CLIENT ID HERE**",
            (System.UInt64)Discord.CreateFlags.Default
        );
    }

    // Update is called once per frame
    void Update()
    {
        discord.RunCallbacks();
    }

    public void DiscordLogin()
    {
        var appManager = discord.GetApplicationManager();

        // Retrieve the token
        appManager.GetOAuth2Token((Discord.Result result, ref Discord.OAuth2Token token) =>
        {
            Debug.Log(token.AccessToken);
            // Now send that token off to your server to do your own validation!
            pragmaManager.LoginViaDiscord(token.AccessToken);
            return;
        });
    }
}
  1. Open the PragmaManager script and add the following method to the class:
public void LoginViaDiscord(string discordToken)
{
    player.LogIn(IdProvider.Discord, discordToken, HandleLoggedIn);
}
  1. In Unity Editor, locate the DiscordController script in the Project panel under Assets/Scripts. Drag the DiscordController script onto PragmaManager in the Hierarchy panel.

  1. Select the Login button in the Hierarchy panel. In the Inspector panel, change the On Click () function to DiscordController.DiscordLogin ().

  1. Ensure that you have Discord running and that you’re logged in.

  2. In Unity Editor, click the play button, then click the Login button. You may need to authorize the login.

  3. Navigate to your local Pragma Portal then sign in via Pragma Unsafe using the test04 account.

  4. Confirm that you see both the test04 account and your Discord account’s display name in the list of logged-in players.

  5. Click on the Discord account’s display name. Under the Identity providers section, verify that the account’s identity provider is Discord.