// TODO: Pre-render messages into row-lists, split on \n and width. ANSIString RenderMessage(ChatBuffer.MessageData msg) { if (msg.RenderedMessage == null) { var build = new ANSIString(); if (msg.Timestamp.Date == DateTime.Now.Date) { build.Append($"[{msg.Timestamp.ToString("HH:mm")}]".Color(ConsoleColor.Gray)); } else { build.Append($"[{msg.Timestamp.ToString("yyyy-MM-dd")}]".Color(ConsoleColor.Gray)); } ANSIString message = new ANSIRenderer().Render(msg.RawMessage); bool action = message.PlainString.StartsWith("/me", StringComparison.CurrentCultureIgnoreCase); build.Append(action ? "*" : " "); if (msg.Sender?.Name != null) { build.Append(msg.Sender.ToANSIString(Channel, true)); } else { build.Append("System".Color(ConsoleColor.DarkGray)); } if (action) { if (message.PlainString.StartsWith("/me's", StringComparison.CurrentCultureIgnoreCase)) { build.Append(message.Substring(3)); } else { build.Append(new ANSIString(" ") + message.Substring(4)); } } else { build.Append(new ANSIString(": ") + message); } msg.RenderedMessage = build; } return(msg.RenderedMessage); }