using System; using System.Text; namespace SharpChat.Packet { public class UsersPopulatePacket : ServerPacket { public record ListEntry(long Id, string Name, ChatColour Colour, int Rank, ChatUserPermissions Perms, bool Visible); private readonly ListEntry[] Entries; public UsersPopulatePacket(ListEntry[] entries) { Entries = entries ?? throw new ArgumentNullException(nameof(entries)); } public override string Pack() { StringBuilder sb = new(); sb.AppendFormat("7\t0\t{0}", Entries.Length); foreach(ListEntry entry in Entries) sb.AppendFormat( "\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}", entry.Id, entry.Name, entry.Colour, entry.Rank, entry.Perms.HasFlag(ChatUserPermissions.KickUser) ? 1 : 0, entry.Perms.HasFlag(ChatUserPermissions.ViewLogs) ? 1 : 0, entry.Perms.HasFlag(ChatUserPermissions.SetOwnNickname) ? 1 : 0, entry.Perms.HasFlag(ChatUserPermissions.CreateChannel) ? ( entry.Perms.HasFlag(ChatUserPermissions.SetChannelPermanent) ? 2 : 1 ) : 0, entry.Visible ? 1 : 0 ); return sb.ToString(); } } }