Skip to content

Instantly share code, notes, and snippets.

@msciotti
Created August 20, 2019 17:23
Show Gist options
  • Save msciotti/d6c130d1c26c53ac22a2e64971164a5d to your computer and use it in GitHub Desktop.
Save msciotti/d6c130d1c26c53ac22a2e64971164a5d to your computer and use it in GitHub Desktop.
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