public override async Task WriteMessageAsync(Message message)
        {
            await Writer.WriteLineAsync(PlainTextRenderingLogic.FormatMessage(Context, message));

            await Writer.WriteLineAsync();

            _messageCount++;
        }
Exemplo n.º 2
0
        public override async Task RenderMessageAsync(Message message)
        {
            // Render preamble if it's the first entry
            if (!_isPreambleRendered)
            {
                await Writer.WriteLineAsync(PlainTextRenderingLogic.FormatPreamble(Context));

                _isPreambleRendered = true;
            }

            await Writer.WriteLineAsync(PlainTextRenderingLogic.FormatMessage(Context, message));

            await Writer.WriteLineAsync();
        }
Exemplo n.º 3
0
 public override async Task WritePreambleAsync()
 {
     await Writer.WriteLineAsync(PlainTextRenderingLogic.FormatPreamble(Context));
 }
        public override async Task WritePostambleAsync()
        {
            await Writer.WriteLineAsync();

            await Writer.WriteLineAsync(PlainTextRenderingLogic.FormatPostamble(_messageCount));
        }
        public override async Task WriteMessageAsync(Message message)
        {
            _writer.WriteStartObject();

            // Metadata
            _writer.WriteString("id", message.Id);
            _writer.WriteString("type", message.Type.ToString());
            _writer.WriteString("timestamp", message.Timestamp);
            _writer.WriteString("timestampEdited", message.EditedTimestamp);
            _writer.WriteBoolean("isPinned", message.IsPinned);

            // Content
            var content = PlainTextRenderingLogic.FormatMessageContent(Context, message);

            _writer.WriteString("content", content);

            // Author
            _writer.WriteStartObject("author");
            _writer.WriteString("id", message.Author.Id);
            _writer.WriteString("name", message.Author.Name);
            _writer.WriteString("discriminator", $"{message.Author.Discriminator:0000}");
            _writer.WriteBoolean("isBot", message.Author.IsBot);
            _writer.WriteString("avatarUrl", message.Author.AvatarUrl);
            _writer.WriteEndObject();

            // Attachments
            _writer.WriteStartArray("attachments");

            foreach (var attachment in message.Attachments)
            {
                _writer.WriteStartObject();

                _writer.WriteString("id", attachment.Id);
                _writer.WriteString("url", attachment.Url);
                _writer.WriteString("fileName", attachment.FileName);
                _writer.WriteNumber("fileSizeBytes", (long)attachment.FileSize.Bytes);

                _writer.WriteEndObject();
            }

            _writer.WriteEndArray();

            // Embeds
            _writer.WriteStartArray("embeds");

            foreach (var embed in message.Embeds)
            {
                _writer.WriteStartObject();

                _writer.WriteString("title", embed.Title);
                _writer.WriteString("url", embed.Url);
                _writer.WriteString("timestamp", embed.Timestamp);
                _writer.WriteString("description", embed.Description);

                // Author
                if (embed.Author != null)
                {
                    _writer.WriteStartObject("author");
                    _writer.WriteString("name", embed.Author.Name);
                    _writer.WriteString("url", embed.Author.Url);
                    _writer.WriteString("iconUrl", embed.Author.IconUrl);
                    _writer.WriteEndObject();
                }

                // Thumbnail
                if (embed.Thumbnail != null)
                {
                    _writer.WriteStartObject("thumbnail");
                    _writer.WriteString("url", embed.Thumbnail.Url);
                    _writer.WriteNumber("width", embed.Thumbnail.Width);
                    _writer.WriteNumber("height", embed.Thumbnail.Height);
                    _writer.WriteEndObject();
                }

                // Image
                if (embed.Image != null)
                {
                    _writer.WriteStartObject("image");
                    _writer.WriteString("url", embed.Image.Url);
                    _writer.WriteNumber("width", embed.Image.Width);
                    _writer.WriteNumber("height", embed.Image.Height);
                    _writer.WriteEndObject();
                }

                // Footer
                if (embed.Footer != null)
                {
                    _writer.WriteStartObject("footer");
                    _writer.WriteString("text", embed.Footer.Text);
                    _writer.WriteString("iconUrl", embed.Footer.IconUrl);
                    _writer.WriteEndObject();
                }

                // Fields
                _writer.WriteStartArray("fields");

                foreach (var field in embed.Fields)
                {
                    _writer.WriteStartObject();

                    _writer.WriteString("name", field.Name);
                    _writer.WriteString("value", field.Value);
                    _writer.WriteBoolean("isInline", field.IsInline);

                    _writer.WriteEndObject();
                }

                _writer.WriteEndArray();

                _writer.WriteEndObject();
            }

            _writer.WriteEndArray();

            // Reactions
            _writer.WriteStartArray("reactions");

            foreach (var reaction in message.Reactions)
            {
                _writer.WriteStartObject();

                // Emoji
                _writer.WriteStartObject("emoji");
                _writer.WriteString("id", reaction.Emoji.Id);
                _writer.WriteString("name", reaction.Emoji.Name);
                _writer.WriteBoolean("isAnimated", reaction.Emoji.IsAnimated);
                _writer.WriteString("imageUrl", reaction.Emoji.ImageUrl);
                _writer.WriteEndObject();

                // Count
                _writer.WriteNumber("count", reaction.Count);

                _writer.WriteEndObject();
            }

            _writer.WriteEndArray();

            _writer.WriteEndObject();

            _messageCount++;

            // Flush every 100 messages
            if (_messageCount % 100 == 0)
            {
                await _writer.FlushAsync();
            }
        }