using SharpChat.PacketsS2C; using System.Linq; namespace SharpChat.Commands { public class WhoCommand : ISockChatClientCommand { public bool IsMatch(SockChatClientCommandContext ctx) { return ctx.NameEquals("who"); } public void Dispatch(SockChatClientCommandContext ctx) { string? channelName = ctx.Args.FirstOrDefault(); if(string.IsNullOrEmpty(channelName)) { ctx.Chat.SendTo(ctx.User, new WhoServerResponseS2CPacket( ctx.Chat.Users.All.Select(u => SockChatUtility.GetUserNameWithStatus(u)).ToArray(), SockChatUtility.GetUserName(ctx.User) )); return; } ChannelInfo? channel = ctx.Chat.Channels.Get(channelName, SockChatUtility.SanitiseChannelName); if(channel == null) { ctx.Chat.SendTo(ctx.User, new ChannelNotFoundErrorS2CPacket(channelName)); return; } if(channel.Rank > ctx.User.Rank || (channel.HasPassword && !ctx.User.Permissions.HasFlag(UserPermissions.JoinAnyChannel))) { ctx.Chat.SendTo(ctx.User, new WhoChannelNotFoundErrorS2CPacket(channelName)); return; } ctx.Chat.SendTo(ctx.User, new WhoChannelResponseS2CPacket( channel.Name, ctx.Chat.GetChannelUsers(channel).Select(user => SockChatUtility.GetUserNameWithStatus(user)).ToArray(), SockChatUtility.GetUserNameWithStatus(ctx.User) )); } } }