Introduction
slack-message-parser is a JavaScript library to parse a message returned by Slack API then give you an AST-like tree object. You can use the result tree to create a message viewer (HTML, React component, etc...) or whatever you want.
Important note
There are some cases it's impossible to correctly parse a message composed by Slack's WYSIWYG message editor, especially when an inline code block is involved (see #26).
Please consider traversing Blocks (blocks
property) first.
This library is suitable for fallback purpose or for when Blocks are not available.
Quick glance
import slackMessageParser from "slack-message-parser";
const tree = slackMessageParser("Slack *message* ~to~ _parse_");
console.dir(tree);
Output
({
type: NodeType.Root,
children: [
{
type: NodeType.Text,
text: "Slack ",
source: "Slack ",
},
{
type: NodeType.Bold,
children: [
{
type: NodeType.Text,
text: "message",
source: "message",
},
],
source: "*message*",
},
{
type: NodeType.Text,
text: " ",
source: " ",
},
{
type: NodeType.Strike,
children: [
{
type: NodeType.Text,
text: "to",
source: "to",
},
],
source: "~to~",
},
{
type: NodeType.Text,
text: " ",
source: " ",
},
{
type: NodeType.Italic,
children: [
{
type: NodeType.Text,
text: "parse",
source: "parse",
},
],
source: "_parse_",
},
],
source: "Slack *message* ~to~ _parse_",
});
Available Syntax
- Plain text
- Links
- Channels (
#channel
) - User (
@someone
) - URL (
https://foo.bar
,mailto:foo@bar
) - Commands (Represented as
<!foo>
, more details here)
- Channels (
- Emojis 😍
- Code block
- Inline code (
`foo`
) - Italic (
_foo_
) - Bold (
*foo*
) - Strikethrough (
~foo~
) - Quotes (
> foo
)