> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mira.party/llms.txt
> Use this file to discover all available pages before exploring further.

# Welcome & system messages

> Greet new members, say goodbye, thank boosters, and handle rejoins separately.

Five message types, all with the same command shape and all requiring **Manage Channels** and **Manage Messages**.

| Type         | Fires when                                | Aliases              |
| ------------ | ----------------------------------------- | -------------------- |
| `welcome`    | Someone joins for the first time          | `welc`, `wlc`, `hey` |
| `goodbye`    | Someone leaves                            | `leave`, `bye`       |
| `rejoin`     | Someone who's been here before comes back | `rejoins`            |
| `boost`      | Someone boosts the server                 | —                    |
| `pingonjoin` | Someone joins — then deletes itself       | `poj`, `pj`          |

## The pattern

Every type works identically:

<CodeGroup>
  ```javascript Add theme={null}
  !welcome add #general {content: welcome {user.mention}}
  ```

  ```javascript Preview theme={null}
  !welcome view #general
  ```

  ```javascript Remove one channel theme={null}
  !welcome remove #general
  ```

  ```javascript List them theme={null}
  !welcome list
  ```

  ```javascript Remove all theme={null}
  !welcome clear
  ```

  ```javascript See available variables theme={null}
  !welcome variables
  ```
</CodeGroup>

You can add the same type to **several channels** with different messages — a public greeting in `#general` and a staff-facing one in `#member-log`, say.

## Welcome

```javascript theme={null}
!welcome add #general {content: {user.mention} just joined} {description: you're member **{guild.members}**} {color: dominant}
```

<AccordionGroup>
  <Accordion title="Delete the welcome when they leave" icon="trash">
    ```javascript theme={null}
    !welcome removal
    ```

    Toggles whether a member's welcome message is deleted if they leave. Stops `#general` filling with greetings for people who lasted four minutes. Aliases: `later`, `deletion`.
  </Accordion>

  <Accordion title="Auto-wave on Discord's own join messages" icon="hand-wave">
    ```javascript theme={null}
    !welcome wave
    ```

    Discord's built-in "X joined the server" messages have a wave button. This makes mira click it automatically.
  </Accordion>
</AccordionGroup>

## Goodbye

```javascript theme={null}
!goodbye add #general {content: {user.name} left. {guild.members} left standing.}
```

The member object is still available — name, ID, avatar, join date — but they're no longer in the server, so `{user.mention}` renders as a raw mention rather than a link.

## Rejoin

A separate greeting for returning members, so you're not welcoming someone to a server they've been in for two years.

```javascript theme={null}
!rejoin add #general {content: {user.mention} is back}
```

If no rejoin message is set, returning members get the normal welcome message instead.

## Boost

```javascript theme={null}
!boost add #general {content: {user.mention} boosted!} {description: that's **{guild.boosts}** boosts — tier {guild.boost_tier}} {color: #f47fff}
```

<AccordionGroup>
  <Accordion title="Hide Discord's own boost message" icon="eye-slash">
    ```javascript theme={null}
    !boost removal
    ```

    Deletes Discord's built-in boost notification so only yours shows. Aliases: `system`, `deletion`.
  </Accordion>

  <Accordion title="Reward boosters with a custom colour role" icon="palette">
    Separate feature, covered in [Automatic roles](/setup/automatic-roles#booster-roles):

    ```javascript theme={null}
    !boosterrole #ff5c8a
    ```
  </Accordion>
</AccordionGroup>

## Ping on join

A message that mentions the new member and then **deletes itself** a few seconds later. It exists purely to trigger a notification without leaving clutter.

```javascript theme={null}
!pingonjoin add #general
!pingonjoin add #general {content: {user.mention} check out #rules}
```

The script is optional — with none, it just pings them.

<Tip>
  This is the polite way to get a new member's attention. A permanent welcome in `#general` gets scrolled past; a ping they actually see, followed by nothing, doesn't clutter the channel.
</Tip>

## Writing good ones

<AccordionGroup>
  <Accordion title="Simple" icon="align-left">
    ```javascript theme={null}
    !welcome add #general welcome to {guild.name}, {user.mention}
    ```

    No script nodes needed — plain text works fine.
  </Accordion>

  <Accordion title="Embed" icon="square">
    ```javascript theme={null}
    !welcome add #general {title: Welcome!} {description: {user.mention}, glad you're here.

    Grab roles in #roles and read #rules.} {thumbnail: {user.avatar}} {color: dominant} {footer: member #{guild.members} && {guild.icon}}
    ```
  </Accordion>

  <Accordion title="Container with a button" icon="layer-group">
    ```javascript theme={null}
    !welcome add #general {content: {user.mention}}
    {box: dominant}
    {box.section: text: "## Welcome to {guild.name}
    You're our **{guild.members|comma}th** member." thumbnail: "{user.avatar}"}
    {box.separator}
    {box.text: -# account created <t:{user.created_at}:R>}
    {box.button: label: "Rules" style: "secondary" message: "Head to #rules — takes 30 seconds."}
    ```
  </Accordion>

  <Accordion title="Randomised" icon="shuffle">
    ```javascript theme={null}
    !welcome add #general {content: {random: welcome, hey, glad you made it, yo} {user.mention}}
    ```

    Picked fresh each time, so it doesn't read like a bot after the tenth join.
  </Accordion>

  <Accordion title="Conditional on account age" icon="code-branch">
    ```javascript theme={null}
    !welcome add #general {content: {user.mention}} {description: {if: {user.created_at}>1700000000 && new account — say hi in #general && welcome back to discord}}
    ```
  </Accordion>
</AccordionGroup>

<Warning>
  `{user.mention}` inside an **embed** doesn't trigger a notification — Discord only pings from message content. Put the mention in `{content:}` if you want them notified.
</Warning>

## Command reference

Replace `welcome` with `goodbye`, `rejoin`, `boost` or `pingonjoin` — the subcommands are identical.

| Command                          | Aliases                         | Description                  |
| -------------------------------- | ------------------------------- | ---------------------------- |
| `welcome add <channel> <script>` | `create`, `new`                 | Add a message to a channel   |
| `welcome view <channel>`         | `script`, `template`, `preview` | Preview it                   |
| `welcome remove <channel>`       | `delete`, `del`, `rm`           | Remove it                    |
| `welcome list`                   | `ls`                            | Channels with a message      |
| `welcome clear`                  | `reset`, `purge`                | Remove all                   |
| `welcome variables`              | `vars`, `var`, `v`              | Available variables          |
| `welcome removal`                | `later`, `deletion`             | Delete on member leave       |
| `welcome wave`                   | —                               | Auto-wave on system joins    |
| `boost removal`                  | `system`, `deletion`            | Hide Discord's boost message |

<Note>
  For messages that fire on a **schedule** rather than an event — announcements, revive messages, sticky messages — see [Auto messages](/setup/auto-messages).
</Note>
