From 178a89d912f535e23f74154a00fa6a816e3f2b89 Mon Sep 17 00:00:00 2001 From: barelyprofessional <150058423+barelyprofessional@users.noreply.github.com> Date: Mon, 17 Feb 2025 21:15:39 +0800 Subject: [PATCH] Add ignore and unignore commands --- KfChatDotNetBot/Commands/AdminCommands.cs | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/KfChatDotNetBot/Commands/AdminCommands.cs b/KfChatDotNetBot/Commands/AdminCommands.cs index d5245e5..66d63b6 100644 --- a/KfChatDotNetBot/Commands/AdminCommands.cs +++ b/KfChatDotNetBot/Commands/AdminCommands.cs @@ -257,4 +257,72 @@ public class DeleteMessagesCommand : ICommand await botInstance.KfClient.DeleteMessageAsync(msg.ChatMessageId.Value); } } +} + +public class IgnoreCommand : ICommand +{ + public List Patterns => [ + new Regex(@"^admin ignore (?\d+)$") + ]; + + public string? HelpText => "Ignore a user by ID"; + public UserRight RequiredRight => UserRight.TrueAndHonest; + public TimeSpan Timeout => TimeSpan.FromSeconds(10); + + public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, + CancellationToken ctx) + { + await using var db = new ApplicationDbContext(); + var targetUser = await db.Users.FirstOrDefaultAsync(u => u.KfId == int.Parse(arguments["user_id"].Value), + cancellationToken: ctx); + if (targetUser == null) + { + await botInstance.SendChatMessageAsync("Can't find user", true); + return; + } + + if (targetUser.Ignored) + { + await botInstance.SendChatMessageAsync($"User {targetUser.KfUsername} has already been ignored", true); + return; + } + + targetUser.Ignored = true; + await db.SaveChangesAsync(ctx); + await botInstance.SendChatMessageAsync($"Now ignoring {targetUser.KfUsername}", true); + } +} + +public class UnignoreCommand : ICommand +{ + public List Patterns => [ + new Regex(@"^admin unignore (?\d+)$") + ]; + + public string? HelpText => "Unignore a user by ID"; + public UserRight RequiredRight => UserRight.TrueAndHonest; + public TimeSpan Timeout => TimeSpan.FromSeconds(10); + + public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, + CancellationToken ctx) + { + await using var db = new ApplicationDbContext(); + var targetUser = await db.Users.FirstOrDefaultAsync(u => u.KfId == int.Parse(arguments["user_id"].Value), + cancellationToken: ctx); + if (targetUser == null) + { + await botInstance.SendChatMessageAsync("Can't find user", true); + return; + } + + if (!targetUser.Ignored) + { + await botInstance.SendChatMessageAsync($"User {targetUser.KfUsername} is not ignored", true); + return; + } + + targetUser.Ignored = false; + await db.SaveChangesAsync(ctx); + await botInstance.SendChatMessageAsync($"No longer ignoring {targetUser.KfUsername}", true); + } } \ No newline at end of file