slack-message-parser
Version:
Parser for Slack message
151 lines (96 loc) • 4.31 kB
Markdown
# API
## `function parse(message)`
Parses Slack message and returns a tree ([`Node`](#interface-node)).
### Arguments
| Name | Type | Description |
| ------- | ------ | ------------------------ |
| message | String | a Slack message to parse |
### Returns
| Type | Description |
| ---- | -------------------------------------- |
| Root | A root node of the parsed message tree |
## `interface Node`
Represents each parts of the message, its type and properties.
Every node at least have one property, `type`.
| Name | Type | Description |
| ------ | ---------------- | ---------------------- |
| type | Number(NodeType) | Type of the node |
| source | String | Raw string of the node |
You can test the type with `NodeType` object (which is actually TypeScript enum).
```js
import { NodeType } from "slack-message-parser";
switch (node.type) {
case NodeType.Text:
// ...
case NodeType.ChannelLink:
// ...
}
```
The names of Node and NodeType are one-to-one equivalent (e.g. `Text` node have `type` property that the value is `NodeType.Text`).
### `Root` node
A node sits on top of the tree. Every parse result have this node as its root node.
#### Properties
| Name | Type | Description |
| -------- | ------ | ----------- |
| children | Node[] | Child nodes |
### `Text` node
Texts.
#### Properties
| Name | Type | Description |
| ---- | ------ | ------------ |
| text | String | Text content |
### `ChannelLink` node
Link to a channel.
#### Properties
| Name | Type | Description |
| --------- | ------------------- | -------------------------- |
| channelID | String | An ID of the channel |
| label | Node[] \| undefined | Display texts for the link |
### `UserLink` node
Link to a user.
#### Properties
| Name | Type | Description |
| ------ | ------------------- | -------------------------- |
| userId | String | An ID of the user |
| label | Node[] \| undefined | Display texts for the user |
### `URL` node
Link other than channels and users (e.g. `https://foo.bar`, `mailto:foo@bar`).
#### Properties
| Name | Type | Description |
| ----- | ------------------- | -------------------------- |
| url | String | A link url |
| label | Node[] \| undefined | Display texts for the link |
### `Command` node
Special commands like `<!date>`, `<!everyone>`, `<!subteam^id|@handle>`, and more.
For more details, please refer [Formatting messages | Slack](https://api.slack.com/docs/message-formatting).
#### Properties
| Name | Type | Description |
| --------- | ------------------- | -------------------------------------------------------------------------- |
| name | String | A name of the command |
| arguments | String[] | Command arguments(prefixed by `^`, `ID` is an argument of `<!subteam^ID>`) |
| label | Node[] \| undefined | Display texts for the link |
### `Emoji` node
Emojis!
#### Properties
| Name | Type | Description |
| --------- | ------------------- | ------------------------------------------------ |
| name | String | A name of the emoji (the text between both `:`s) |
| variation | String \| undefined | Emoji variation, currently `skin-tone-` only |
### `PreText` node
Code block. Multi-line codes.
#### Properties
| Name | Type | Description |
| ---- | ------ | ------------ |
| text | String | Text content |
### `Code` node
Inline code.
#### Properties
| Name | Type | Description |
| ---- | ------ | ------------ |
| text | String | Text content |
### `Italic`/`Bold`/`Strike`/`Quote` node
Represents text decorations. Each nodes just have decoration information, so it acts as container (does not hold texts directly).
#### Properties
| Name | Type | Description |
| -------- | ------ | ----------- |
| children | Node[] | Child nodes |