Documentation

Everything a command can do

Build a command on the dashboard, type it in Discord, get the reply you designed. This page lists every variable, function and option the bot understands.

Getting started

Three steps and your first command is live.

1. Invite the bot

Add Custom Commands to your server, then open the dashboard and pick that server.

2. Make a command

Give it a name and a reply. Save it. The bot loads it right away.

3. Run it

Type the prefix and the name in any channel, for example **hello.

The default prefix is **. You can change it in server settings, or turn the prefix off so the command name alone is enough.

Command anatomy

Every option you can set on a command.

Basics

Name
What members type after the prefix. Up to 32 characters. Must be unique in the server.
Aliases
Extra names that trigger the same command.
Arguments
Named inputs. Each one becomes a variable with the same name.
Enabled
Off means the bot ignores the command. Disabled commands are not loaded at all.

Response

Content
One or more text replies. If you add several, the bot picks one at random each run.
Embed
Optional embed reply. Sent together with the text reply.
Response channel
Send the reply to another channel, or set it to DM to send it in private.

Roles

Add roles
Roles given when the command runs.
Remove roles
Roles taken away when the command runs.
Toggle roles
Role is removed if the member has it, added if not.
Remove roles after
Takes the added roles back later. Plain English time, e.g. 10 minutes.

Restrictions

Required roles
Member must have at least one of these.
Banned roles
Member with any of these cannot run it.
Required channels
Command only works in these channels.
Banned channels
Command is blocked in these channels.
Cooldown
Wait time between runs.
Cooldown type
Per user, per channel, or per server.

Clean-up

Delete user message
Removes the message that triggered the command.
Delete response after
Removes the bot reply later, e.g. 30 seconds.

Arguments & aliases

Arguments turn part of the message into a variable you can drop into the reply.

How it works

Add an argument called reason and the reply can use {reason}. Arguments are filled in order, left to right. The last argument takes all remaining text.

All arguments are required

If a member leaves one out, the bot replies Missing arguments: reason and stops.

Quotes

With the default space separator, quotes keep words together: **warn "bad name" spam gives two arguments. Change the separator in server settings to split on something else, for example |.

Aliases

An alias is a second name for the same command. Command ban with alias b answers to both.

Responses

A command can send text, an embed, or both.

Random replies

Add several text replies to one command. Each run picks one at random.

Reply channel

By default the bot answers in the same channel. Pick another channel to send it there instead.

Direct message

Set the response channel to DM. The bot sends the reply in private and posts Check your DM ✉️ in the channel.

No reply

A command with no text and no embed still runs its role actions. If nothing at all is set, the bot says Command executed without any response.

Embeds

Fill in any embed part you need. Empty parts are skipped. Variables and functions work in every part.

TitleHeading line of the embed.
DescriptionMain body text.
ColourColour of the left bar.
Footer textSmall text at the bottom.
Image URLLarge image under the body.
Thumbnail URLSmall image in the top-right corner.
Show timeAdds the current timestamp to the footer.

An embed is only sent if at least one of title, description, footer text, image or thumbnail is filled in.

Built-in variables

Write a variable in curly braces, like {user}. The bot swaps it for the real value before sending. Unknown names are left alone.

Message

{message}Everything typed after the command name.**say hello world → hello world
{msg}Same as {message}.

Command runner

The member who typed the command.

{user}Mention of the member who ran the command.
{user_id}Their Discord user ID.
{id}Short form of {user_id}.
{user_avatar}URL of their avatar image.
{user_name}Their display name.
{user_full}Their display name.
{user_nick}Their server nickname, or display name if none is set.
{user_roles}Mentions of all their roles, except @everyone.

Mentioned user

The first user mentioned in the message. If nobody is mentioned, these fall back to the command runner.

{mentioned_user}Mention of the first user in the message.
{mentioned_user_id}Their Discord user ID.
{mentioned_user_avatar}URL of their avatar image.
{mentioned_user_name}Their display name.
{mentioned_user_full}Their display name.
{mentioned_user_nick}Their nickname, or display name.
{mentioned_user_roles}Mentions of all their roles.

Same values, other names

{target_*}

Exactly the same values as the mentioned-user group. Use whichever name reads better.

{target}{target_id}{target_avatar}{target_name}{target_full}{target_nick}{target_roles}

{user_or_mentioned_*}

Also the same values. The name spells out the fallback: mentioned user, otherwise the command runner.

{user_or_mentioned}{user_or_mentioned_id}{user_or_mentioned_avatar}{user_or_mentioned_name}{user_or_mentioned_full}{user_or_mentioned_nick}{user_or_mentioned_roles}

Server

{server}Server name.
{server_id}Server ID.
{server_owner}Mention of the server owner.
{server_logo}Server icon URL. Empty if the server has no icon.
{server_locale}Preferred locale of the server, e.g. en-US.
{total_channels}Number of channels the bot can see.

Role actions

Only filled in when the command adds, removes or toggles roles.

{role_given}Bold names of the roles that were added by this command run.
{role_removed}Bold names of the roles that were removed by this command run.

Argument names beat built-in names. An argument called user replaces the built-in {user}. Pick argument names that do not clash.

Functions

Functions take a value inside angle brackets: {name<value>}. They work in text replies and in every embed part.

{random<min-max>}

Random whole number between min and max, both included. Every use rolls again.

{random<1-100>}42
{random<1-6>} and {random<1-6>}3 and 5

{staticRandom<min-max>}

Same as random, but the same range gives the same number everywhere in one response.

{staticRandom<1-6>} and {staticRandom<1-6>}4 and 4

{randomText<a|b|c>}

Picks one option at random. Every use picks again.

{randomText<yes|no|maybe>}maybe

{staticRandomText<a|b|c>}

Same as randomText, but the same option list gives the same pick everywhere in one response.

{staticRandomText<red|blue>} vs {staticRandomText<red|blue>}blue vs blue

{math<expression>}

Works out a maths expression. Returns Invalid Expression if it cannot be solved.

{math<5 - 1 + 2>}6
{math<(10 + 2) * 3>}36

{getServerVar<name>} · {getServerVar<name, fallback>}

Reads a server variable. Without a fallback the tag is left as-is when the variable does not exist.

{getServerVar<points, 0>}120

{getMemberVar<name>} · {getMemberVar<name, fallback>} · {getMemberVar<name, fallback, member_id>}

Reads a member variable. Defaults to the member who ran the command. Pass a member ID to read someone else.

{getMemberVar<xp, 0>}50
{getMemberVar<xp, 0, {mentioned_user_id}>}310

{setServerVar<name=value>}

Writes a server variable. Creates it if missing. Outputs nothing in the message.

{setServerVar<points={math<{getServerVar<points, 0>} + 1>}>}(nothing — the variable is now 121)

{setMemberVar<name=value>} · {setMemberVar<name=value, member_id>}

Writes a member variable. Defaults to the member who ran the command. Outputs nothing in the message.

{setMemberVar<xp=100>}(nothing)
{setMemberVar<xp=100, {mentioned_user_id}>}(nothing)

Order of work

Functions run in a fixed order. This lets you nest them, for example read a variable, do maths on it, then save it back.

  1. 1staticRandom
  2. 2random
  3. 3randomText
  4. 4staticRandomText
  5. 5getServerVar & getMemberVar
  6. 6math
  7. 7setServerVar & setMemberVar

A function that fails is left in the message as plain text instead of breaking the reply.

Custom variables

Store your own values and reuse them across commands. Two kinds: server and member.

Server variables

One value for the whole server. Make them on the dashboard Variables page, or from a command with {setServerVar<name=value>}.

Read them with {getServerVar<name>}, or just {name}.

Member variables

One value per member. Good for points, XP, warnings or streaks.

Set with {setMemberVar<name=value>}, read with {getMemberVar<name, 0>}.

Always give a fallback when reading, like {getMemberVar<xp, 0>}. Without one, a missing variable shows the tag itself instead of a value.

Server emojis

Type a custom emoji by name and the bot turns it into the real emoji.

Write :emoji_name: anywhere in a reply or embed. Animated emojis work too.

Only emojis from the same server are found. A name the bot does not know is left as plain text. Normal Unicode emojis like 🎉 always work.

Roles

A command can hand out roles, take them back, or flip them.

Add

Gives the roles you picked.

Remove

Takes the roles away.

Toggle

Removes the role if the member has it, adds it if not.

Roles go to the mentioned user if the message mentions somebody, otherwise to the member who ran the command.

Remove roles after takes the added roles back later. The job survives a bot restart.

If the command has no text reply, the bot writes one for you, like @Alex got @Gamer.

The bot role must sit above the roles it manages in the server role list, and it needs the Manage Roles permission. Roles it cannot touch are skipped without an error.

Permissions & restrictions

Control who can run a command and where.

Required rolesMember needs at least one of these roles. Message: You do not have the required role to use this command.
Banned rolesMember with any of these roles is blocked. Message: You are not allowed to use this command.
Required channelsCommand only runs in these channels. Message: This command is not allowed in this channel.
Banned channelsCommand is blocked in these channels.

Members with the Administrator permission skip every role and channel rule.

Need to stop everything at once? Run /freeze in the server. All custom commands stop until you unfreeze.

Cooldowns

Stop spam by making members wait between runs.

User

Each member waits on their own.

Channel

One wait shared by everyone in that channel.

Server

One wait shared by the whole server.

Writing a time

Cooldowns, remove roles after and delete response after all take plain English:

30 seconds5 minutes2 hours1 daynext mondayin 3 days

While a command is on cooldown, the bot replies with the exact time it can be used again.

Message controls

Keep channels tidy and control who gets pinged.

Delete user message

Removes the message that triggered the command. The bot needs Manage Messages.

Delete response after

Removes the bot reply after the time you set.

Allowed mentions is a server setting with three switches: everyone, roles and users. Off means the text still shows, but nobody gets pinged.

Server settings

These apply to every command in the server.

PrefixText before the command name. Default is ** — so **hello.
No prefixLets members run commands without the prefix, by name alone.
Argument separatorWhat splits arguments. Default is a space, which also supports quotes.
Allowed mentionsWhether replies may ping everyone, roles or users.
FreezeTurns all custom commands off without deleting them.

Slash commands

Built-in commands that come with the bot.

/helpEveryoneShows what the bot does and links to the dashboard.
/activate-premiumAdministratorActivates a premium licence key on this server.
/freezeAdministratorStops or restarts all custom commands in the server without deleting them.

Limits & premium

Free servers get 5 commands. Premium removes the cap and adds more.

Free

Up to 5 commands, all variables and functions included.

Premium

Unlimited commands and variables. Higher plans add a custom bot with your own name and avatar, plus backup and restore.

Got a licence key? Run /activate-premium in your server to switch it on.

Examples

Copy these, then change them to fit your server.

Simple text reply

**hello
  • Name: hello
  • Content: Hey {user}, welcome to **{server}**!

Bot says: Hey @Alex, welcome to **My Server**!

Reply with arguments

**say Good morning everyone
  • Name: say
  • Arguments: text
  • Content: {text}

Bot says: Good morning everyone

Dice roll

**roll
  • Name: roll
  • Content: {user} rolled a **{random<1-6>}** 🎲

Bot says: @Alex rolled a **4** 🎲

Self-assign a role

**gamer
  • Name: gamer
  • Toggle roles: @Gamer
  • Content: {user} you now have {role_given}{role_removed}

Bot says: @Alex you now have **Gamer**

Point counter

**point @Alex
  • Name: point
  • Content: {setMemberVar<points={math<{getMemberVar<points, 0, {mentioned_user_id}>} + 1>}, {mentioned_user_id}>}{mentioned_user} now has {getMemberVar<points, 0, {mentioned_user_id}>} points

Bot says: @Alex now has 7 points

Temporary mute-style role

**timeout @Alex
  • Name: timeout
  • Add roles: @Muted
  • Remove roles after: 10 minutes
  • Required roles: @Moderator
  • Content: {mentioned_user} got {role_given} for 10 minutes

Bot says: @Alex got **Muted** for 10 minutes

Still stuck?

Ask in the support server. We answer fast.

Join Discord