-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self';frame-src https://codesandbox.io;style-src https://pocka.github.io/slack-message-parser/styles.css https://rsms.me/inter/ https://cdn.jsdelivr.net/npm/hack-font@3.3.0/;font-src https://rsms.me/inter/ https://cdn.jsdelivr.net/npm/hack-font@3.3.0/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="https://rsms.me/inter/inter.css" rel="stylesheet" /><link href="https://cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css" rel="stylesheet" />
<title>Introduction | slack-message-parser</title>
<link rel="stylesheet" href="/slack-message-parser/styles.css" />
</head>
<!--
This site is generated using nano-jsx SSR, lightning-css, remark/rehype, Prism, and Deno.
Source code at https://github.com/pocka/slack-message-parser/tree/master/docs/site/
-->
<body>
<div class="layout__logo-wrapper layout__header"><a class="layout__logo" href="/slack-message-parser/">slack<br />message<br />parser</a></div><nav class="layout__nav layout__header"><ul class="nav__list"><li><a class="nav__link" href="/slack-message-parser/">Intro</a></li><li><a class="nav__link" href="/slack-message-parser/installation/">Install</a></li><li><a class="nav__link" href="/slack-message-parser/api/">API</a></li><li><a class="nav__link" href="/slack-message-parser/examples/">Examples</a></li><li><a class="nav__link" href="https://github.com/pocka/slack-message-parser">GitHub</a></li></ul></nav><div class="layout__header-fill layout__header"></div><aside class="layout__toc"><div class="toc__root"><nav class="toc"><ol class="toc-level toc-level-1"><li class="toc-item toc-item-h1"><a class="toc-link toc-link-h1" href="#introduction">Introduction</a><ol class="toc-level toc-level-2"><li class="toc-item toc-item-h2"><a class="toc-link toc-link-h2" href="#important-note">Important note</a></li><li class="toc-item toc-item-h2"><a class="toc-link toc-link-h2" href="#quick-glance">Quick glance</a></li><li class="toc-item toc-item-h2"><a class="toc-link toc-link-h2" href="#available-syntax">Available Syntax</a></li></ol></li></ol></nav></div></aside><main class="layout__main"><div class="markdown__root"><h1 id="introduction">Introduction</h1>
<p>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.</p>
<h2 id="important-note">Important note</h2>
<p>There are some cases it's impossible to correctly parse a message composed by <a href="https://api.slack.com/changelog/2019-09-what-they-see-is-what-you-get-and-more-and-less">Slack's WYSIWYG message editor</a>, especially when an inline code block is involved (see <a href="https://github.com/pocka/slack-message-parser/issues/26">#26</a>).
Please consider traversing Blocks (<code>blocks</code> property) first.
This library is suitable for fallback purpose or for when Blocks are not available.</p>
<h2 id="quick-glance">Quick glance</h2>
<pre class="language-ts"><code class="language-ts"><span class="token keyword module">import</span> <span class="token imports">slackMessageParser</span> <span class="token keyword module">from</span> <span class="token string">"slack-message-parser"</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> tree <span class="token operator">=</span> <span class="token function">slackMessageParser</span><span class="token punctuation">(</span><span class="token string">"Slack *message* ~to~ _parse_"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">dir</span><span class="token punctuation">(</span>tree<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<details>
<summary>Output</summary>
<pre class="language-js"><code class="language-js"><span class="token punctuation">(</span><span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Root</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">"Slack "</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"Slack "</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Bold</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">"message"</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"message"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"*message*"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">" "</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">" "</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Strike</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">"to"</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"to"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"~to~"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">" "</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">" "</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Italic</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token maybe-class-name">NodeType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Text</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">"parse"</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"parse"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"_parse_"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token literal-property property">source</span><span class="token operator">:</span> <span class="token string">"Slack *message* ~to~ _parse_"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
</details>
<h2 id="available-syntax">Available Syntax</h2>
<ul>
<li>Plain text</li>
<li>Links
<ul>
<li>Channels (<code>#channel</code>)</li>
<li>User (<code>@someone</code>)</li>
<li>URL (<code>https://foo.bar</code>, <code>mailto:foo@bar</code>)</li>
<li>Commands (Represented as <code><!foo></code>, more details <a href="https://api.slack.com/docs/message-formatting">here</a>)</li>
</ul>
</li>
<li>Emojis 😍</li>
<li>Code block</li>
<li>Inline code (<code>`foo`</code>)</li>
<li>Italic (<code>_foo_</code>)</li>
<li>Bold (<code>*foo*</code>)</li>
<li>Strikethrough (<code>~foo~</code>)</li>
<li>Quotes (<code>> foo</code>)</li>
</ul></div></main>
</body>
</html>