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 OnClick()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 35 DiscordRpc.UpdatePresence(presence); 36 } 37 RequestRespondYes()38 public void RequestRespondYes() 39 { 40 Debug.Log("Discord: responding yes to Ask to Join request"); 41 DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.Yes); 42 hasResponded.Invoke(); 43 } 44 RequestRespondNo()45 public void RequestRespondNo() 46 { 47 Debug.Log("Discord: responding no to Ask to Join request"); 48 DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.No); 49 hasResponded.Invoke(); 50 } 51 ReadyCallback(ref DiscordRpc.DiscordUser connectedUser)52 public void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser) 53 { 54 Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId)); 55 onConnect.Invoke(); 56 } 57 DisconnectedCallback(int errorCode, string message)58 public void DisconnectedCallback(int errorCode, string message) 59 { 60 Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message)); 61 onDisconnect.Invoke(); 62 } 63 ErrorCallback(int errorCode, string message)64 public void ErrorCallback(int errorCode, string message) 65 { 66 Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message)); 67 } 68 JoinCallback(string secret)69 public void JoinCallback(string secret) 70 { 71 Debug.Log(string.Format("Discord: join ({0})", secret)); 72 onJoin.Invoke(secret); 73 } 74 SpectateCallback(string secret)75 public void SpectateCallback(string secret) 76 { 77 Debug.Log(string.Format("Discord: spectate ({0})", secret)); 78 onSpectate.Invoke(secret); 79 } 80 RequestCallback(ref DiscordRpc.DiscordUser request)81 public void RequestCallback(ref DiscordRpc.DiscordUser request) 82 { 83 Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId)); 84 joinRequest = request; 85 onJoinRequest.Invoke(request); 86 } 87 Start()88 void Start() 89 { 90 } 91 Update()92 void Update() 93 { 94 DiscordRpc.RunCallbacks(); 95 } 96 OnEnable()97 void OnEnable() 98 { 99 Debug.Log("Discord: init"); 100 handlers = new DiscordRpc.EventHandlers(); 101 handlers.readyCallback += ReadyCallback; 102 handlers.disconnectedCallback += DisconnectedCallback; 103 handlers.errorCallback += ErrorCallback; 104 handlers.joinCallback += JoinCallback; 105 handlers.spectateCallback += SpectateCallback; 106 handlers.requestCallback += RequestCallback; 107 DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId); 108 } 109 OnDisable()110 void OnDisable() 111 { 112 Debug.Log("Discord: shutdown"); 113 DiscordRpc.Shutdown(); 114 } 115 OnDestroy()116 void OnDestroy() 117 { 118 119 } 120 } 121