62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
using SharpChat.SockChat.S2CPackets;
|
|
using System.Text;
|
|
|
|
namespace SharpChat.ClientCommands;
|
|
|
|
public class WhoClientCommand : ClientCommand {
|
|
public bool IsMatch(ClientCommandContext ctx) {
|
|
return ctx.NameEquals("who");
|
|
}
|
|
|
|
public async Task Dispatch(ClientCommandContext ctx) {
|
|
long msgId = ctx.Chat.RandomSnowflake.Next();
|
|
StringBuilder whoChanSB = new();
|
|
string? whoChanStr = ctx.Args.FirstOrDefault();
|
|
|
|
if(string.IsNullOrEmpty(whoChanStr)) {
|
|
foreach(User whoUser in ctx.Chat.Users) {
|
|
whoChanSB.Append(@"<a href=""javascript:void(0);"" onclick=""UI.InsertChatText(this.innerHTML);""");
|
|
|
|
if(whoUser == ctx.User)
|
|
whoChanSB.Append(@" style=""font-weight: bold;""");
|
|
|
|
whoChanSB.Append('>');
|
|
whoChanSB.Append(whoUser.LegacyName);
|
|
whoChanSB.Append("</a>, ");
|
|
}
|
|
|
|
if(whoChanSB.Length > 2)
|
|
whoChanSB.Length -= 2;
|
|
|
|
await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.USERS_LISTING_SERVER, false, whoChanSB));
|
|
} else {
|
|
Channel? whoChan = ctx.Chat.Channels.FirstOrDefault(c => c.NameEquals(whoChanStr));
|
|
|
|
if(whoChan is null) {
|
|
await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.CHANNEL_NOT_FOUND, true, whoChanStr));
|
|
return;
|
|
}
|
|
|
|
if(whoChan.Rank > ctx.User.Rank || (whoChan.HasPassword && !ctx.User.Can(UserPermissions.JoinAnyChannel))) {
|
|
await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.USERS_LISTING_ERROR, true, whoChanStr));
|
|
return;
|
|
}
|
|
|
|
foreach(User whoUser in ctx.Chat.GetChannelUsers(whoChan)) {
|
|
whoChanSB.Append(@"<a href=""javascript:void(0);"" onclick=""UI.InsertChatText(this.innerHTML);""");
|
|
|
|
if(whoUser == ctx.User)
|
|
whoChanSB.Append(@" style=""font-weight: bold;""");
|
|
|
|
whoChanSB.Append('>');
|
|
whoChanSB.Append(whoUser.LegacyName);
|
|
whoChanSB.Append("</a>, ");
|
|
}
|
|
|
|
if(whoChanSB.Length > 2)
|
|
whoChanSB.Length -= 2;
|
|
|
|
await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.USERS_LISTING_CHANNEL, false, whoChan.Name, whoChanSB));
|
|
}
|
|
}
|
|
}
|