using DiscordRPC;
using Ryujinx.Common;
using Ryujinx.Ui.Common.Configuration;
namespace Ryujinx.Ui.Common
{
public static class DiscordIntegrationModule
private const string Description = "A simple, experimental Nintendo Switch emulator.";
private const string CliendId = "568815339807309834";
private static DiscordRpcClient _discordClient;
private static RichPresence _discordPresenceMain;
public static void Initialize()
_discordPresenceMain = new RichPresence
Assets = new Assets
LargeImageKey = "ryujinx",
LargeImageText = Description
},
Details = "Main Menu",
State = "Idling",
Timestamps = Timestamps.Now,
Buttons = new Button[]
new Button()
Label = "Website",
Url = "https://ryujinx.org/"
}
};
ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
private static void Update(object sender, ReactiveEventArgs<bool> evnt)
if (evnt.OldValue != evnt.NewValue)
// If the integration was active, disable it and unload everything
if (evnt.OldValue)
_discordClient?.Dispose();
_discordClient = null;
// If we need to activate it and the client isn't active, initialize it
if (evnt.NewValue && _discordClient == null)
_discordClient = new DiscordRpcClient(CliendId);
_discordClient.Initialize();
_discordClient.SetPresence(_discordPresenceMain);
public static void SwitchToPlayingState(string titleId, string titleName)
_discordClient?.SetPresence(new RichPresence
LargeImageKey = "game",
LargeImageText = titleName,
SmallImageKey = "ryujinx",
SmallImageText = Description,
Details = $"Playing {titleName}",
State = (titleId == "0000000000000000") ? "Homebrew" : titleId.ToUpper(),
});
public static void SwitchToMainMenu()
_discordClient?.SetPresence(_discordPresenceMain);
public static void Exit()