Rhino

Embed scripting

Wherever Rhino sends a message you wrote, you can write a script instead of plain text.

Where scripts work

Scripts work in ,createembed, in welcome, goodbye and boost messages, in the punishment messages set with ,invoke, in level-up messages and in Last.fm now-playing modes. Plain text with variables works in the same places.

A first embed

A script starts with {embed}. Each part after it is written $v{name: value}.

{embed}$v{title: Welcome to the server}$v{description: Glad you made it, {user.mention}. Read the rules first.}$v{color: #35B8FF}$v{footer: You are member {user.join_position_suffix}}

Try it with ,createembed, then use the same script as a welcome message:

,welcome add #general {embed}$v{title: Welcome to the server}$v{description: Glad you made it, {user.mention}.}

Parts of an embed

$v{title: text}
The heading.
$v{url: link}
Makes the title a link.
$v{description: text}
The main text.
$v{color: #hex}
The bar down the left side.
$v{thumbnail: url}
A small picture in the corner.
$v{image: url}
A large picture under the text.
$v{author: name && icon && url}
The small line above the title. The icon and link are optional.
$v{footer: text && icon}
The small line at the bottom. The icon is optional.
$v{field: name && value}
A titled block. Add inline after the value to sit fields side by side.
$v{timestamp}
The time the message was sent.
$v{message: text}
Text outside the embed, for a ping.
$v{button: url && label}
A link button under the embed.

Write /e where you want a new line. Put {embed} again to start a second embed in the same message, up to ten.

{embed}$v{message: {user.mention}}$v{title: Rules}$v{description: Be kind./eNo spam.}$v{button: https://example.com && Read them all}

Flags

--reply
Sends the message as a reply.
--self_destruct 10
Deletes the message after that many seconds.
{embed}$v{description: This message removes itself.} --self_destruct 10

Containers

A container is Discord's newer layout: text, separators, pictures and buttons stacked in one box. A script that has {container} in it is built this way.

{container}{color: #35B8FF}{content: ## Welcome
Glad you made it.}{separator}{content: Read the rules first.}{/container}
{container} … {/container}
The box. {color: #hex} inside it sets the bar colour.
{content: text}
A block of text inside the box.
{separator}
A dividing line. {separator.large} leaves more room.
{image: url}
A picture. {gallery: url, url} shows several.
{thumbnail: url && text}
A block of text with a small picture beside it.

Variables

A variable is swapped for a live value when the message is sent. {user} is the member's username and {user.mention} pings them.

The member

{user}{user.mention}{user.name}{user.tag}{user.display}{user.display_name}{user.display_avatar}{user.guild_avatar}{user.id}{user.avatar}{user.created_at_timestamp}{user.created_at}{user.created}{user.bot}{user.joined_at_timestamp}{user.joined_at}{user.boost}{user.boost_since_timestamp}{user.boost_since}{user.color}{user.top_role}{user.role_list}{user.role_text_list}{user.role_count}{user.badges}{user.badges_icons}{user.join_position_suffix}{user.join_position}

The server

{guild}{guild.name}{guild.id}{guild.icon}{guild.banner}{guild.splash}{guild.discovery}{guild.members}{guild.member_count}{guild.count}{guild.boosts}{guild.boost_count}{guild.boost_tier}{guild.boost_level}{guild.owner_id}{guild.created_at_timestamp}{guild.created_at}{guild.vanity}{guild.region}{guild.preferred_locale}{guild.shard}{guild.emoji_count}{guild.role_count}{guild.channels_count}{guild.text_channels_count}{guild.voice_channels_count}{guild.category_channels_count}{guild.max_members}{guild.afk_timeout}{guild.afk_channel}{guild.channels}{guild.text_channels}{guild.voice_channels}{guild.category_channels}{guild.max_presences}{guild.max_video_channel_users}{guild.key_features}

The channel

{channel.name}{channel.id}{channel.mention}{channel.topic}{channel.type}{channel.last_message_id}{channel.position}{channel.slowmode_delay}{channel.category_id}{channel.category_name}

Date and time

{date.now}{date.now_proper}{date.now_short}{date.now_shorter}{time.now}{time.now_military}{date.utc_timestamp}{date.timestamp}{date.utc_now}{date.utc_now_proper}{date.utc_now_short}{date.utc_now_shorter}{time.utc_now}{time.utc_now_military}{unix}

Some features add variables of their own. These commands list them in Discord:

Working with existing embeds