diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs b/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs index f45d2dbb..22f3d9c6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs @@ -24,6 +24,12 @@ internal static class DiscordController public static async ValueTask SetDefaultActivityAsync(DateTimeOffset startTime) { ResetManagerOrIgnore(HutaoAppId); + + if (discordManager is null) + { + return Result.Ok; + } + ActivityManager activityManager = discordManager.GetActivityManager(); Activity activity = default; @@ -37,6 +43,12 @@ internal static class DiscordController public static async ValueTask SetPlayingYuanShenAsync() { ResetManagerOrIgnore(YuanshenId); + + if (discordManager is null) + { + return Result.Ok; + } + ActivityManager activityManager = discordManager.GetActivityManager(); Activity activity = default; @@ -54,6 +66,12 @@ internal static class DiscordController public static async ValueTask SetPlayingGenshinImpactAsync() { ResetManagerOrIgnore(GenshinImpactId); + + if (discordManager is null) + { + return Result.Ok; + } + ActivityManager activityManager = discordManager.GetActivityManager(); Activity activity = default; @@ -88,7 +106,6 @@ internal static class DiscordController } } - [MemberNotNull(nameof(discordManager))] private static unsafe void ResetManagerOrIgnore(long clientId) { if (discordManager?.ClientId == clientId) @@ -96,6 +113,13 @@ internal static class DiscordController return; } + // Actually requires a discord client to be running on Windows platform. + // If not, the following creation code will throw. + if (System.Diagnostics.Process.GetProcessesByName("Discord").Length == 0) + { + return; + } + lock (SyncRoot) { discordManager?.Dispose();