using SharpChat.Bans; using SharpChat.SockChat.S2CPackets; namespace SharpChat.ClientCommands; public class BanListClientCommand(BansClient bansClient) : ClientCommand { public bool IsMatch(ClientCommandContext ctx) { return ctx.NameEquals("bans") || ctx.NameEquals("banned"); } public async Task Dispatch(ClientCommandContext ctx) { long msgId = ctx.Chat.RandomSnowflake.Next(); if(!ctx.User.Can(UserPermissions.BanUser | UserPermissions.KickUser)) { await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.COMMAND_NOT_ALLOWED, true, $"/{ctx.Name}")); return; } try { BanInfo[] banInfos = await bansClient.BanGetListAsync(); await ctx.Chat.SendTo(ctx.User, new BanListS2CPacket( msgId, banInfos.Select(bi => new BanListS2CPacket.Entry(bi.Kind, bi.ToString())) )); } catch(Exception) { await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.GENERIC_ERROR, true)); } } }