shard docs

Scripting syntax

The shard script language — tags for messages, embeds, buttons, selects and variables.

Scripting syntax

shard scripts (used by ,script, welcome/goodbye cards, autoresponder replies and look scripts) are written in a lightweight tag language. Everything below works inside {...} tags.

Global tags

Tag Effect
{message: text} Text shown above the components
{delete: 10s} / {delete: 5m} / {delete: 1h} Auto-delete the message after a delay
{silent} Send without notification ping
{ephemeral} / {private} Only visible to the invoking user
{pingable} / {pingable: @role} Explicitly allow mentions (off by default)

Components

Component tags turn a script into an interactive card — text blocks, separators, images, buttons and select menus. Wrap everything in a container with {container} and {/container}; multiple containers create multiple cards.

Tag Effect
{container} … {/container} Card container (repeatable)
{content: ...} / {text: ...} Text display block
{separator} Divider — variants: {separator.large}, {separator.empty}, {separator.large.empty}
{image: url} Single image
{gallery: url1, url2} Image gallery — comma-separated, max 10
{thumbnail: url && block} Thumbnail attached to a block
{button: ...} Button (see below)
{select: ...} + {option: ...} Select menu (see below)
{button1}–{button5}, {select1}–{select5}, {dropdown} Row placeholders inside {content:}

Buttons

{button: green && Claim && 🎁 && reply: thanks {user.mention}!}

Parameters joined with && (order is flexible — unrecognized parts become the label):

  • style: blurple/primary, gray/secondary, green/success, red/danger, link — or a https:// URL for link buttons
  • label: button text
  • emoji: unicode or custom emoji
  • row: 1–5 targets a button row, side positions at the side
  • flags: disabled
  • reply:: script executed on click — receives {user.*} variables

Select menus

{select: 1 && Choose an option && 1 && 1 && enabled}
{option: 1 && First choice && a description && emoji}
{option: 1 && Second choice && reply: you picked it!}
  • {select: N && placeholder && min && max && enabled|disabled} — N is the select row (1–5)
  • {option: N && label && description && emoji && default} — N must match the select row; reply: runs a script on pick

Embeds

Wrap content in {embed} (multiple embeds separated by $v):

{embed}
{title: Hello {user.mention}}
{description: Some **markdown** text}
{url: https://example.com}
{image: https://…}
{thumbnail: https://…}
{timestamp}
{author: Name && icon_url && url}
{field: Title && Value && inline}
{footer: Footer text && icon_url}
{color: #5865f2}
{message: text above embed}
{embed}
Embed tag Effect
{title:} / {description:} main text (markdown supported)
{url:} title link
{color:} accent color — hex or name
{image:} / {thumbnail:} large image / corner thumbnail
{timestamp} current time footer
{author: name && icon && url} author line
{field: name && value && inline} embed field (inline optional)
{footer: text && icon} footer line
{message:} text above the embed

Raw JSON

A script that is a single JSON object with components or embeds is sent as-is — full Discord API payloads are supported.

Variables

See the complete variable list — {user.*}, {guild.*}, {channel.*}, {date.*}, {lastfm.*}, {roblox.*}, {youtube.*}, {sc.*} and Polish aliases.