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 }