diff --git a/Catalogger.Backend/Bot/ShardedGatewayClient.cs b/Catalogger.Backend/Bot/ShardedGatewayClient.cs index 2de70cd..5621389 100644 --- a/Catalogger.Backend/Bot/ShardedGatewayClient.cs +++ b/Catalogger.Backend/Bot/ShardedGatewayClient.cs @@ -115,7 +115,9 @@ public class ShardedGatewayClient( _logger.Information("Started shard {ShardId}/{ShardCount}", shardIndex, TotalShards); } - return await await Task.WhenAny(tasks); + var taskResult = await await Task.WhenAny(tasks); + Disconnect(); + return taskResult; } public int ShardIdFor(ulong guildId) => (int)((guildId >> 22) % (ulong)TotalShards); @@ -136,6 +138,17 @@ public class ShardedGatewayClient( client.Dispose(); } + private void Disconnect() + { + _logger.Information("Disconnecting from Discord"); + foreach (var shardId in _gatewayClients.Keys) + { + _logger.Debug("Disposing shard {shardId}", shardId); + if (_gatewayClients.Remove(shardId, out var client)) + client.Dispose(); + } + } + private IOptions CloneOptions( DiscordGatewayClientOptions options, int shardId diff --git a/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs b/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs index c9c7ec5..9917aec 100644 --- a/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs +++ b/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs @@ -20,7 +20,11 @@ public class TimeoutRepository(DatabaseConnection conn) : IDisposable, IAsyncDis ); public async Task> GetAllAsync() => - (await conn.QueryAsync("select * from timeouts order by id")).ToList(); + ( + await conn.QueryAsync( + "select * from timeouts where until > now() order by id" + ) + ).ToList(); public async Task SetAsync( Snowflake guildId,