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

# Variables and placeholders

> Every token Bloom replaces in welcome, booster, level up, jail, birthday, autoresponder, and Last.fm messages, and what each one fills in.

Variables are placeholders like `{user.mention}` that Bloom replaces with real values when a message is sent. The set you can use depends on the feature you are configuring, because each message type is rendered by its own part of Bloom. This page lists the tokens for every message type that supports them.

<Info>
  You can browse these in your server with the `variables` command (aliases `vars`, `placeholders`). It shows the same lists with a dropdown to switch between message types. The general embed preview commands on the [Embed syntax](/reference/embeds) page render text exactly as written and do not replace variables.
</Info>

<Warning>
  The same token can mean different things in different message types. `{user}` is a member's display name in a welcome message, but a mention in a birthday or jail message. Use the tokens listed for the feature you are configuring.
</Warning>

## Welcome messages

Configured with the `welcome` command. Write these anywhere in the message: the title, description, fields, footer, author, or a `{message: ...}` block.

### Member

| Variable                   | Replaced with                                  |
| -------------------------- | ---------------------------------------------- |
| `{user}`                   | The member's display name, or username         |
| `{user.mention}`           | A mention that pings the member                |
| `{user.username}`          | The account username                           |
| `{user.tag}`               | The account's username and tag                 |
| `{user.display_name}`      | The member's display name                      |
| `{user.nickname}`          | The member's server nickname, or empty if none |
| `{user.id}`                | The member's user ID                           |
| `{user.avatar}`            | The member's avatar URL                        |
| `{user.created}`           | The date the account was created               |
| `{user.created_timestamp}` | A relative "time ago" the account was created  |

### Server

| Variable                              | Replaced with                                |
| ------------------------------------- | -------------------------------------------- |
| `{guild}`, `{server}`, `{guild.name}` | The server name                              |
| `{guild.id}`                          | The server ID                                |
| `{guild.icon}`                        | The server icon URL                          |
| `{guild.members}`                     | Total member count                           |
| `{guild.humans}`                      | Number of human members                      |
| `{guild.bots}`                        | Number of bots                               |
| `{guild.description}`                 | The server description, or empty if none     |
| `{guild.created}`                     | The date the server was created              |
| `{guild.created_timestamp}`           | A relative "time ago" the server was created |
| `{guild.boost_level}`                 | The server's boost tier number               |

### Join details and date

| Variable                    | Replaced with                           |
| --------------------------- | --------------------------------------- |
| `{member.joined}`           | The date the member joined              |
| `{member.joined_timestamp}` | A relative "time ago" the member joined |
| `{date}`                    | The current date                        |
| `{time}`                    | The current time                        |

## Booster messages

Configured with the `booster` command. Booster messages support **every welcome variable above**, plus the boost tokens below.

| Variable             | Replaced with                                              |
| -------------------- | ---------------------------------------------------------- |
| `{boost.level}`      | The server's boost tier number                             |
| `{boost.tier}`       | The boost tier as `Level N`                                |
| `{boost.count}`      | The server's total number of boosts                        |
| `{user.boost.count}` | The number of boosts from this member (can be approximate) |

## Level up messages

Configured on the [Leveling](/configuration/leveling#level-up-variables) page, where the full list lives. Level up messages use their own tokens.

| Variable            | Replaced with                            |
| ------------------- | ---------------------------------------- |
| `{level}`           | The new level                            |
| `{prev.level}`      | The previous level                       |
| `{next.level}`      | The level after this one                 |
| `{xp.total}`        | XP for the current level                 |
| `{user}`            | The member's username                    |
| `{user.mention}`    | A mention of the member                  |
| `{user.id}`         | The member's user ID                     |
| `{user.avatar}`     | The member's avatar URL                  |
| `{user.servername}` | The member's server display name         |
| `{user.nickname}`   | The member's nickname, or their username |
| `{guild.name}`      | The server name                          |
| `{guild.id}`        | The server ID                            |
| `{guild.icon}`      | The server icon URL                      |
| `{date}`            | The current date                         |
| `{time}`            | The current time                         |

Level up messages also support a conditional `&&` section for role rewards, where `{role.name}` and `{role.mention}` refer to a role earned at that level. See the [leveling page](/configuration/leveling#level-up-variables) for how it works.

## Jail messages

Configured with the `jailmessage` command. A jail message is **plain text** sent to a member when they are jailed, up to 500 characters. It supports three tokens.

| Variable     | Replaced with                  |
| ------------ | ------------------------------ |
| `{user}`     | A mention of the jailed member |
| `{reason}`   | The reason for the jail        |
| `{duration}` | How long the jail lasts        |

```text Default jail message theme={null}
You have been jailed for {reason} for {duration}.
```

<Info>
  In a jail message, each token is replaced only once, so use each of `{user}`, `{reason}`, and `{duration}` a single time.
</Info>

## Birthday announcements

Configured with `birthday settings message`. The text is sent as a line above the birthday embed.

| Variable                                      | Replaced with                    |
| --------------------------------------------- | -------------------------------- |
| `{user}`, `{user.mention}`                    | A mention of the birthday member |
| `{user.tag}`, `{user.username}`, `{username}` | The member's username            |
| `{user.id}`                                   | The member's user ID             |
| `{user.avatar}`                               | The member's avatar URL          |
| `{guild}`, `{server}`, `{guild.name}`         | The server name                  |
| `{guild.id}`                                  | The server ID                    |
| `{guild.members}`                             | Total member count               |
| `{date}`                                      | Today's date                     |

## Autoresponder responses

Configured with the `autoresponder` command. These are replaced in the response text when a trigger fires.

| Variable              | Replaced with                  |
| --------------------- | ------------------------------ |
| `{user}`              | The member's display name      |
| `{user.mention}`      | A mention of the member        |
| `{user.tag}`          | The account's username and tag |
| `{user.username}`     | The account username           |
| `{user.id}`           | The member's user ID           |
| `{guild}`, `{server}` | The server name                |
| `{channel}`           | The channel name               |
| `{channel.mention}`   | A link to the channel          |
| `{channel.id}`        | The channel ID                 |

## Last.fm custom embeds

A separate set of tokens used in the `customembed` command to build a custom now playing embed, written in the `$e{...}` format. They draw on your Last.fm account and the current track, so they are unrelated to the tokens above.

### Last.fm user and Discord author

| Variable         | Replaced with           |
| ---------------- | ----------------------- |
| `{u.name}`       | Last.fm username        |
| `{u.av}`         | Last.fm avatar URL      |
| `{u.url}`        | Last.fm profile URL     |
| `{u.ts}`         | Total scrobbles         |
| `{u.country}`    | Country                 |
| `{u.registered}` | Registration date       |
| `{a.un}`         | Your Discord username   |
| `{a.nn}`         | Your Discord nickname   |
| `{a.av}`         | Your Discord avatar URL |

### Track

| Variable                         | Replaced with                                  |
| -------------------------------- | ---------------------------------------------- |
| `{track}`                        | Track name                                     |
| `{track.l}`                      | Track name, lowercase                          |
| `{track.url}`                    | Last.fm track URL                              |
| `{track.plays}`                  | Your play count                                |
| `{track.listeners}`              | Total listeners                                |
| `{track.duration}`               | Duration, as M:SS                              |
| `{track.toptag}`                 | The single top genre tag                       |
| `{track.toptags}`                | The top five tags                              |
| `{track.loved}`, `{track.heart}` | A heart if the track is loved, otherwise empty |

### Album

| Variable                                                                                                                            | Replaced with                       |
| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
| `{album}`                                                                                                                           | Album name                          |
| `{album.l}`                                                                                                                         | Album name, lowercase               |
| `{album.url}`                                                                                                                       | Last.fm album URL                   |
| `{album.img}`                                                                                                                       | Cover image URL                     |
| `{album.img.bw}`                                                                                                                    | Cover image URL, greyscale          |
| `{album.plays}`                                                                                                                     | Your play count                     |
| `{album.color}`                                                                                                                     | Dominant color of the cover, as hex |
| `{album.color.muted}`, `{album.color.pastel}`, `{album.color.warm}`, `{album.color.cool}`, `{album.color.neon}`, `{album.color.bw}` | Tinted variants of the cover color  |

### Artist

| Variable                                                                                                                                                           | Replaced with                                |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- |
| `{artist}`                                                                                                                                                         | Artist name                                  |
| `{artist.l}`                                                                                                                                                       | Artist name, lowercase                       |
| `{artist.url}`                                                                                                                                                     | Last.fm artist URL                           |
| `{artist.img}`                                                                                                                                                     | Artist image URL                             |
| `{artist.plays}`                                                                                                                                                   | Your total plays                             |
| `{artist.listeners}`                                                                                                                                               | Total listeners                              |
| `{artist.tags}`                                                                                                                                                    | The top five tags                            |
| `{artist.bio}`                                                                                                                                                     | Biography, up to 500 characters              |
| `{artist.gender}`, `{artist.age}`, `{artist.born}`, `{artist.type}`, `{artist.country}`, `{artist.years_active}`, `{artist.birth_place}`, `{artist.birth_country}` | Artist metadata, or `Unknown` if unavailable |

### Ratings, time, and misc

| Variable                         | Replaced with                   |
| -------------------------------- | ------------------------------- |
| `{rating}`, `{rating.track}`     | Your rating of the track        |
| `{rating.album}`                 | Your rating of the album        |
| `{rating.artist}`                | Your rating of the artist       |
| `{time.timestamp}`, `{time.now}` | The current Unix timestamp      |
| `{time.date}`                    | The current date, as YYYY-MM-DD |
| `{time.full}`                    | The current full date string    |
| `{color.random}`                 | A random hex color              |
| `{bot.name}`                     | The bot's name                  |
| `{random.1-100}`                 | A random number from 1 to 100   |

<Warning>
  Last.fm custom embeds do not send text outside the embed. A `{message: ...}` block is removed rather than posted, so a now playing embed cannot ping members. This is different from welcome and booster messages, where `{message: ...}` does send a line above the embed.
</Warning>

## When a value is missing

A variable that has no value is replaced with empty text rather than left as `{...}`. This happens when:

* The member has no nickname (`{user.nickname}`), or the server has no description (`{guild.description}`).
* A join-only token is used outside a real join. `!welcome test` renders with your own account and no join context, so `{member.joined}` and a few member details can appear blank in the preview but fill in on an actual join.
* A Last.fm field has no data for the current track. Artist metadata shows `Unknown` when it is unavailable.

Write your message so it still reads well when an optional value is empty.

## Related pages

<CardGroup cols={2}>
  <Card title="Welcome messages" icon="door-open" href="/configuration/welcome">
    Where the welcome variables are used.
  </Card>

  <Card title="Leveling" icon="chart-line" href="/configuration/leveling">
    The full level up variable list and the `&&` role condition.
  </Card>

  <Card title="Embed syntax" icon="code" href="/reference/embeds">
    The `$e{...}` format these variables are written inside.
  </Card>
</CardGroup>
