Returned by GET /api/chat, and sent by the server in chat_message and
chat_message_updated. The client reads it through
deserializeChatMessage, which turns its dates back into Dates.
id: string
userId: string
body: string
In Markdown, trimmed by the server.
createdAt: Date
optional
updatedAt: Date
Absent until the first edit.
authorUsername: string
optional
authorAvatarMime: string
optional
replyToId: string
Kept when the message it points to is deleted, while replyToAuthor and
replyToBody then go absent.
optional
replyToAuthor: string
optional
replyToBody: string
The first 300 characters of the replied-to body, in Markdown.
optional
mentionsEveryone: boolean
Set when the body says @everyone and its author's role had
chat:everyone when it was last written; absent otherwise. The client
highlights the message for everyone and shows @everyone as a mention by
it, never by the text, which anyone may type.