diff --git a/examples/button-clicker/Assets/DiscordController.cs b/examples/button-clicker/Assets/DiscordController.cs index bde8ac3..80b1f7b 100644 --- a/examples/button-clicker/Assets/DiscordController.cs +++ b/examples/button-clicker/Assets/DiscordController.cs @@ -51,9 +51,15 @@ public class DiscordController : MonoBehaviour { { ++callbackCalls; Debug.Log(string.Format("Discord: spectate ({0})", secret)); - } + } - void Start () { + public void RequestCallback(DiscordRpc.JoinRequest request) + { + ++callbackCalls; + Debug.Log(string.Format("Discord: join request {0}: {1}", request.username, request.userId)); + } + + void Start () { } void Update () { @@ -71,6 +77,7 @@ public class DiscordController : MonoBehaviour { handlers.errorCallback += ErrorCallback; handlers.joinCallback += JoinCallback; handlers.spectateCallback += SpectateCallback; + handlers.requestCallback += RequestCallback; DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId); } diff --git a/examples/button-clicker/Assets/DiscordRpc.cs b/examples/button-clicker/Assets/DiscordRpc.cs index 47d4da9..de34239 100644 --- a/examples/button-clicker/Assets/DiscordRpc.cs +++ b/examples/button-clicker/Assets/DiscordRpc.cs @@ -17,14 +17,18 @@ public class DiscordRpc [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void SpectateCallback(string secret); - public struct EventHandlers + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void RequestCallback(JoinRequest request); + + public struct EventHandlers { public ReadyCallback readyCallback; public DisconnectedCallback disconnectedCallback; public ErrorCallback errorCallback; public JoinCallback joinCallback; public SpectateCallback spectateCallback; - } + public RequestCallback requestCallback; + } [System.Serializable] public struct RichPresence @@ -46,6 +50,24 @@ public class DiscordRpc public bool instance; } + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct JoinRequest + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 24)] + public string userId; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)] + public string username; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string avatarUrl; + } + + public enum Reply + { + No = 0, + Yes = 1, + Ignore = 2 + } + [DllImport("discord-rpc", EntryPoint = "Discord_Initialize", CallingConvention = CallingConvention.Cdecl)] public static extern void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId); @@ -57,5 +79,8 @@ public class DiscordRpc [DllImport("discord-rpc", EntryPoint = "Discord_UpdatePresence", CallingConvention = CallingConvention.Cdecl)] public static extern void UpdatePresence(ref RichPresence presence); + + [DllImport("discord-rpc", EntryPoint = "Discord_Respond", CallingConvention = CallingConvention.Cdecl)] + public static extern void Respond(string userId, Reply reply); }