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

# Messages, buttons and menus

> Send messages, and add buttons and menus that run their own blocks.

Sending messages is the thing bots do most. Buttons and menus make your bot feel like an app: people press a button or pick from a menu, and your bot does something.

## The message blocks

| Block | What it sends | Good for |
| - | - | - |
| **Reply** | A plain text answer. | Quick answers like "Pong!" |
| **Reply with a card** | An **embed**: a box with a title, text, fields, pictures and a footer. | Nice-looking info, like rules or a profile. |
| **Message** | A message with optional **buttons** and **select menus**. It can also edit messages. | Panels people interact with. |
| **Layout message** | Discord's newest style. You stack parts: text, pictures, galleries, separators, buttons and menus. | Big, beautiful panels, like a help centre or a shop. See [Message Builder](/message-builder). |

There are also blocks to send a message **to a channel**, send a **direct message**, send a **random** answer from a list, and to **edit**, **delete**, **pin**, **publish** and **react to** messages. Search the block list for those words, or see [Message blocks](/block-library/message-blocks).

## Putting values in messages

Any text box can show values, like the person's name. Press **\{ } Variables** (or **Insert a variable**), or type them in curly brackets.

> **Example**
>
> You write: `Hi {user_name}, you have {DBVAR_coins} coins.`
>
> Sam sees: **Hi Sam, you have 250 coins.**

See [Use variables in blocks](/variables/use-your-variables-in-blocks).

## Pictures in messages

Every picture box in a message has **Upload image** and **Your uploads**.

* You can upload **PNG, JPG, GIF or WebP** pictures, up to **8 MB** each.
* In a Layout message, a **Media Gallery** takes up to **10** pictures at once.
* Uploads count toward your bot's storage.

Want a picture made just for this person, like a welcome card with their name? Use **Card Studio** and `{card}`. See [Send cards from your bot](/card-studio/send-cards-from-your-bot).

## Buttons

**1. Add a message block that has buttons**

Search `button` in the block list.

**2. Add a button**

In its settings, add a button. Give it a **label** (the words on it) and pick a **style**.

**3. Add an emoji (optional)**

Use the emoji picker. It has your server's own emojis too, even animated ones.

| Style | Looks like | Use it for |
| - | - | - |
| **Blue** | The main button. | The thing most people should press. |
| **Grey** | A quiet button. | Less important choices. |
| **Green** | A "good" button. | Yes, confirm, verify, join. |
| **Red** | A "careful" button. | Delete, close, leave. |
| **Link** | Opens a website. | Links. A Link button does not run blocks. |

## Each button runs its own blocks

Every button gets its **own path** on the board. Blocks you join under a button only run when someone presses **that** button.

> **Example: Yes and No**
>
> One message with two buttons:
>
> * **Yes** (Green) → Give roles: Verified
> * **No** (Red) → Reply: `OK, maybe later!`

## Select menus

A **select menu** is a drop-down list. It is good when there are too many choices for buttons, like picking one of 15 roles. Each option in the menu gets its own blocks, just like a button. Search `menu` in the block list.

## Answering a button press: Response type

In a message block, the **Response type** says how the bot answers:

* In commands: **Reply to the command**.
* After a button or menu: **Reply to the command or button/menu interaction**. This only appears when the message comes **after** a button or menu block. It answers the person who pressed it.

> [!TIP]
>
> Reply **privately** when only the person who pressed should see it, so the channel does not fill up.

## Changing a message or its buttons later

* When you edit a message the bot sent before, the editor starts from the original message, so you only change what you need.
* Use the block that **updates buttons or menus** (search `update`) to change a button after the message was sent, for example to turn **Join** into a greyed out **Closed**.
* In a **Layout message**, buttons and menus get their own row automatically, so you can place them anywhere in your message.

## See it in real systems

> **[Verify new members](/build-real-systems/verify-new-members)**

> **[Support tickets](/build-real-systems/support-tickets)**

> **[Role buttons](/build-real-systems/role-buttons)**


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.