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