Docs / Embeds / Builder
Embed builder
Write a code on the left. Watch it render on the right. Nothing is saved and nothing is sent anywhere. Variables fill in with sample values so you can see the real shape.
This preview is an approximation
Your code
261 characters · 7 chunks
Preview
Classic embedstreets LastFM
Song
Artist
174 Plays | 637895 Total Plays • Today at 11:14
Markdown does not work everywhere
This is the single thing people get wrong. Discord applies different rules to different parts of an embed, and the preview above matches them.
| Where | Bold etc | Links | Note |
|---|---|---|---|
| {author:} | no | no | Plain text. Documented in the bot's own source. |
| {footer:} | no | no | Plain text, same as the author line. |
| {title:} | yes | no | Blue and clickable ONLY with a {url:} tag. On its own it is bold white. |
| field name | yes | no | Same rule as a title. |
| {description:} | yes | yes | Everything works here. |
| field value | yes | yes | Everything works here too. |
| any V2 text | yes | yes | V2 is one markdown block, so the author rule inverts. |
The author rule is documented in the bot's own source. The rest is Discord platform behaviour. Note a title is only blue when the code carries a {url:} tag; on its own it is plain bold white.
How the syntax works
Three rules cover almost everything.
{tag: value}One tag per pair of braces. Name, colon, then whatever it holds.
$pSeparates one tag from the next. Every chunk between two markers is exactly one thing.
&&Splits arguments inside one tag. Resolved by what each one is, not by its position.
Build it up
1. The smallest embed there is
{description: Hello from Righteous}One tag. No $p needed, because there is nothing to separate it from.
2. Colour and a title
{color: #11ABE4}$p{title: Server rules}$p{description: Read them before posting.}A title with no {url:} is bold white, not blue. Add {url: https://...} to make it a link.
3. Fields, and the && split
{title: Ticket opened}$p{field: Opened by && {user.mention} && inline}$p{field: Channel && {channel.name} && inline}Name, value, then the word inline to sit them side by side. Drop inline and each field takes a full row.
4. Buttons resolve by kind
{button: <:lastfmlogo:854491882688348180> && {user.url} }$p{button: blue && Click me}$p{button: Gone && disabled}An emoji, a url, a style word and a label can appear in any order. A button with neither label nor emoji is dropped.
5. The full now-playing card
{color: #9f7873}$p{thumbnail: {album.cover}}$p{timestamp:}$p{footer: {track.plays} Plays | {user.plays} Total Plays}$p{author: {user.fmname} LastFM && {user.avatar}}$p{field: Song && [{track.name}]({track.url})}$p{field: Artist && [{artist.name}]({artist.url})}The real default, with every hardcoded link swapped for the variable that produces it.
6. Components V2
{v2:}$p{section:[**{user.name}**]({user.url}) `{user.plays}x`
[**{track.name}**]({track.url}) `{track.plays}x`
[**{artist.name}**]({artist.url}) `{artist.plays}x`
[**{album.name}**]({album.url}) `{album.plays}x` && {album.cover}}$p{button: <:lastfmlogo:854491882688348180> && {user.url} }$p{button: <:SpotifyLogo:658824737115471892> && {spotify.url} }$p{separator:}$p{button: {spotify.listening} && disabled}$p{button:{artist.crown} && disabled}$p{button: {spotify.liked} && disabled}{v2:} switches renderer. The {section:} is its own text block with the album art as its accessory, and the buttons sit below a separator.
7. Auto-delete
{description: This will clean itself up.} ++delete 30++delete is not a tag. It's an ACTION directive, stripped off the end before anything else parses the code. This one deletes the message 30 seconds after it sends (1-600 allowed).
Every tag
The dimmed ones are Components V2 blocks. Add {v2:} anywhere and the whole code switches renderer. A {section:} is its own text block with one accessory beside it, and it must have one: text on its own is dropped.
Where a code can go
Anywhere the bot sends something you control. Around two dozen commands and surfaces take one:
,customembed,welcomemessage,goodbyemessage,boostmessage,unboostmessage,joindm,stickymessage,ticket,trap,custommessage,lf mode,lf server npmode,pages,editembed,webhooks send/levels embeds/config panel