diff --git a/PluralKit.Bot/Init.cs b/PluralKit.Bot/Init.cs index 9fd600a1..8578d2d6 100644 --- a/PluralKit.Bot/Init.cs +++ b/PluralKit.Bot/Init.cs @@ -51,6 +51,12 @@ public class Init var bot = services.Resolve(); bot.Init(); + // if we're running single-process, clear any existing shard status from the database + var config = services.Resolve(); + var repo = services.Resolve(); + if (config.Cluster == null) + await repo.ClearShardStatus(); + // Start the Discord shards themselves (handlers already set up) logger.Information("Connecting to Discord"); await StartCluster(services); diff --git a/PluralKit.Core/Database/Repository/ModelRepository.Shards.cs b/PluralKit.Core/Database/Repository/ModelRepository.Shards.cs index 3ad24c30..1006b0f9 100644 --- a/PluralKit.Core/Database/Repository/ModelRepository.Shards.cs +++ b/PluralKit.Core/Database/Repository/ModelRepository.Shards.cs @@ -14,6 +14,8 @@ public partial class ModelRepository "insert into shards (id, status) values (@Id, @Status) on conflict (id) do update set status = @Status", new { Id = shard, Status = status }); + public Task ClearShardStatus() => _db.Execute(conn => conn.ExecuteAsync("update shards set status = 0")); + public Task RegisterShardHeartbeat(IPKConnection conn, int shard, Duration ping) => conn.ExecuteAsync( "insert into shards (id, last_heartbeat, ping) values (@Id, now(), @Ping) on conflict (id) do update set last_heartbeat = now(), ping = @Ping",