Singularity/Assets/Scripts/DiscordController.cs
2024-05-06 11:45:45 -07:00

92 lines
2.0 KiB
C#

using Discord;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
public class DiscordController : MonoBehaviour
{
//https://discord.com/developers/applications/
[SerializeField] private long applicationID;
[SerializeField] private string largeText; // App Name
[SerializeField] private string largeImage; // Name of image
[SerializeField] public string details; // Info 1 (top) 3 - 4 word description
[SerializeField] public string Location; // Info 2 (bottom) usually link
[SerializeField] private TextMeshProUGUI ModTitle;
private long time;
private static bool instanceExists;
public Discord.Discord discord;
void Awake()
{
// Transition the GameObject between scenes, destroy any duplicates
if (!instanceExists) {
instanceExists = true;
DontDestroyOnLoad(gameObject);
} else if (FindObjectsOfType(GetType()).Length > 1) {
Destroy(gameObject);
}
}
void Start() {
discord = new Discord.Discord(applicationID, (ulong)CreateFlags.NoRequireDiscord);
time = System.DateTimeOffset.Now.ToUnixTimeMilliseconds();
UpdateStatus();
}
void Update() {
try {
discord.RunCallbacks();
} catch {
Debug.LogError("Failed connecting to Discord!");
Destroy(gameObject);
}
}
void LateUpdate() {
UpdateStatus();
}
public string GetCurrentSceneName()
{
return SceneManager.GetActiveScene().name;
}
void UpdateStatus() {
string modTitle = Location;
if (ModTitle.text != "New Text") {
modTitle = "Viewing: "+ModTitle.text;
}
try {
var activityManager = discord.GetActivityManager();
var activity = new Activity {
#if UNITY_EDITOR
Details = $"Working on {largeText}",
#else
Details = details,
#endif
State = modTitle,
Assets = {
LargeImage = largeImage,
LargeText = largeText
},
Timestamps ={
Start = time
}
};
activityManager.UpdateActivity(activity, (res) => {
if (res != Result.Ok)
Debug.LogError("Failed connecting to Discord!");
});
} catch {
Debug.LogError("Failed connecting to Discord!");
}
}
}