Created
August 20, 2019 17:23
-
-
Save msciotti/d6c130d1c26c53ac22a2e64971164a5d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using UnityEngine; | |
[Serializable] | |
public class DiscordJoinEvent : UnityEngine.Events.UnityEvent<string> {} | |
[Serializable] | |
public class DiscordSpectateEvent : UnityEngine.Events.UnityEvent<string> {} | |
[Serializable] | |
public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent<Discord.User> {} | |
public class DiscordController : MonoBehaviour | |
{ | |
public Discord.Discord discord; | |
public Int64 clientId; | |
public string optionalSteamId; | |
public int callbackCalls; | |
public int clickCounter; | |
public Discord.User joinRequest; | |
public UnityEngine.Events.UnityEvent onConnect; | |
public UnityEngine.Events.UnityEvent onDisconnect; | |
public UnityEngine.Events.UnityEvent hasResponded; | |
public UnityEngine.UI.RawImage Avatar; | |
public DiscordJoinEvent onJoin; | |
public DiscordJoinEvent onSpectate; | |
public DiscordJoinRequestEvent onJoinRequest; | |
public void OnClick() | |
{ | |
clickCounter++; | |
Discord.Activity activity = new Discord.Activity(); | |
activity.State = "Hello"; | |
activity.Details = string.Format("Button clicked {0} times", clickCounter); | |
var activityManager = discord.GetActivityManager(); | |
activityManager.UpdateActivity(activity, _ => | |
{ | |
Debug.Log("Discord: on click!"); | |
}); | |
} | |
public void RequestRespondYes() | |
{ | |
var activityManager = discord.GetActivityManager(); | |
activityManager.SendRequestReply(joinRequest.Id, Discord.ActivityJoinRequestReply.Yes, _ => | |
{ | |
Debug.Log("Discord: replied yes to Ask to Join request"); | |
}); | |
hasResponded.Invoke(); | |
} | |
public void RequestRespondNo() | |
{ | |
var activityManager = discord.GetActivityManager(); | |
activityManager.SendRequestReply(joinRequest.Id, Discord.ActivityJoinRequestReply.No, _ => | |
{ | |
Debug.Log("Discord: replied no to Ask to Join request"); | |
}); | |
hasResponded.Invoke(); | |
} | |
public void JoinCallback(string secret) | |
{ | |
++callbackCalls; | |
Debug.Log(string.Format("Discord: join ({0})", secret)); | |
onJoin.Invoke(secret); | |
} | |
public void SpectateCallback(string secret) | |
{ | |
++callbackCalls; | |
Debug.Log(string.Format("Discord: spectate ({0})", secret)); | |
onSpectate.Invoke(secret); | |
} | |
public void RequestCallback(ref Discord.User request) | |
{ | |
++callbackCalls; | |
Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.Username, request.Discriminator, request.Id)); | |
joinRequest = request; | |
onJoinRequest.Invoke(request); | |
} | |
public void ImageCallback(Discord.Result result, Discord.ImageHandle handle) | |
{ | |
++callbackCalls; | |
Debug.Log(string.Format("Discord: image {0} {1}", handle.Id, handle.Size)); | |
var imageManager = discord.GetImageManager(); | |
Avatar.texture = imageManager.GetTexture(handle); | |
} | |
public void CurrentUserCallback() | |
{ | |
++callbackCalls; | |
var userManager = discord.GetUserManager(); | |
var imageManager = discord.GetImageManager(); | |
var user = userManager.GetCurrentUser(); | |
imageManager.Fetch(Discord.ImageHandle.User(user.Id, 128), true, ImageCallback); | |
Debug.Log(string.Format("Discord: current user update {0}#{1}: {2}", user.Username, user.Discriminator, user.Id)); | |
onConnect.Invoke(); | |
} | |
void Start() {} | |
void Update() | |
{ | |
discord.RunCallbacks(); | |
} | |
void OnEnable() | |
{ | |
Debug.Log("Discord: init"); | |
callbackCalls = 0; | |
discord = new Discord.Discord(clientId, (UInt64)Discord.CreateFlags.Default); | |
discord.SetLogHook(Discord.LogLevel.Debug, (level, message) => | |
{ | |
Debug.Log(string.Format("Log[{0}] {1}", level, message)); | |
}); | |
var applicationManager = discord.GetApplicationManager(); | |
applicationManager.GetTicket((Discord.Result res, ref string ticket) => | |
{ | |
Debug.Log(ticket); | |
}); | |
} | |
void OnDisable() | |
{ | |
Debug.Log("Discord: shutdown"); | |
discord.Dispose(); | |
} | |
void OnDestroy() | |
{ | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment