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

# Container Builder

> Create and manage Components V2 containers — the modern, more powerful alternative to embeds

## Overview

Containers are Discord's new **Components V2** system. Think of them like embeds but way more powerful — you can have multiple text blocks, image galleries, sections with thumbnails, separators, and buttons all in one message. They look cleaner and more modern than embeds.

<Info>
  This page is written so that even if you've never touched a container before, you'll understand exactly what to do. Every property is explained with real examples you can copy and use immediately.
</Info>

<Warning>
  Some Container Builder features require **Celestia Premium** (\$9.99 one-time purchase). Free users get **3 saved container slots**; `container copy` and `container convert` require Premium to use at all.
  [Get Access](https://discord.com/discovery/applications/1372066291397169162/store/1497879293986869358)
</Warning>

***

## Free vs Premium

<CardGroup cols={2}>
  <Card title="Free" icon="unlock">
    * Create, list, delete, preview, and send containers via webhook
    * Up to **3 saved containers** (via `--name` on create, or the builder's Save button)
    * Full interactive builder access
  </Card>

  <Card title="Celestia Premium — $9.99" icon="star">
    * Unlimited saved container slots
    * `container copy` — extract script from any container message
    * `container convert` — turn an embed into a container script
  </Card>
</CardGroup>

Once you hit **3 free container slots**, saving a new container is blocked until you delete one or upgrade. Building and sending containers still works — only saving is restricted.

***

## Two Ways to Build

<CardGroup cols={2}>
  <Card title="Script Method (Prefix)" icon="code">
    Write a container script using the syntax

    **Commands:** `~container create`, `~container copy`

    **Best for:** Power users, welcome messages, templates
  </Card>

  <Card title="Interactive Builder (Slash)" icon="mouse-pointer">
    Click buttons to build your container visually

    **Commands:** `/container builder`, `/container edit`

    **Best for:** Beginners, quick creation, no syntax needed
  </Card>
</CardGroup>

***

## Action Button IDs

Buttons inside a container script can trigger built-in actions instead of just linking out. Use these as the `custom_id` value in a `$v{button: ...}` block:

| Action ID                  | What it does                                                       |
| -------------------------- | ------------------------------------------------------------------ |
| `toggle_role:ROLE_ID`      | Gives or removes the specified role from whoever clicks the button |
| `dm_user:CONTAINER_NAME`   | DMs the clicker a saved container of yours                         |
| `show_info:CONTAINER_NAME` | Shows a saved container of yours to the clicker, ephemerally       |

**Example:**

```bash theme={null}
~container create {container}$v{text: Click below to get the role}$v{button: label:Get Role && style:primary && custom_id:toggle_role:123456789012345678}{container} --name role-button
```

<Info>
  Some `custom_id` prefixes are reserved by the bot internally and will be silently stripped if used (e.g. anything starting with `container_`, `embedbuilder_`, `music_`, `vm_`, `ct_`, and a few others). If your button seems to lose its action, check you're not using a reserved prefix.
</Info>

***

## VoiceMaster (VM) Buttons

Containers can include a built-in row (or two) of VoiceMaster voice-channel controls — lock, unlock, hide, reveal, kick, decrease/increase limit, info, rename, and claim.

* **Script method:** add `$v{vmbuttons}` anywhere in your container script.
* **Interactive builder:** an **Add/Remove VM Buttons** toggle appears in `/container builder` and `/container edit`, but only for users with the **Manage Guild** permission.

When a saved container with VM buttons is sent (via `/container send` or `~container preview`), the VM control rows are automatically added to the message.

***

## Script Method Commands

<AccordionGroup>
  <Accordion title="container create" icon="plus">
    Create and send a container using script syntax.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container create {container}$v{text: Hello}{container}
      ```

      ```bash Example theme={null}
      ~container create {container}$v{color: #5865F2}$v{text: ## Welcome!}$v{text: Hello {user.mention}!}{container} --name welcome
      ```
    </CodeGroup>

    **Options:**

    * `--name <name>` — Save the container so you can reuse it (counts toward your 3 free slots if you don't have Premium)

    **Aliases:** `ct`, `createcontainer`
  </Accordion>

  <Accordion title="container list" icon="list">
    See all containers you've saved.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container list
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="container delete" icon="trash">
    Delete a saved container permanently.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container delete <name>
      ```

      ```bash Example theme={null}
      ~container delete welcome
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="container preview" icon="eye">
    Send a saved container to see how it looks.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container preview <name>
      ```

      ```bash Example theme={null}
      ~container preview welcome
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="container webhook" icon="webhook">
    Send a container through a webhook URL.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container webhook <webhook_url> {container}...{container}
      ```

      ```bash Example theme={null}
      ~container webhook https://discord.com/api/webhooks/... {container}$v{text: Hello}{container}
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="container copy" icon="copy">
    Copy the script from any message that contains a container.

    <Warning>Requires **Celestia Premium**.</Warning>

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container copy <message_link>
      ```

      ```bash Example theme={null}
      ~container copy https://discord.com/channels/123/456/789
      ```
    </CodeGroup>

    **How to get a message link:**
    Right-click the message → Copy Message Link
  </Accordion>

  <Accordion title="container convert" icon="arrows-rotate">
    Convert an embed from any message into a container script.

    <Warning>Requires **Celestia Premium**.</Warning>

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container convert <message_link>
      ```

      ```bash Example theme={null}
      ~container convert https://discord.com/channels/123/456/789
      ```
    </CodeGroup>

    **What it does:**

    * Reads the embed from that message
    * Converts title, description, fields, images, buttons
    * Gives you a ready-to-use container script
  </Accordion>

  <Accordion title="container syntax" icon="brackets-curly">
    Shows a quick reference of all available script properties.

    <CodeGroup>
      ```bash Syntax theme={null}
      ~container syntax
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

***

## Interactive Builder Commands

<AccordionGroup>
  <Accordion title="/container builder" icon="plus">
    Opens the interactive container builder. No syntax needed — just click buttons.

    **Buttons available:**

    * Add Text
    * Add Section
    * Add Separator
    * Add Gallery
    * Add Button
    * Set Color
    * Spoiler toggle
    * Remove Component
    * Send via Webhook
    * Save
    * Add/Remove VM Buttons (Manage Guild permission only)

    **Note:** Builder expires after 20 minutes of inactivity. If you don't have Premium and already have 3 saved containers, saving is blocked until you delete one or upgrade.
  </Accordion>

  <Accordion title="/container edit" icon="pen">
    Load a saved container into the interactive builder to make changes.

    <CodeGroup>
      ```bash Syntax theme={null}
      /container edit name:<container_name>
      ```

      ```bash Example theme={null}
      /container edit name:welcome
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="/container send" icon="paper-plane">
    Send a saved container to any channel.

    <CodeGroup>
      ```bash Syntax theme={null}
      /container send name:<name> channel:<#channel>
      ```

      ```bash Example theme={null}
      /container send name:welcome channel:#welcome
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="/container list" icon="list">
    View your saved containers (slash version).
  </Accordion>

  <Accordion title="/container delete" icon="trash">
    Delete a saved container (slash version).

    <CodeGroup>
      ```bash Syntax theme={null}
      /container delete name:<name>
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

***

## Related Resources

<CardGroup cols={2}>
  <Card title="Container Scripts" icon="brackets-curly" href="/container-scripts">
    Full scripting syntax reference
  </Card>

  <Card title="Variables" icon="brackets-curly" href="/variables">
    All available placeholders
  </Card>
</CardGroup>
