diff --git a/Cliptok.csproj b/Cliptok.csproj index 77857bcc..3148e6b5 100644 --- a/Cliptok.csproj +++ b/Cliptok.csproj @@ -16,8 +16,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Events/ReadyEvent.cs b/Events/ReadyEvent.cs index 08735b1a..261fda59 100644 --- a/Events/ReadyEvent.cs +++ b/Events/ReadyEvent.cs @@ -158,27 +158,7 @@ public static async Task OnStartup(DiscordClient client) $"{commitMessage}\n" + $"```"); - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL"))) - { - HttpResponseMessage response; - try - { - response = await Program.httpClient.GetAsync(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL")); - } - catch (Exception ex) - { - discord.Logger.LogError(ex, "Uptime Kuma push failed during startup!"); - return; - } - if (response.StatusCode == HttpStatusCode.OK) - { - discord.Logger.LogDebug("Heartbeat ping succeeded."); - } - else - { - discord.Logger.LogError("Heartbeat ping sent: {status} {content}", (int)response.StatusCode, await response.Content.ReadAsStringAsync()); - } - } + await Tasks.HeartbeatTasks.HeartbeatAsync(); try { diff --git a/Program.cs b/Program.cs index f6c50923..215e70fc 100644 --- a/Program.cs +++ b/Program.cs @@ -1,6 +1,5 @@ using DSharpPlus.Commands.Processors.TextCommands.Parsing; using DSharpPlus.Extensions; -using DSharpPlus.Net.Gateway; using Serilog.Events; using Serilog.Sinks.Grafana.Loki; using System.Reflection; @@ -16,30 +15,6 @@ public class AvatarResponseBody public string Key { get; set; } } - class GatewayController : IGatewayController - { - public async Task HeartbeatedAsync(IGatewayClient client) - { - HeartbeatEvent.OnHeartbeat(client); - } - - public async Task ZombiedAsync(IGatewayClient client) - { - Program.discord.Logger.LogCritical("The gateway connection has zombied, and the bot is being restarted to reconnect reliably."); - Environment.Exit(1); - } - - public async Task ReconnectRequestedAsync(IGatewayClient _) { } - public async Task ReconnectFailedAsync(IGatewayClient _) - { - Program.discord.Logger.LogCritical("The gateway connection has irrecoverably failed, and the bot is being restarted to reconnect reliably."); - Environment.Exit(1); - } - public async Task SessionInvalidatedAsync(IGatewayClient _) { } - public async Task ResumeAttemptedAsync(IGatewayClient _) { } - - } - class Program { public static DiscordClient discord; @@ -212,11 +187,6 @@ static async Task Main(string[] _) logging.AddSerilog(); }); - discordBuilder.ConfigureServices(services => - { - services.Replace(); - }); - discordBuilder.UseCommands((_, builder) => { builder.CommandErrored += ErrorEvents.CommandErrored; @@ -338,6 +308,13 @@ static async Task Main(string[] _) loopCount += 1; + // every 5 loops (roughly 50 seconds), heartbeat + // skip first loop to avoid double-heartbeat when loopCount resets + if (loopCount != 0 && loopCount % 5 == 0) + { + await Tasks.HeartbeatTasks.HeartbeatAsync(); + } + // after 180 cycles, roughly 30 minutes has passed if (loopCount == 180) { diff --git a/Events/HeartbeatEvent.cs b/Tasks/HeartbeatTasks.cs similarity index 65% rename from Events/HeartbeatEvent.cs rename to Tasks/HeartbeatTasks.cs index 42e0c384..245f843f 100644 --- a/Events/HeartbeatEvent.cs +++ b/Tasks/HeartbeatTasks.cs @@ -1,34 +1,35 @@ -using DSharpPlus.Net.Gateway; - -namespace Cliptok.Events +namespace Cliptok.Tasks { - public class HeartbeatEvent + public class HeartbeatTasks { - public static async Task OnHeartbeat(IGatewayClient client) + public static async Task HeartbeatAsync() { - Program.discord.Logger.LogDebug("Heartbeat ping: {ping}", client.Ping.Milliseconds); - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL")) && client.IsConnected) + var ping = Program.discord.GetConnectionLatency(Program.homeGuild.Id).Milliseconds; + Program.discord.Logger.LogDebug("Heartbeat ping: {ping}", ping); + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL")) && Program.discord.AllShardsConnected) { HttpResponseMessage response; try { - response = await Program.httpClient.GetAsync(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL") + client.Ping.Milliseconds); + response = await Program.httpClient.GetAsync(Environment.GetEnvironmentVariable("UPTIME_KUMA_PUSH_URL") + ping); } catch (Exception ex) { Program.discord.Logger.LogError(ex, "Uptime Kuma push failed during heartbeat event!"); - return; + return false; } if (response.StatusCode == HttpStatusCode.OK) { Program.discord.Logger.LogDebug("Heartbeat ping succeeded."); + return true; } else { Program.discord.Logger.LogError("Heartbeat ping sent: {status} {content}", (int)response.StatusCode, await response.Content.ReadAsStringAsync()); + return false; } - return; } + return false; } } -} +} \ No newline at end of file