Пример #1
0
        // 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);
        }