Skip to content

Commit c28a034

Browse files
committed
feat: add /archiveclean command to purge bad entries
1 parent c41b725 commit c28a034

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

src/Modules/ArchiveModule.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,29 @@ public async Task ShowUserStats(IUser? user = null)
7474
await FollowupAsync(embed: embed.Build());
7575
}
7676

77+
[SlashCommand("archiveclean", "Purge messages that don't meet current archive filters")]
78+
[RequireUserPermission(GuildPermission.Administrator)]
79+
public async Task CleanArchive()
80+
{
81+
await DeferAsync(ephemeral: true);
82+
83+
var before = await _archive.GetArchiveStatsAsync();
84+
var deleted = await _archive.PurgeBadEntriesAsync();
85+
var after = await _archive.GetArchiveStatsAsync();
86+
87+
var embed = new EmbedBuilder
88+
{
89+
Title = "Archive Cleanup",
90+
Color = deleted > 0 ? Color.Green : Color.Blue
91+
};
92+
93+
embed.AddField("Deleted", $"{deleted:N0} messages", true);
94+
embed.AddField("Before", $"{before.TotalMessages:N0} messages", true);
95+
embed.AddField("After", $"{after.TotalMessages:N0} messages", true);
96+
97+
await FollowupAsync(embed: embed.Build(), ephemeral: true);
98+
}
99+
77100
static string FormatFileSize(long bytes) => bytes switch
78101
{
79102
< 1024 => $"{bytes} B",

src/Services/MessageArchiveService.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,29 @@ public async Task<ArchiveStats> GetArchiveStatsAsync()
299299
};
300300
}
301301

302+
public async Task<int> PurgeBadEntriesAsync()
303+
{
304+
await _dbLock.WaitAsync();
305+
try
306+
{
307+
using var ctx = CreateContext();
308+
var bad = await ctx.Messages
309+
.Where(m => m.Content.Length <= 2 || !char.IsLetter(m.Content[0]))
310+
.ToListAsync();
311+
var count = bad.Count;
312+
if (count > 0)
313+
{
314+
ctx.Messages.RemoveRange(bad);
315+
await ctx.SaveChangesAsync();
316+
}
317+
return count;
318+
}
319+
finally
320+
{
321+
_dbLock.Release();
322+
}
323+
}
324+
302325
static bool ShouldArchiveContent(string content)
303326
{
304327
if (string.IsNullOrEmpty(content)) return false;

0 commit comments

Comments
 (0)