You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.6 KiB
61 lines
1.6 KiB
1 year ago
|
using System;
|
||
|
using DiscordRPC;
|
||
|
using DiscordRPC.Logging;
|
||
|
using Microsoft.Extensions.Logging;
|
||
|
|
||
|
namespace StabilityMatrix.Avalonia.Services;
|
||
|
|
||
|
public class DiscordRichPresenceService : IDiscordRichPresenceService
|
||
|
{
|
||
|
private const string ApplicationId = "1134669805237059615";
|
||
|
|
||
|
private readonly ILogger<DiscordRichPresenceService> logger;
|
||
|
private DiscordRpcClient? client;
|
||
|
|
||
|
public DiscordRichPresenceService(ILogger<DiscordRichPresenceService> logger)
|
||
|
{
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
|
||
|
public void Initialize()
|
||
|
{
|
||
|
if (client != null) return;
|
||
|
|
||
|
client = new DiscordRpcClient(ApplicationId);
|
||
|
client.Logger = new NullLogger();
|
||
|
|
||
|
client.OnReady += (sender, e) =>
|
||
|
{
|
||
|
logger.LogInformation("Received Ready from user {User}", e.User.Username);
|
||
|
};
|
||
|
|
||
|
client.OnPresenceUpdate += (sender, e) =>
|
||
|
{
|
||
|
logger.LogInformation("Received Update: {Presence}", e.Presence.ToString());
|
||
|
};
|
||
|
|
||
|
// Connect to the RPC
|
||
|
client.Initialize();
|
||
|
|
||
|
// Set rich presence
|
||
|
client.SetPresence(new RichPresence
|
||
|
{
|
||
|
Details = "Stability Matrix",
|
||
|
State = "In the main menu",
|
||
|
Assets = new DiscordRPC.Assets
|
||
|
{
|
||
|
LargeImageKey = "stabilitymatrix-logo-1",
|
||
|
LargeImageText = "Stability Matrix",
|
||
|
SmallImageKey = "stabilitymatrix-logo-1",
|
||
|
SmallImageText = "Stability Matrix"
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public void Dispose()
|
||
|
{
|
||
|
client?.Dispose();
|
||
|
GC.SuppressFinalize(this);
|
||
|
}
|
||
|
}
|