mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	change: Changed .leaveunkeptservers again to only accept startShardId, it will loop through the shards and execute clean on them every 2250 seconds (assuming shards are almost full). Delay is fixed at 1 second as that is the discord ratelimit
This commit is contained in:
		@@ -8,9 +8,13 @@ public partial class Administration
 | 
			
		||||
    public partial class CleanupCommands : CleanupModuleBase
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ICleanupService _svc;
 | 
			
		||||
        private readonly IBotCredsProvider _creds;
 | 
			
		||||
 | 
			
		||||
        public CleanupCommands(ICleanupService svc)
 | 
			
		||||
            => _svc = svc;
 | 
			
		||||
        public CleanupCommands(ICleanupService svc, IBotCredsProvider creds)
 | 
			
		||||
        {
 | 
			
		||||
            _svc = svc;
 | 
			
		||||
            _creds = creds;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
@@ -42,7 +46,7 @@ public partial class Administration
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
        public async Task LeaveUnkeptServers(int shardId, int delay = 1000)
 | 
			
		||||
        public async Task LeaveUnkeptServers(int startShardId)
 | 
			
		||||
        {
 | 
			
		||||
            var keptGuildCount = await _svc.GetKeptGuildCount();
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +62,12 @@ public partial class Administration
 | 
			
		||||
            if (!response)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            await _svc.LeaveUnkeptServers(shardId, delay);
 | 
			
		||||
            for (var i = startShardId; i < _creds.GetCreds().TotalShards; i++)
 | 
			
		||||
            {
 | 
			
		||||
                await _svc.LeaveUnkeptServers(startShardId);
 | 
			
		||||
                await Task.Delay(2250 * 1000);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await ctx.OkAsync();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ public sealed class CleanupService : ICleanupService, IReadyExecutor, INService
 | 
			
		||||
    private TypedKey<KeepReport> _cleanupReportKey = new("cleanup:report");
 | 
			
		||||
    private TypedKey<bool> _cleanupTriggerKey = new("cleanup:trigger");
 | 
			
		||||
 | 
			
		||||
    private TypedKey<(int, int)> _keepTriggerKey = new("keep:trigger");
 | 
			
		||||
    private TypedKey<int> _keepTriggerKey = new("keep:trigger");
 | 
			
		||||
 | 
			
		||||
    private readonly IPubSub _pubSub;
 | 
			
		||||
    private readonly DiscordSocketClient _client;
 | 
			
		||||
@@ -45,10 +45,8 @@ public sealed class CleanupService : ICleanupService, IReadyExecutor, INService
 | 
			
		||||
 | 
			
		||||
    private bool keepTriggered = false;
 | 
			
		||||
 | 
			
		||||
    private async ValueTask InternalTriggerKeep((int, int) data)
 | 
			
		||||
    private async ValueTask InternalTriggerKeep(int shardId)
 | 
			
		||||
    {
 | 
			
		||||
        var (shardId, delay) = data;
 | 
			
		||||
 | 
			
		||||
        if (_client.ShardId != shardId)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
@@ -74,13 +72,16 @@ public sealed class CleanupService : ICleanupService, IReadyExecutor, INService
 | 
			
		||||
                dontDelete = dontDeleteList.ToHashSet();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Log.Information("Leaving {RemainingCount} guilds every {Delay} seconds, {DontDeleteCount} will remain", allGuildIds.Length - dontDelete.Count, delay, dontDelete.Count);
 | 
			
		||||
            Log.Information("Leaving {RemainingCount} guilds every {Delay} seconds, {DontDeleteCount} will remain",
 | 
			
		||||
                allGuildIds.Length - dontDelete.Count,
 | 
			
		||||
                shardId,
 | 
			
		||||
                dontDelete.Count);
 | 
			
		||||
            foreach (var guildId in allGuildIds)
 | 
			
		||||
            {
 | 
			
		||||
                if (dontDelete.Contains(guildId))
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                await Task.Delay(delay);
 | 
			
		||||
                await Task.Delay(1016);
 | 
			
		||||
 | 
			
		||||
                SocketGuild? guild = null;
 | 
			
		||||
                try
 | 
			
		||||
@@ -236,8 +237,8 @@ public sealed class CleanupService : ICleanupService, IReadyExecutor, INService
 | 
			
		||||
        return await table.CountAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task LeaveUnkeptServers(int shardId, int delay)
 | 
			
		||||
        => await _pubSub.Pub(_keepTriggerKey, (shardId, delay));
 | 
			
		||||
    public async Task LeaveUnkeptServers(int shardId)
 | 
			
		||||
        => await _pubSub.Pub(_keepTriggerKey, shardId);
 | 
			
		||||
 | 
			
		||||
    private ValueTask OnKeepReport(KeepReport report)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,5 +5,5 @@ public interface ICleanupService
 | 
			
		||||
    Task<KeepResult?> DeleteMissingGuildDataAsync();
 | 
			
		||||
    Task<bool> KeepGuild(ulong guildId);
 | 
			
		||||
    Task<int> GetKeptGuildCount();
 | 
			
		||||
    Task LeaveUnkeptServers(int shardId, int delay);
 | 
			
		||||
    Task LeaveUnkeptServers(int shardId);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user