/ examples / button-clicker / Assets / DiscordController.cs
DiscordController.cs
  1  using UnityEngine;
  2  
  3  [System.Serializable]
  4  public class DiscordJoinEvent : UnityEngine.Events.UnityEvent<string> { }
  5  
  6  [System.Serializable]
  7  public class DiscordSpectateEvent : UnityEngine.Events.UnityEvent<string> { }
  8  
  9  [System.Serializable]
 10  public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent<DiscordRpc.DiscordUser> { }
 11  
 12  public class DiscordController : MonoBehaviour
 13  {
 14      public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence();
 15      public string applicationId;
 16      public string optionalSteamId;
 17      public int clickCounter;
 18      public DiscordRpc.DiscordUser joinRequest;
 19      public UnityEngine.Events.UnityEvent onConnect;
 20      public UnityEngine.Events.UnityEvent onDisconnect;
 21      public UnityEngine.Events.UnityEvent hasResponded;
 22      public DiscordJoinEvent onJoin;
 23      public DiscordJoinEvent onSpectate;
 24      public DiscordJoinRequestEvent onJoinRequest;
 25  
 26      DiscordRpc.EventHandlers handlers;
 27  
 28      public void OnClick()
 29      {
 30          Debug.Log("Discord: on click!");
 31          clickCounter++;
 32  
 33          presence.details = string.Format("Button clicked {0} times", clickCounter);
 34          presence.joinSecret = "aSecret";
 35          presence.partyId = "aPartyId";
 36          presence.partySize = 1;
 37          presence.partyMax = 3;
 38          presence.partyPrivacy = DiscordRpc.PartyPrivacy.Public;
 39  
 40          DiscordRpc.UpdatePresence(presence);
 41      }
 42  
 43      public void RequestRespondYes()
 44      {
 45          Debug.Log("Discord: responding yes to Ask to Join request");
 46          DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.Yes);
 47          hasResponded.Invoke();
 48      }
 49  
 50      public void RequestRespondNo()
 51      {
 52          Debug.Log("Discord: responding no to Ask to Join request");
 53          DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.No);
 54          hasResponded.Invoke();
 55      }
 56  
 57      public void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser)
 58      {
 59          Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId));
 60          onConnect.Invoke();
 61      }
 62  
 63      public void DisconnectedCallback(int errorCode, string message)
 64      {
 65          Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message));
 66          onDisconnect.Invoke();
 67      }
 68  
 69      public void ErrorCallback(int errorCode, string message)
 70      {
 71          Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message));
 72      }
 73  
 74      public void JoinCallback(string secret)
 75      {
 76          Debug.Log(string.Format("Discord: join ({0})", secret));
 77          onJoin.Invoke(secret);
 78      }
 79  
 80      public void SpectateCallback(string secret)
 81      {
 82          Debug.Log(string.Format("Discord: spectate ({0})", secret));
 83          onSpectate.Invoke(secret);
 84      }
 85  
 86      public void RequestCallback(ref DiscordRpc.DiscordUser request)
 87      {
 88          Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId));
 89          joinRequest = request;
 90          onJoinRequest.Invoke(request);
 91      }
 92  
 93      void Start()
 94      {
 95      }
 96  
 97      void Update()
 98      {
 99          DiscordRpc.RunCallbacks();
100      }
101  
102      void OnEnable()
103      {
104          Debug.Log("Discord: init");
105          handlers = new DiscordRpc.EventHandlers();
106          handlers.readyCallback += ReadyCallback;
107          handlers.disconnectedCallback += DisconnectedCallback;
108          handlers.errorCallback += ErrorCallback;
109          handlers.joinCallback += JoinCallback;
110          handlers.spectateCallback += SpectateCallback;
111          handlers.requestCallback += RequestCallback;
112          DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId);
113      }
114  
115      void OnDisable()
116      {
117          Debug.Log("Discord: shutdown");
118          DiscordRpc.Shutdown();
119      }
120  
121      void OnDestroy()
122      {
123  
124      }
125  }