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