> For the complete documentation index, see [llms.txt](https://docs.asagi.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.asagi.xyz/help-and-reference/message-formatting.md).

# Message Formatting

Asagi uses Discord-compatible formatting in message fields, embeds, notifications, reminders, and other features that send text to Discord.

The Embed Editor includes a live preview, so you can check the result while writing.

### Basic Text Formatting

| Result            | Syntax               |
| ----------------- | -------------------- |
| **Bold**          | `**text**`           |
| *Italic*          | `*text*` or `_text_` |
| ***Bold italic*** | `***text***`         |
| Underline         | `__text__`           |
| ~~Strikethrough~~ | `~~text~~`           |
| Spoiler           | `\|\|text\|\|`       |
| Inline code       | `` `code` ``         |

You can combine styles where Discord supports them.

### Headings and Subtext

Discord supports three heading levels:

```
# Heading 1
## Heading 2
### Heading 3
```

Use `-#` at the beginning of a line for subtext:

```
-# This text is shown as subtext.
```

Headings are intended for regular message content and embed descriptions. Some compact embed fields do not support block-level formatting.

### Lists

Use `-` or `*` for a bulleted list:

```
- First item
- Second item
- Third item
```

Use numbers followed by a period for an ordered list:

```
1. First item
2. Second item
3. Third item
```

Indent list items with spaces when you need nested levels.

### Quotes

Use `>` for quoted lines:

```
> This is a quote.
```

Use `>>>` to start a multi-line quote:

```
>>> First line
Second line
Third line
```

### Code Blocks

Wrap code in three backticks and put the code on a new line:

````
```js
console.log("Hello");
```
````

A language identifier such as `js`, `json`, `css`, `python`, or `bash` can be added after the opening backticks for syntax highlighting in Discord.

### Links

Plain URLs are detected automatically:

```
https://asagi.xyz/
```

Use a masked link when you want custom link text:

```
[Asagi](https://asagi.xyz/)
```

### Mentions

Discord mentions can be inserted with their raw Discord syntax.

| Type     | Syntax          |
| -------- | --------------- |
| User     | `<@USER_ID>`    |
| Role     | `<@&ROLE_ID>`   |
| Channel  | `<#CHANNEL_ID>` |
| Everyone | `@everyone`     |
| Here     | `@here`         |

A message can only create the mention behavior that Discord and the bot's permissions allow. For example, mentioning `@everyone`, `@here`, or restricted roles can require **Mention @everyone, @here, and All Roles**.

When the message is being sent for a specific member, a variable such as `{{user.mention}}` is usually easier than hard-coding a user ID.

### Custom Emoji

Use Discord's custom emoji syntax:

```
<:emoji_name:EMOJI_ID>
```

Animated custom emoji use:

```
<a:emoji_name:EMOJI_ID>
```

The Embed Editor can also insert available server emoji directly.

### Dynamic Timestamps

Discord timestamps use a Unix timestamp in seconds:

```
<t:UNIX_TIMESTAMP>
```

You can choose a display style:

| Style               | Syntax            |
| ------------------- | ----------------- |
| Short time          | `<t:TIMESTAMP:t>` |
| Long time           | `<t:TIMESTAMP:T>` |
| Short date          | `<t:TIMESTAMP:d>` |
| Long date           | `<t:TIMESTAMP:D>` |
| Short date and time | `<t:TIMESTAMP:f>` |
| Long date and time  | `<t:TIMESTAMP:F>` |
| Relative time       | `<t:TIMESTAMP:R>` |

Discord renders the timestamp for each viewer using their own locale and time settings.

Asagi timestamp variables can be used inside the same syntax. For example:

```
<t:{{timestamp.memberJoinedAt}}:D>
```

See [**Variables**](/help-and-reference/variables.md) for the available timestamp values and where they can be used.

### Smart Replacements in the Editor

Asagi's message editor automatically converts several common character sequences while you type outside code.

Examples include:

| Type   | Becomes |
| ------ | ------- |
| `--`   | `—`     |
| `...`  | `…`     |
| `->`   | `→`     |
| `<-`   | `←`     |
| `<->`  | `↔`     |
| `<=>`  | `⇔`     |
| `!=`   | `≠`     |
| `>=`   | `≥`     |
| `<=`   | `≤`     |
| `+-`   | `±`     |
| `(c)`  | `©`     |
| `(r)`  | `®`     |
| `(tm)` | `™`     |

The editor also pairs brackets, quotes, and backticks automatically.

If an automatic replacement is not what you wanted, **Backspace** can restore the original typed sequence immediately.

### Where to Go Next

Continue with [**Variables**](/help-and-reference/variables.md) to personalize messages with member, server, birthday, role, and timestamp data.
