Skip to main content
Two things share this name. /embed is an interactive builder for a single message. Embed scripting is a small language that renders embeds and cards from text · and it’s what level-up messages, vanity announcements and honeypot warnings all use underneath.

The builder

A Components V2 panel with a live preview. It covers title, description, colour, thumbnail, image, link buttons and role buttons · so the thing you’re editing is the thing that gets posted. Role buttons are the usual way to build a verification gate: label plus role, click to grant.

Posting from a script

Prefix forms: ,ce <script> posts, ,vars lists variables, ,guide opens the guide. /embedcreate needs Manage Messages, because it speaks as the bot in the channel you point it at.

Script structure

A block is a key, a colon, and its content:
  • { begins a block, : separates the key from its content, } ends it.
  • && separates arguments inside a block that takes more than one.
  • Blocks are read left to right; text between them is ignored, so line breaks are free.
/embedvariables (or ,vars) lists every variable currently supported.

Embeds

Start with {embed} and add blocks:

Cards

Containers are the native Components V2 look, and they’re what the bot’s own panels use:

Variables

Scripts are filled in when the message is sent · {user}, {guild.name}, {channel.mention}, {level} and dozens more. Dots, dashes and underscores are interchangeable, case doesn’t matter, and unknown variables are sent as raw text rather than erroring.

Variables

The full list, grouped by user, server, channel, bot, time, level-up and honeypot.

Limits

Criminal validates all of these before sending and names the limit you broke, so nothing fails silently.

Where scripts run

  • /embed · posted directly
  • levelup-message and levelup-dm-message · level-up cards
  • vanity-message · vanity announcements
  • Honeypot warning and trigger DM
Anything you build for one of those works in the others, since they share the same renderer.