# Values

> The {words} a Jellyn Lab system fills in. Who used it, the server, the time, options, answers, custom data and what blocks made.

Write a value in braces in any block's words, like `Welcome, {user}!`, and Jellyn fills it in when the system runs. A value that a system can't have (one its trigger doesn't give) is refused when you save, so a typo never reaches Discord.

```text title="A message block"
Thanks for applying, {user.name}! You joined {server} on {user.joined}.
Reason given: {option.reason}
```

<Note>
  Values never ping anyone: mentions are turned off in everything Lab sends, so `{user}` shows as a mention without notifying them.
</Note>

## The person and where

<Field name="user" type="mention">Who used it, or who the run is for.</Field>
<Field name="user.id" type="text">Their Discord ID.</Field>
<Field name="user.name" type="text">Their name in the server.</Field>
<Field name="user.access" type="text">Their Jellyn access: `member`, `staff`, `management` or `admin`.</Field>
<Field name="user.avatar" type="link">Their avatar.</Field>
<Field name="user.tag" type="text">Their Discord username.</Field>
<Field name="user.created" type="date">When they made their Discord account.</Field>
<Field name="user.joined" type="date">When they joined the server.</Field>
<Field name="channel" type="mention">The channel it was used in. Also `{channel.id}`.</Field>

## The server and the time

<Field name="server" type="text">The server's name.</Field>
<Field name="server.id" type="text">The server's ID.</Field>
<Field name="server.members" type="number">How many members it has.</Field>
<Field name="server.icon" type="link">Its icon.</Field>
<Field name="server.owner" type="mention">Its owner. Also `{server.owner.id}`.</Field>
<Field name="time.now" type="date">Now, as Discord shows a time, in each reader's time zone.</Field>
<Field name="time.date" type="date">Today's date.</Field>
<Field name="time.unix" type="number">Now, in seconds (a Unix time).</Field>
<Field name="random" type="number">A random number from 1 to 100.</Field>

## From the trigger

| Value | Trigger | What it is |
| --- | --- | --- |
| `{option.name}` | A slash command | An option's value; members, channels and roles also have `.id` and `.name` |
| `{player}`, `{player.id}` | ER:LC joins, leaves, in-game commands, punishments | The Roblox player, and their Roblox ID |
| `{command}` | An in-game command | The whole command typed |
| `{arg.name}` | An in-game command | One of its arguments |
| `{shift.minutes}` | A shift ends | Minutes on shift |
| `{case.number}`, `{case.action}`, `{case.reason}` | Punishments | The case number, its type and its reason |
| `{moderator}`, `{moderator.id}` | Staff infractions | Who issued or revoked it |
| `{infraction.number}`, `{infraction.type}`, `{infraction.reason}` | Staff infractions | The infraction |

See [Triggers](/developers/lab/triggers) for which trigger gives what.

## From blocks

Some blocks make a value for the blocks after them:

| Value | Made by | What it is |
| --- | --- | --- |
| `{answer.id}` | Open a form | What they answered to the question with that ID; a member, role or channel picker also gives `.id` |
| `{component}`, `{component.id}`, `{component.label}` | Send buttons or a menu | The choice picked |
| `{item}`, `{item.name}`, `{item.id}`, `{item.team}`, `{item.index}` | For each | The one it is at, and which turn it is |
| `{message.id}`, `{message.channel.id}` | Any block that sends a message | The message it sent |
| `{purged.count}` | Purge messages | How many it deleted |
| `{invite.url}`, `{invite.code}` | Create an invite | The invite |
| `{created.channel}`, `{created.channel.id}` | Create a channel | The channel made |
| `{thread}`, `{thread.id}` | Create a thread | The thread made |
| `{post}`, `{post.id}` | Make a forum post | The post made |
| `{error}`, `{error.block}` | A block's Error path | What went wrong, and in which block |

## Custom data

Variables your systems remember between runs, made under **Custom data** in Jellyn Lab:

- **Kinds**: text, number, collection, object, and collection of objects.
- **Scope**: the whole **server**, or one for each **member**, **channel** or **player**.
- Written `{var.name}`. A member variable needs a run that is for someone; a channel one, a run in a channel.

Change one with the **Set a variable** block; check one with **If / Else**.
