Docs
Getting started
Click Dashboard at the top of this page. Discord asks you to confirm who you are, and then you pick a server. The bot's /dashboard command also answers with a private link that signs you in. You need Manage Server to change settings. Each page in the sidebar is one feature. Most features do nothing until you set them up. The bot keeps recent message text for the deleted and edited message logs, 30 days unless you change it.
Move the bot's role above every role you want it to hand out. Discord doesn't let a bot give or take a role at or above its own.
Proposals
A proposal is a change to the server put to two votes on one post. A moderator submits it with /submit_proposal or from the Proposals page. The bot posts it, opens a discussion thread and adds the two vote reactions.
Members have the voting time set on the page, 72 hours unless you change it. Their vote passes if more than half of the votes are in favor. Moderators vote with the same reactions, counted apart, with no deadline. Their vote is decided once more than half of all moderators agree. A proposal is approved only if both votes pass, and it's rejected as soon as either one fails.
Once the member vote is over, moderators who haven't voted get a DM every 24 hours until their vote is decided. /proposal promote or Put to a vote on the Suggestions page starts a proposal from a suggestion, and the result becomes that suggestion's decision.
Role rules
A role rule adds or removes roles for members who match all of its conditions, up to ten. A condition looks at a set of roles: whether a member has any of them, all of them, none of them, or is missing one, or how many of them they hold. Rules run from the top of the list on the Role rules page, and a change one rule makes can set off the rules below it.
A rule that keeps in sync takes its added roles back from members who stop matching, unless another rule that matches them adds the same role. Without it, a role stays until something else takes it. /rolerule create makes a rule that keeps one target role on everyone who holds any of the tracked roles, with an optional ignored role that keeps people out and a required role they must also hold.
The bot looks at a member when their roles change and when they pass the rules screen, at everyone when a rule is saved or switched on, and at everyone again every 10 minutes. Each member gets one role edit for all of their changes, and edits go out at about one a second. Preview on the page shows who would gain and lose each role before you save, and a save that changes more than 200 members asks you to confirm the count. Rules that keep undoing each other's changes are switched off, and so is a rule that checks for a role someone deleted. The server log channel says which ones.
/mass_mention pings every member who holds all of the roles you name, up to 1,000 of them, and asks first when it's more than 50. It needs Mention Everyone, and the roles named in its first line don't ping.
How commands work
Most commands work three ways: as a slash command, after the server's prefix (!warn @someone spamming), and after mentioning the bot. A command listed below with ! in front has no slash form.
A command needs its Discord permission, shown beside it below. A group whose subcommands differ says Varies, and each subcommand shows its own. On the Commands page you can grant bypass roles per command, so a moderator role can use a command without holding that permission in Discord. The same page limits a command to chosen channels or roles, turns it off, or sends its output somewhere else.
A command marked Staff, Moderators or Veterans checks for that group itself, and the group is set on that feature's page. A bypass role doesn't open it.
The bot manager role counts as holding every permission, Ban Members included. Only the server owner or an Administrator can set it, or any other role that makes people staff. To add a bypass role, you need the permission it skips, and the role has to sit below your highest. @everyone can't hold any of these. Manage Server and Administrator skip channel and role limits. A turned-off command is off for everyone, except that /dashboard and /my_data always work, and the owner and Administrators always keep /config.
Settings by page
Each page in the sidebar holds its own settings, and most explain themselves there. These change how a feature behaves. You need Manage Server to change them.
| Page | Setting | What it does |
|---|---|---|
| Automod | Pause the sender | A timeout of up to 59 seconds on every hit of a rule, to break up a burst. It makes no case. 0 turns it off. |
| Automod | Copied text | Counts one text in one channel, whoever posts it, and deleting takes the earlier copies too. Text under eight letters doesn't count. |
| Automod | Bad names | Reads usernames and nicknames against the bad word list, when someone joins and when they change one. |
| Automod | Punish above | How many warnings someone can hold before a punishment. More steps can follow, such as a mute above three and a ban above five. |
| Autoroles | Timed roles | Gives a role some time after someone joins. |
| Autoroles | Skip bots | Bots that join get no autoroles or timed roles. |
| Greetings | Announcement Time | The hour birthdays go out. The whole server shares one time. |
| Greetings | Joins in a minute before welcomes pause | Past this many, the bot skips each welcome and join DM, and posts one line with the count once joins go quiet. 0 welcomes everyone. |
| Levels | Panel opacity | How solid the dark panel on a rank card is, from clear to solid. |
| Logging | Moderator delete log channel | Deletes where the audit log names a moderator or bot, and purges. Empty keeps them in the message log channel. |
| Logging | Role log channel | Members' role changes. Empty keeps them in the member log channel. |
| Logging | Name log channel | Name and nickname changes. Empty keeps them in the member log channel. |
| Logging | Timeout log channel | Timeouts and lifted timeouts. Empty keeps them in the member log channel. |
| Starboard | Private channels | A message stays off the board when someone who can open the board couldn't read its channel. A channel or category listed here goes up anyway. |
| Voice controls | Record mini mutes as cases | Off, a mini mute writes only to its log channel and that page. On, it also goes in the mod log, the member's case list and moderator rankings. |
New Twitch alerts go to the channel the command is used in. !twitch default_channel sets another one.
Your data
Any member can type /my_data for a private link to a page that shows what the bot holds about them, gives them a copy, and deletes what's theirs to delete.
The Backup page exports everything stored for a server as one file and can put it back. Scheduled snapshots stay on the server. The Activity page shows who changed which setting, with undo.
Text shortcuts
These short names work when you type a command with the server's prefix. Each one runs the longer command under the same rules.
| Type | It runs |
|---|---|
8ball | fun 8ball |
add_ignored_role | rolerule set_ignored |
add_required_role | rolerule set_required |
add_tracked_roles | rolerule add_tracked |
addemoji | fun addemoji |
ae | fun aesthetics |
aesthetics | fun aesthetics |
af | feeds autofeeds |
announce | feeds announce |
approve | suggestion approve |
ar | triggers |
assault | games incursion |
assaults | games incursion |
attachmentspam | automod attachmentspam |
autofeed | feeds autofeeds |
autofeeds | feeds autofeeds |
automod censor add | automod censor words add |
automod censor list | automod censor display |
automod censor remove | automod censor words remove |
automod linkspam bl | automod linkspam blacklist add |
automod linkspam clearbl | automod linkspam clear blacklist |
automod linkspam clearwl | automod linkspam clear whitelist |
automod linkspam unbl | automod linkspam blacklist remove |
automod linkspam unblacklist | automod linkspam blacklist remove |
automod linkspam unwl | automod linkspam whitelist remove |
automod linkspam wl | automod linkspam whitelist add |
autoresponse | triggers |
aww | cute aww |
awwbomb | cute aww true |
banmessage | greetings banmessage |
banmsg | greetings banmessage |
bf | fun boldfancy |
boldfancy | fun boldfancy |
boldfraktur | fun boldfraktur |
botpermissions | misc botpermissions |
capslimit | automod caps limit |
capsp | automod caps punishment |
capspunish | automod caps punishment |
capspunishment | automod caps punishment |
cat | cute cat |
catbomb | cute cat true |
cembed | embed custom |
censor | automod censor |
change_target_role | rolerule change_target |
charinfo | misc charinfo |
choice | fun pick |
choose | fun choose |
clap | fun clap |
cleanconfig | config cleanconfig |
coin | fun coinflip |
coinflip | fun coinflip |
commands | tag list |
config modrole clear | config clearmodrole |
consider | suggestion consider |
create_roleset | rolerule create |
customembed | embed custom |
delete_roleset | rolerule delete |
deletefiles | automod deletefiles |
deny | suggestion deny |
diagnose | config diagnose |
disable | config disable |
dmjoin | greetings joindm |
dog | cute dog |
dogbomb | cute dog true |
double | fun double |
ds | fun double |
dump | stats dump |
ecembed | embed editcustom |
editembed | embed edit |
embedsource | embed source |
embedunhide | embed unhide |
emojify | fun emojify |
enable | config enable |
fancy | fun fancy |
farewell | greetings farewell |
feed | feeds |
ff | fun fancy |
flip | fun coinflip |
fn | games fortnite |
fortnite | games fortnite |
fraktur | fun fraktur |
fun_roles delete | delete_fun_roles |
fun_roles deploy | deploy_fun_roles |
games alerts disable | games alerts free-off |
games alerts enable | games alerts free-on |
greet | greetings welcome |
honeypot | automod honeypot |
i | members info |
ignore | config ignore |
implemented | suggestion implemented |
incursion | games incursion |
info | members info |
invasion | games invasion |
invasions | games invasion |
invite | misc invite |
invitespam | automod invitespam |
joindm | greetings joindm |
joinpm | greetings joindm |
leave | greetings farewell |
level accent | level config accent |
level alpha | level config opacity |
level bl | level blacklist add |
level color | level config color |
level colour | level config color |
level dm | level toggle dm |
level leaderboard | leaderboard |
level opacity | level config opacity |
level replace | level toggle replace |
level resetall | level reset server |
level set_message_xp reset | level set_message_xp default |
level shh | level toggle announcements |
level unbl | level blacklist remove |
level unblacklist | level blacklist remove |
levels | level |
linkspam | automod linkspam |
list_rolesets | rolerule |
lvl | level |
lvls | level |
mentionspam | automod mentionspam |
mini_mute apply | mini_mute |
mini_mute lift | mini_mute_lift |
modonly | config modonly |
modrole | config modrole |
newmembers | members newusers |
newusers | members newusers |
oldest | members oldest |
oldmembers | members oldusers |
oldusers | members oldusers |
owofy | fun owofy |
permissions | misc permissions |
pick | fun pick |
pickmyclass | games pickmyclass |
pickmyspec | games pickmyspec |
pmjoin | greetings joindm |
proposal submit | submit_proposal |
reminders | reminder mine |
remove_ignored_role | rolerule clear_ignored |
remove_required_role | rolerule clear_required |
remove_tracked_roles | rolerule remove_tracked |
reset | games reset |
restrict | config restrict |
rm | reminder |
roblox | games roblox |
roblox play | games roblox |
roll | fun roll |
sc | fun smallcaps |
search | tag search |
select | fun pick |
serverinfo | stats serverinfo |
set farewell | greetings set_farewell |
set twitch | twitch default_channel |
set welcome | greetings set_welcome |
shake | fun shake |
slowmode | automod slowmode |
sm | automod slowmode |
smallcaps | fun smallcaps |
space | fun space |
star | starboard |
steal | fun addemoji |
stickylist | sticky |
stickyremove | sticky remove |
stickytemplate | sticky fromtemplate |
subscribe | reminder subscribe |
suggest | suggestion suggest |
suggestions | suggestion |
sync_roles | rolerule sync |
taglist | tag list |
testgreet | greetings testgreet |
timer | reminder |
twitch fmt | twitch format |
ud | fun urbandictionary |
unignore | config unignore |
unmodonly | config unmodonly |
unrestrict | config unrestrict |
uptime | stats uptime |
urbandictionary | fun urbandictionary |
vc access grant | vc_access_grant |
vc access revoke | vc_access_revoke |
vc access status | vc_access_status |
vc deafen | vc_deafen |
vc disconnect | vc_disconnect |
vc mute | vc_mute |
vc release | vc_release |
vc report | vc_report |
welcome | greetings welcome |
whenisthereset | games reset |
wiki | misc wiki |
youngest | members youngest |
yt | youtube |
A word a typed command can't use is refused with the command's usage, and nothing changes. These commands also take text straight after their name:
| Type | It runs |
|---|---|
automod attachmentspam ... | automod attachmentspam set ... |
automod censor ... | automod censor words add ... |
automod copyspam ... | automod copyspam set ... |
automod linkspam ... | automod linkspam rate ... |
automod mentionspam ... | automod mentionspam set ... |
automod slowmode ... | automod slowmode set ... |
automod whitelist ... | automod whitelist add ... |
games fortnite ... | games fortnite pc ... |
giveaway ... | giveaway create ... |
level blacklist ... | level blacklist add ... |
log ... | log config ... |
starboard ... | starboard setup ... |
sticky ... | sticky add ... |
triggers ignore ... | triggers ignore add ... |
twitch ... | twitch add ... |
youtube ... | youtube add ... |
Commands
Config
| Command | What it does | Needs |
|---|---|---|
/about | Facts about this bot | None |
/config | Show how commands are set up in this servercleanconfig, clearmodrole, diagnose, disable, enable, ignore, modonly, modrole, restrict, unignore, unmodonly, unrestrictAlso answers to cleanconfig, config modrole clear, diagnose, disable, enable, ignore, modonly, modrole, restrict, unignore, unmodonly, unrestrict | Manage Server |
/dashboard | Get a private link that signs you in to the dashboard | None |
/help | List commands, or show what one does | None |
/my_data | See, download or delete what the bot holds about you | None |
/ping | Check that the bot is alive | None |
/prefix | Show the prefixes this server uses for tags and text commandsadd (Manage Server), clear (Manage Server), remove (Manage Server), set (Manage Server) | Varies |
!set | Set the channel for welcome or leave messages, or for Twitch alerts | Manage Server |
Automod
| Command | What it does | Needs |
|---|---|---|
/automod | Show this server's automod settingsattachmentspam disable, attachmentspam dryrun, attachmentspam punishment, attachmentspam set, caps disable, caps dryrun, caps enable, caps limit, caps punishment, censor clear, censor disable, censor display, censor dryrun, censor enable, censor punishment, censor words, copyspam disable, copyspam dryrun, copyspam punishment, copyspam set, deletefiles, drama, honeypot add, honeypot clear, honeypot disable, honeypot dryrun, honeypot enable, honeypot punishment, honeypot remove, honeypot server, invitespam disable, invitespam dryrun, invitespam enable, invitespam norole, invitespam punishment, invitespam whitelist, linkspam blacklist, linkspam block, linkspam clear, linkspam disable, linkspam dryrun, linkspam enable, linkspam norole, linkspam off, linkspam punishment, linkspam rate, linkspam whitelist, log, media, mentionspam disable, mentionspam dryrun, mentionspam punishment, mentionspam set, namefilter disable, namefilter dryrun, namefilter enable, namefilter punishment, slowmode disable, slowmode dryrun, slowmode punishment, slowmode set, threshold, unmedia, !automod unwhitelist, warnpunish, warnstep add, warnstep remove, !automod whitelist add, whitelist channels, whitelist rolesAlso answers to +, -, am, attachmentspam, automod censor add, automod censor list, automod censor remove, automod linkspam bl, automod linkspam clearbl, automod linkspam clearwl, automod linkspam unbl, automod linkspam unblacklist, automod linkspam unwl, automod linkspam wl, capslimit, capsp, capspunish, capspunishment, censor, deletefiles, honeypot, invitespam, linkspam, mentionspam, mo, p, punish, slowmode, sm, umo, unmo, unwl, warn, warnpunishment, wl, wp | Manage Server |
/autopurge | Show which channels are purged on a scheduleremove, set | Manage Server |
Feeds
| Command | What it does | Needs |
|---|---|---|
/feeds | List this server's feedsannounce, autofeeds clear, autofeeds create, autofeeds delete, autofeeds everyone, autofeeds here, autofeeds move, autofeeds repeat, autofeeds silence, autofeeds silent, clear, create, delete, moveAlso answers to af, announce, autofeed, autofeeds, del, feed, remove | Manage Server |
Fun
| Command | What it does | Needs |
|---|---|---|
/cute | Show a random animal picture Also answers to aww, awwbomb, cat, catbomb, dog, dogbomb | None |
/echo | Have the bot post your message, with a button that shows who asked | Manage Server |
/fun | Text toys, coin flips and the magic 8 balladdemoji (Manage Expressions), aesthetics (Manage Server), boldfancy (Manage Server), boldfraktur (Manage Server), clap (Manage Server), coinflip, double (Manage Server), eightball, emojify (Manage Server), fancy (Manage Server), fraktur (Manage Server), owofy (Manage Server), pick (Manage Server), roll, shake, smallcaps (Manage Server), space (Manage Server), urbandictionary (Manage Server)Also answers to 8ball, addemoji, ae, aesthetics, bf, boldfancy, boldfraktur, choice, choose, clap, coin, coinflip, double, ds, emojify, fancy, ff, flip, fraktur, owofy, pick, roll, sc, select, shake, smallcaps, space, steal, ud, urbandictionary | Varies |
Greetings
| Command | What it does | Needs |
|---|---|---|
/birthday | See someone's birthdaychannel (Manage Server), config, list, remove, set | Varies |
/greetings | Show the welcome, farewell and ban setupban_channel, banmessage, farewell, farewell_channel, joindm, !greetings set_farewell, !greetings set_welcome, testgreet, welcome, welcome_channelAlso answers to banmessage, banmsg, dmjoin, farewell, greet, joindm, joinpm, leave, pmjoin, set farewell, set welcome, testgreet, welcome | Manage Server |
Levels
| Command | What it does | Needs |
|---|---|---|
/leaderboard | List members by XP Also answers to level leaderboard | None |
/level | Levels, XP and rank cardsadd_xp (Manage Server), background, blacklist add (Manage Server), blacklist remove (Manage Server), channel (Manage Server), config (Manage Server), limit (Manage Server), log (Manage Server), mee6import (Manage Server), member, message (Manage Server), !level messagexp (Manage Server), mod (Manage Server), rate (Manage Server), reset (Manage Server), restore (Manage Server), reward (Manage Server), rewardonly (Manage Server), serverbackground (Manage Server), set_level (Manage Server), set_message_xp (Manage Server), sync (Manage Server), toggle (Manage Server), voice_xp (Manage Server)Also answers to addxp, bg, level accent, level alpha, level bl, level color, level colour, level dm, level opacity, level replace, level resetall, level set_message_xp reset, level shh, level unbl, level unblacklist, levels, lvl, lvls, msgxp, serverbg, setlevel, voicexp | Varies |
Logging
| Command | What it does | Needs |
|---|---|---|
/log | Show how logging is set up in this serveraio, channel, config, export, ignore, import, join_channel, member_channel, message_channel, moderator_delete_channel, name_channel, prefix, remove_prefix, role_channel, server_channel, timeout_channel, unignore, voice_channelAlso answers to custom, ip, joinchannel, memberchannel, messagechannel, moderatordeletechannel, namechannel, removeprefix, rolechannel, serverchannel, timeoutchannel, up, voicechannel | Manage Server |
Misc
| Command | What it does | Needs |
|---|---|---|
/misc | Small tools: characters, permissions and invite linksbotpermissions (Manage Roles), charinfo, invite, permissions, wikiAlso answers to botpermissions, charinfo, permissions | Varies |
Moderation
| Command | What it does | Needs |
|---|---|---|
/ban | Ban someone, whether or not they're in the server | Ban Members |
/cleanup | Delete my recent messages and commands aimed at me. Pinned ones go too | Manage Server |
/clearwarns | Remove all of a member's warnings Also answers to clearwarn, clearwarnings | Manage Roles |
/delete_fun_roles | Delete every role from the fun role pack Also answers to fun_roles delete | Administrator |
/delete_messages | Delete messages in a channel or thread by filters | Administrator |
/deploy_fun_roles | Create the role pack as an alphabetical block directly below a role Also answers to fun_roles deploy | Administrator |
/fun_roles | Show the server's fun role pack | Administrator |
/hardmute | Mute a member and take their other roles until it ends | Manage Roles |
/kick | Kick a member | Kick Members |
/lockdown | Stop @everyone posting in a channel or the whole serverchannel (Manage Channels), list (Manage Channels), server (Manage Channels), setup (Manage Roles) | Varies |
/massban | Ban a list of people by ID or mention, in or out of the server | Ban Members |
/mini_mute | Briefly mute a member (Server Veterans and moderators) Also answers to mini_mute apply | Moderators and Veterans |
/mini_mute_lift | Take a member's mini mute off early (moderators) Also answers to mini_mute lift | Moderators |
/modlog | Set up the modlog and read its casesclear, create, export, from, highscores, reason, repost, setAlso answers to reason | Manage Server |
/mute | Mute a member with the mute role, for a time or until unmuted | Manage Roles |
/muterole | Choose, make or update the role that mutes memberscreate (Manage Channels, Manage Server, Manage Roles), set (Manage Roles), update (Manage Channels, Manage Server, Manage Roles) | Varies |
/mutes | List running mutes and when they end | Manage Roles |
/notes | Private notes about members that only staff can readclearnotes, removenote, setnote, viewAlso answers to clearnotes, removenote, setnote | Manage Server |
/punishment_notice | Write the standard moderation notice for a ticket with a form | Staff |
/purge | Delete messages in this channel. Pinned messages stayall, bot, contains, embeds, emoji, files, human, images, links, mentions, reactions, userAlso answers to humans, pings | Manage Server |
/raid | See raid mode, which holds new members under the mute roleoff, on, release | Manage Roles |
/removewarning | Remove a warning by its case number Also answers to removewarn | Manage Roles |
/report | Report a member or a problem to the staff | None |
/reportchannel | Set the channel where reports are sent | Manage Server |
/review | Open a member's review thread and start its checklist | Staff |
/role_order | List the server's roles in display order, top to bottom | Administrator |
/setnick | Change a member's nickname, or clear it | Manage Nicknames |
/softban | Ban and unban someone at once, which clears their messages | Ban Members |
/tempban | Ban someone for a length of time | Ban Members |
/tempbans | List temporary bans and when they end | Ban Members |
/timeout | Time a member out with Discord's own timeout | Timeout Members |
/unban | Lift a ban | Ban Members |
/unlockdown | Let @everyone post againchannel, server | Manage Channels |
/unmute | Unmute a member | Manage Roles |
/untimeout | Remove a member's timeout Also answers to removetimeout | Timeout Members |
/vc | See your progress toward voice channel accessbutton (Manage Server) | Varies |
/vc_access_grant | Give someone voice access now, skipping the requirements Also answers to vc access grant | Moderators and Veterans |
/vc_access_revoke | Take away someone's voice access Also answers to vc access revoke | Moderators |
/vc_access_status | Show someone's progress toward voice access Also answers to vc access status | Moderators |
/vc_deafen | Server-deafen someone for a while Also answers to vc deafen | Moderators and Veterans |
/vc_disconnect | Disconnect someone from voice, and optionally block rejoining for a while Also answers to vc disconnect | Moderators and Veterans |
/vc_mute | Server-mute someone for a while Also answers to vc mute | Moderators and Veterans |
/vc_release | Lift someone's temporary voice mute, deafen or rejoin block Also answers to vc release | Moderators |
/vc_report | Report someone misbehaving in a voice channel to the moderators Also answers to vc report | None |
/warn | Warn a member | Manage Roles |
/warns | List a member's warnings, or the newest in the server | Manage Roles |
Roles
| Command | What it does | Needs |
|---|---|---|
/autorole | Show which roles people get when they joinadd, blacklist, reassign, remove, unblacklistAlso answers to autoroles, bl, readd | Manage Roles |
/mass_mention | Ping every member who holds all of the roles you name Also answers to massmention, mm | Mention Everyone |
/rank | Give yourself roles from the server's listaddrank (Manage Roles), allranks, custom, removerank (Manage Roles)Also answers to addrank, c, ranks, removerank | Varies |
/reactionrole | Set up roles members pick up from a messageadd (Manage Server), addmany (Manage Server), aio (Manage Server), !reactionrole aioi (Manage Server), !reactionrole aiou (Manage Server), !reactionrole aiov (Manage Server), !reactionrole binding (Manage Server), !reactionrole bl (Manage Server), blacklist (Manage Server), channel (Manage Server), !reactionrole clearbl (Manage Server), !reactionrole clearwl (Manage Server), color (Manage Server), !reactionrole drop (Manage Server), edit (Manage Server), fix (Manage Server), fixforeign (Manage Server), limit (Manage Server), link (Manage Server), links (Manage Server), !reactionrole lock (Manage Server), maxroles (Manage Server), mode (Manage Server), modify (Manage Server), move (Manage Server), !reactionrole normal (Manage Server), purge (Manage Server), remove (Manage Server), reorder (Manage Server), !reactionrole reversed (Manage Server), selfdestruct (Manage Server), setup (Manage Server), show, temp (Manage Server), !reactionrole unbl (Manage Server), !reactionrole unique (Manage Server), unlink (Manage Server), !reactionrole unwl (Manage Server), !reactionrole verify (Manage Server), whitelist (Manage Server), !reactionrole wl (Manage Server)Also answers to cc, clear, colour, list, make, order, reactrole, rr, unblacklist | Varies |
/role | Give, take and look up rolesadd (Manage Roles), all (Manage Roles), allroles, bots (Manage Roles), bulk-cancel (Manage Roles), color (Manage Roles), create (Manage Roles), custom (Manage Roles), diagnose, humans (Manage Roles), in (Manage Roles), info, rall (Manage Roles), remove (Manage Roles), removeall (Manage Roles), removebots (Manage Roles), removehumans (Manage Roles), removein (Manage Roles)Also answers to allroles, c, clear, colour, purge, rbots, rhumans, rin, rolediagnose | Varies |
/rolerule | Roles that follow from the roles members holdadd_tracked, change_target, clear_ignored, clear_required, create, delete, disable, enable, logchannel, remove_tracked, set_ignored, set_required, show, sync, testAlso answers to add_ignored_role, add_required_role, add_tracked_roles, change_target_role, create_roleset, delete_roleset, list_rolesets, remove_ignored_role, remove_required_role, remove_tracked_roles, rolerules, sync_roles | Manage Roles |
/temprole | Give or take roles for a limited timeadd, custom, listAlso answers to c | Manage Roles |
/timedrole | Show roles given some time after joiningadd, removeAlso answers to +, -, tr | Manage Roles |
Stats
| Command | What it does | Needs |
|---|---|---|
/stats | Show command use, server facts and uptimedump (Manage Roles), global, serverinfo, today, uptime, !stats usageAlso answers to dump, serverinfo, uptime | Varies |
Notifications
| Command | What it does | Needs |
|---|---|---|
/twitch | Show the Twitch channels this server followsadd, !twitch default_channel, format, move, online, removeAlso answers to message, set twitch, twitch fmt | Manage Server |
/youtube | Show the YouTube channels this server followsadd, format, move, removeAlso answers to message, sub, unsub, yt | Manage Server |
Suggestions
| Command | What it does | Needs |
|---|---|---|
/proposal | List the proposals being voted onpromote (Moderators), recheck (Manage Server), settings (Manage Server), withdraw (Moderators) | Varies |
/submit_proposal | Put a change to the server to a vote Also answers to proposal submit | Moderators |
/suggestion | Show how suggestions are set upanonymous (Manage Server), approve (Manage Server), channel (Manage Server), consider (Manage Server), deny (Manage Server), dm (Manage Server), edit (Manage Server), implemented (Manage Server), limit (Manage Server), move (Manage Server), submit (Manage Server), suggest, who (Manage Server)Also answers to anon, approve, consider, deny, implemented, suggest, suggestions | Varies |
Tags & Triggers
| Command | What it does | Needs |
|---|---|---|
/tag | Run one of this server's tagsalias, append, claim, create, edit, info, list, modonly (Manage Server), nsfw (Manage Server), ownership (Manage Server), procreate, prompt, raw, remove, replace, restrict, search, share (Manage Server), stats, unshare (Manage Server), unshareall (Manage Server)Also answers to &, +, ++, +=, -, a, add, commands, del, delete, e, owner, search, sub, taglist, update | Varies |
/triggers | List this server's triggers and what they ignorechannel, clear, create, endswith, exact, ignore add, ignore remove, regex, remove, role, role_blacklist, role_whitelist, startswith, strict, unignoreAlso answers to -, add, ar, autoresponse, cs, del, delete, e, ew, role_bl, role_wl, s, sw | Manage Server |
Utilities
| Command | What it does | Needs |
|---|---|---|
/avatars | Show someone's avatar Also answers to avatar | None |
/giveaway | Run giveaways with an enter buttoncreate, end, list, participants, reroll | Manage Server |
/highlight | Get a DM when a word you follow comes upadd, block, clear, matches, remove, unblockAlso answers to +, -, del, hl, m, match | Manage Messages |
/members | Look up a member, or rank members by age!members info, newusers (Manage Server), oldest (Manage Server), oldusers (Manage Server), youngest (Manage Server)Also answers to i, info, newmembers, newusers, oldest, oldmembers, oldusers, youngest | Varies |
/poll | Post a poll people vote on with reactions | Manage Server |
/reminder | Get a DM about something latercancel, clear, incursion, mine, repeat, subscribe, whenAlso answers to -, del, remind, reminders, remindme, remove, rm, subscribe, timer | None |
/tempchannel | Make a text channel that deletes itself after a while | Manage Channels |
Embeds
| Command | What it does | Needs |
|---|---|---|
/embed | Post and edit embedscreate (Manage Server), custom (Manage Server), edit (Manage Server), editcustom (Manage Server), source, unhide (Manage Server)Also answers to cembed, customembed, ecembed, editembed, embedsource, embedunhide | Varies |
Starboard
| Command | What it does | Needs |
|---|---|---|
/starboard | Show how the starboard is set upautostar (Manage Server), blacklist (Manage Server), emoji (Manage Server), jump (Manage Server), limit (Manage Server), lock (Manage Server), nsfw (Manage Server), random, remove (Manage Server), self (Manage Server), server, setup (Manage Server), show, stats, unblacklist (Manage Server)Also answers to source, star, top | Varies |
Sticky messages
| Command | What it does | Needs |
|---|---|---|
/sticky | Show the sticky messages in this serveradd, !sticky fromtemplate, remove, templateAlso answers to stickylist, stickyremove, stickytemplate | Manage Server |
Games
| Command | What it does | Needs |
|---|---|---|
/games | Play TopRoll, look up players and check World of Warcraft timersalerts (Manage Server), fortnite pc, fortnite playstation, fortnite xbox, incursion, invasion, leaderboard, list, pickmyclass, pickmyspec, play, reset, roblox, toprollAlso answers to assault, assaults, fn, fortnite, games alerts disable, games alerts enable, incursion, invasion, invasions, pickmyclass, pickmyspec, roblox, roblox play, whenisthereset | Varies |
Template language
Tags, triggers, greetings, level-up messages and any other message a server writes can hold blocks. A block is a small instruction in curly braces. The bot replaces it with a result when the message goes out, so Welcome, {user}! greets each person by name.
How a template runs
A block has a name, and sometimes a parameter in parentheses and a payload after a colon: {name(parameter):payload}.
Blocks run from the inside out and left to right, and each result takes the block's place in the text around it. An outer block therefore reads what its inner blocks produced, and a later block can use a variable an earlier one set.
| Example | Result |
|---|---|
{upper:{lower:ABC}d} | ABCD |
{=(a):1}{=(a):{a}2}{a} | 12 |
Every complete block runs, even inside the branch of an if that isn't taken. To make a block depend on a condition, put the condition inside the block. The second example below shows the other way to do it, which builds the block's name with an if.
| Example | Result |
|---|---|
{if(1==2):{=(x):set}}{x} | set |
{=(x):off}{{if(1==1):=(x)}:on}{x} | on |
A name nothing answers to stays as written, and so does a block that can't work with what it was given, such as math on a word. Spaces and blank lines at the very start and end of the result are removed. Block names ignore capitals. Variable names don't.
| Example | Result |
|---|---|
{nothing} {m:one+two} | {nothing} {m:one+two} |
{UPPER:a}{=(Name):b}{name} | A{name} |
{=(a):1}hello | hello |
Text from outside the template is data. What a member typed, a nickname or a channel's name can fill in a value, but its punctuation can't change what a block does. Someone typing x==x can't pass a check against a passphrase, and someone typing cmd:ban me can't turn {{args}} into a command block. A name built from outside text can only read a variable.
Where blocks work
Tags and triggers run everything in this reference. In greetings and other messages a server writes, the blocks under Actions and Commands do nothing and leave no text behind, because no one ran them. Embed blocks work everywhere.
Text assigned in a message's text is there for its embed too, so a variable can hold a sentence the embed's title and description both use. An embed's parts run in the order they're shown on the page: author, title, link, description, fields, image, thumbnail, footer.
What the examples assume
Every example in this reference runs against these values, and an automated test checks each one against the bot, so the results shown are the results you'd get.
| Value | In the examples |
|---|---|
| The person | Display name Ada, username ada, ID 111111111111111111, joined 2025-06-07 08:09:10, account made 2020-02-03 04:05:06 |
| Their roles | Crew, position 2, ID 222222222222222222, color #5989ab, plus @everyone with the server's ID |
| The target | Grace, username grace, ID 555555555555555555, mentioned in the message |
| The server | Harbor, ID 333333333333333333, created 2019-01-01 00:00:00, owned by owner, with four members and one bot |
| The channel | general, ID 444444444444444444, topic Say hello, slowmode 30, position 3 |
| The role, in role triggers | Crew, just added |
| The text after the name | one two three |
| The tag's use count | 42 |
| The time | 2026-01-02 03:04:05 UTC |
Variables
| Block | What it gives | Example | Result |
|---|---|---|---|
{args} | The text after the tag's name. In a trigger, the whole message. | {args} | one two three |
{message} | The same text, as a separate variable. Assigning to one leaves the other alone. | {=(args):x}{args} {message} | x one two three |
{1}, {2} and so on | One word of {message}. | {2} | two |
{uses} | How many times the tag has run, counting this time. | {uses} | 42 |
{unix} | The time now, in seconds since 1970. | {unix} | 1767323045 |
{mention} | Mentions the person using the tag. | {mention} | <@111111111111111111> |
Assigning
{=}, {assign}, {let} and {var} all do the same thing: they store the payload under the name in the parameter and leave no text. Read it back with the name in braces. A variable can have any name, but a block's name goes to the block first, so give variables names of two letters or more.
| Block | What it gives | Example | Result |
|---|---|---|---|
{=(name):value} | Nothing. Stores the value. | {=(pet):cat}I have a {pet} | I have a cat |
{assign(name):value} | The same. | {assign(pet):cat}{pet} | cat |
{let(name):value} | The same. | {let(pet):cat}{pet} | cat |
{var(name):value} | The same. | {var(pet):cat}{pet} | cat |
A name can be built from other blocks, and an empty name is allowed. {=():} gives {} something empty to answer with, which is what makes a block's name that sometimes comes out empty safe to use.
| Example | Result |
|---|---|
{=(msg2):second}{=(n):2}{msg{n}} | second |
[{=():}{}] | [] |
Reading part of a variable
Any variable holding text can be read a piece at a time, with a position in parentheses. Pieces are split on spaces, or on whatever the payload says. 1 is the first piece, 0 is the last and -1 is the one before it. A plus sign after the number means that piece onward, and before it means up to that piece. A position past the end gives the whole value, and a span past the end gives nothing.
| Example | Result |
|---|---|
{args(1)} | one |
{args(0)} | three |
{args(-1)} | two |
{args(2+)} | two three |
{args(+2)} | one two |
{=(when):a,b,c}{when(2):,} | b |
{args(9)} | one two three |
[{args(9+)}] | [] |
People
{user} is the person using the tag. {target} is the first person they mention after the tag's name, or the same person when they mention nobody. On their own, both give the display name. In a trigger, the target comes from the message's mentions. In a role trigger, {user} is whoever changed the role and {target} is the member it changed on. Its require, blacklist, dm and command blocks act for that member.
| Block | What it gives | Example | Result |
|---|---|---|---|
{user} | The display name. | {user} | Ada |
{target} | The target's display name. | {target} | Grace |
(id) | The Discord ID. | {user(id)} | 111111111111111111 |
(name) | The username. | {user(name)} | ada |
(proper) | The username, with the old four-digit tag for accounts that still have one. | {user(proper)} | ada |
(nick) | The display name. | {target(nick)} | Grace |
(mention) | A mention. | {target(mention)} | <@555555555555555555> |
(avatar) | A link to the avatar. | {user(avatar)} | https://cdn.example/avatar.png |
(icon) | The same link. | {user(icon)} | https://cdn.example/avatar.png |
(created_at) | When the account was made. | {user(created_at)} | 2020-02-03 04:05:06 |
(joined_at) | When they joined this server. | {user(joined_at)} | 2025-06-07 08:09:10 |
(color) | The color of their highest colored role. #000000 when they have none. | {user(color)} | #5989ab |
(roleids) | The IDs of their roles, lowest first, with spaces between. | {user(roleids)} | 333333333333333333 222222222222222222 |
(position) | How high their top role sits. @everyone is 0. | {user(position)} | 2 |
The server
| Block | What it gives | Example | Result |
|---|---|---|---|
{server} | The name. | {server} | Harbor |
(id) | The ID. | {server(id)} | 333333333333333333 |
(name) | The name. | {server(name)} | Harbor |
(icon) | A link to the icon, or nothing when there's none. | [{server(icon)}] | [] |
(owner) | The owner's username. | {server(owner)} | owner |
(members) | How many members it has. | {server(members)} | 4 |
(bots) | How many of them are bots. | {server(bots)} | 1 |
(humans) | How many aren't. | {server(humans)} | 3 |
(roles) | How many roles it has. | {server(roles)} | 2 |
(channels) | How many channels it has. | {server(channels)} | 4 |
(created_at) | When it was created. | {server(created_at)} | 2019-01-01 00:00:00 |
(random) | The username of a random member. | {server(random)} | ada or grace or owner or bot |
(randomonline) | Someone from those online. The bot doesn't watch who is online, so this is any member. | {server(randomonline)} | ada or grace or owner or bot |
(randomoffline) | Someone from those offline, for the same reason any member. | {server(randomoffline)} | ada or grace or owner or bot |
The channel
| Block | What it gives | Example | Result |
|---|---|---|---|
{channel} | The name. | {channel} | general |
(id) | The ID. | {channel(id)} | 444444444444444444 |
(name) | The name. | {channel(name)} | general |
(topic) | The topic. | {channel(topic)} | Say hello |
(slowmode) | The slowmode delay in seconds. | {channel(slowmode)} | 30 |
(position) | Its place in the channel list. | {channel(position)} | 3 |
(mention) | A link to it. | {channel(mention)} | <#444444444444444444> |
The role, in role triggers
| Block | What it gives | Example | Result |
|---|---|---|---|
{role} | The name of the role that changed. | {role} | Crew |
(id) | Its ID. | {role(id)} | 222222222222222222 |
(name) | Its name. | {role(name)} | Crew |
(mention) | A mention. | {role(mention)} | <@&222222222222222222> |
(position) | How high it sits. | {role(position)} | 2 |
(is_added) | true if it was added, false if it was removed. | {role(is_added)} | true |
(has_elevated_perms) | true if it can moderate or manage the server. | {role(has_elevated_perms)} | false |
Conditions
A condition compares two sides with an operator. == and != compare text exactly, capitals included. The others compare numbers.
| Operator | True when | Example | Result |
|---|---|---|---|
== | The sides are the same text. | {if(cat==cat):yes|no} | yes |
!= | They differ. | {if(tree!=car):yes|no} | yes |
> | The left number is larger. | {if(15>20):yes|no} | no |
>= | Larger or equal. | {if(17>=17):yes|no} | yes |
< | The left number is smaller. | {if(25<5):yes|no} | no |
<= | Smaller or equal. | {if(1<=1):yes|no} | yes |
In a block with an else, a pipe divides the payload: what's before it comes out when the condition holds, and what's after it when it doesn't. With no pipe, a condition that fails gives nothing. With two or more pipes, the whole payload comes out when it holds.
| Block | What it gives | Example | Result |
|---|---|---|---|
{if(condition):then|else} | The then part or the else part. Stays as written when numbers are compared and one side isn't a number. | {if({1}==one):first|other} | first |
{any(a|b):then|else} | The then part when at least one condition holds. | {any(1==2|2==2):yes|no} | yes |
{or(a|b):then|else} | The same. | {or(1==2|2==3):yes|no} | no |
{all(a|b):then|else} | The then part when every condition holds. A side that isn't a number counts as not holding. | {all(1==1|2==2):yes|no} | yes |
{and(a|b):then|else} | The same. | {and(1==1|2==3):yes|no} | no |
{break(condition):text} | Nothing here, but when the condition holds the whole output becomes the text. Blocks after it still run. | {break(1==1):Only this.} Not this. | Only this. |
{short(condition):text} | The same. | {short(1==2):Only this.} This stays. | This stays. |
{shortcircuit(condition):text} | The same. | {shortcircuit(1==1):Only this.} Not this. | Only this. |
{stop(condition):text} | When the condition holds, the text, and everything after it in that piece of text is dropped and no later block in it runs. An embed is a separate piece of text and still runs. Otherwise nothing. | before {stop(1==1):end} after | before end |
{halt(condition):text} | The same. | a{halt(1==2):x}b | ab |
Lists
{list}, {cycle} and {random} read a list split on tildes when there are any, otherwise on commas. Use tildes when an element holds a comma. Counting starts at 0, and a negative number counts back from the end.
| Block | What it gives | Example | Result |
|---|---|---|---|
{list(n):a,b} | Element n, or nothing when n is past the end. A message when n isn't a number. | {list(3):red~green~blue~pink} | pink |
{cycle(n):a,b} | Element n, going round again past the end. A message when n isn't a number. | {cycle(7):red,green,blue} | green |
{index(word):words} | Where the first copy of a word sits among words split on spaces, or -1. | {index(blue):red green blue} | 2 |
{in(text):text} | true if the parameter appears anywhere in the payload, otherwise false. Capitals count. | {in(spam):No spamming} | true |
{contains(word):words} | true if the parameter is one of the words, otherwise false. | {contains(spam):No spamming} | false |
Text
| Block | What it gives | Example | Result |
|---|---|---|---|
{ord:number} | The number with its ordinal ending. Thousands get commas. Anything else comes back unchanged. | {ord:8102} | 8,102nd |
{lower:text} | The text in lower case. | {lower:Tall Ship} | tall ship |
{upper:text} | The text in upper case. | {upper:tall ship} | TALL SHIP |
{join(with):text} | The text with each space replaced. The parameter can be empty but has to be there. | {join(_):tall ship} | tall_ship |
{replace(from,to):text} | The text with every copy of one string replaced by another. An empty first string puts the second around every character. | {replace(oo,ee):Goose Tooth} | Geese Teeth |
{urlencode:text} | The text made safe for a link. | {urlencode:a b, c?} | a%20b%2C%20c%3F |
{urlencode(+):text} | The same, with plus signs for spaces. | {urlencode(+):a b, c?} | a+b%2C+c%3F |
{substr(from-to):text} | The characters from one position up to another, counting from 0. | {substr(1-3):abcde} | bc |
{substring(from):text} | The characters from a position to the end. | {substring(2):abcde} | cde |
Math
{math}, {m}, {+} and {calc} all work out the expression in their payload, in the usual order of operations. Numbers are decimal, so {m:2+2} gives 4.0. Only trunc, round and sgn give whole numbers. An expression that can't be worked out stays as written.
| Block | What it gives | Example | Result |
|---|---|---|---|
{math:expression} | The result. | {math:8+9} | 17.0 |
{m:expression} | The same. | {m:5*6} | 30.0 |
{+:expression} | The same. | {+:8/2} | 4.0 |
{calc:expression} | The same. | {calc:7-4} | 3.0 |
| Written | What it does | Example | Result |
|---|---|---|---|
a+b, a-b, a*b, a/b | Add, subtract, multiply, divide. | {m:1+2*3} | 7.0 |
a%b | The remainder. | {m:7%4} | 3.0 |
a^b | To the power of. Powers group from the right. | {m:2^3^2} | 512.0 |
abs(x) | Without its sign. | {m:abs(-3)} | 3.0 |
round(x) | To the nearest whole number. Halves go to the even neighbor. | {m:round(7.8)} | 8 |
trunc(x) | The decimals chopped off. | {m:trunc(8.9)} | 8 |
sin(x), cos(x), tan(x) | Trigonometry in radians. | {m:cos(pi)} | -1.0 |
sinh(x), cosh(x), tanh(x) | Hyperbolic versions. | {m:cosh(0)} | 1.0 |
exp(x) | e to the power of x. | {m:exp(0)} | 1.0 |
sgn(x) | 1, 0 or -1 by the sign of x. | {m:sgn(-5)} | -1 |
log(x) | Logarithm, base 10. | {m:log(1000)} | 3.0 |
ln(x) | Natural logarithm. | {m:ln(e)} | 1.0 |
log2(x) | Logarithm, base 2. | {m:log2(8)} | 3.0 |
pi | 3.141592653589793 | {m:pi} | 3.141592653589793 |
e | 2.718281828459045 | {m:e} | 2.718281828459045 |
Random
{random}, {rand} and {#} pick from a list split on tildes or commas. An element written 4|text counts as four copies of that element. Give a seed in the parameter and the same seed picks the same place every time, which is how a tag can give each person a fixed result: {random({user(id)}):Mage,Warrior}. The same seed on a list of another length can land on a different element.
| Block | What it gives | Example | Result |
|---|---|---|---|
{random:a,b} | A random element. | {random:red,green} | red or green |
{random(seed):a,b} | The element this seed locks to. | {random(7):red,green,blue} | blue |
{rand(seed):a~b} | The same. | {rand(7):red~green~blue} | blue |
{#(seed):a,b} | The same. | {#(7):red,green,blue} | blue |
{random:9|a,1|b} | A weighted pick. | {random(5):9|common,1|rare} | common |
{range:low-high} | A whole number in the range, both ends included. Takes a seed too. | {range(7):1-100} | 92 |
{rangef:low-high} | A number with one decimal in the range. Takes a seed too. | {rangef(7):1-2} | 1.9 |
{5050:text} | The text half the time, nothing the other half. | {5050:Hi} | Hi or nothing |
{50:text} | The same. | {50:Hi} | Hi or nothing |
{?:text} | The same. | {?:Hi} | Hi or nothing |
Time
All times are UTC. A date is written yyyy-mm-dd HH:MM:SS, and periods work in place of the colons. A number means seconds since 1970.
| Block | What it gives | Example | Result |
|---|---|---|---|
{strf:format} | The time now, in a format. | {strf:%A %B %-d, %Y} | Friday January 2, 2026 |
{strf(date):format} | A given time, in a format. | {strf(1999-12-31 23.59.59):%A} | Friday |
{td:date} | How far away a date is from now, in calendar terms, largest three units. | {td:2026-03-01 00:00:00} | 1 month, 3 weeks and 5 days |
{td(date):date} | How far apart two dates are. | {td(2026-01-01 00:00:00):2026-01-03 12:00:00} | 2 days and 12 hours |
The format codes are the ones on Linux, in English, and the same on every server.
| Code | Gives | Example | Result |
|---|---|---|---|
%Y | The year. | {strf:%Y} | 2026 |
%y | The year's last two digits. | {strf:%y} | 26 |
%m | The month as a number. | {strf:%m} | 01 |
%B | The month's name. | {strf:%B} | January |
%b | The month's short name. | {strf:%b} | Jan |
%d | The day of the month. | {strf:%d} | 02 |
%-d | The day, with no leading zero. A dash works with any number. | {strf:%-d} | 2 |
%e | The day, padded with a space. | {strf:[%e]} | [ 2] |
%A | The weekday's name. | {strf:%A} | Friday |
%a | The weekday's short name. | {strf:%a} | Fri |
%H | The hour, 24-hour clock. | {strf:%H} | 03 |
%I | The hour, 12-hour clock. | {strf:%I} | 03 |
%M | The minute. | {strf:%M} | 04 |
%S | The second. | {strf:%S} | 05 |
%p | AM or PM. | {strf:%-I:%M %p} | 3:04 AM |
%j | The day of the year. | {strf:%j} | 002 |
%s | Seconds since 1970. | {strf:%s} | 1767323045 |
%F | The same as %Y-%m-%d. | {strf:%F} | 2026-01-02 |
%T | The same as %H:%M:%S. | {strf:%T} | 03:04:05 |
%x | The date with slashes. | {strf:%x} | 2026/01/02 |
%X | The same as %H:%M:%S. | {strf:%X} | 03:04:05 |
%c | The date and time written out. | {strf:%c} | Fri Jan 2 03:04:05 2026 |
%^a | A caret puts any code in capitals. | {strf:%^a} | FRI |
%% | A percent sign. | {strf:100%%} | 100% |
Actions
These blocks leave no text behind. They ask the bot to do something when a tag or trigger runs. The order is fixed: require and blacklist decide first, then the output goes out, then reactions, then commands, and the delete comes last.
| Block | What it does | Example | Result |
|---|---|---|---|
{delete} | Deletes the message that set it off. | {delete}Gone | Gone |
{del} | The same. | {del}Gone | Gone |
{silent} | Keeps commands in command blocks from posting. Their errors still show. | {silent}Done | Done |
{silence} | The same. | {silence}Done | Done |
{override} | Commands in command blocks run as if the person held the bot manager role. Role order still applies, and Ban Members stays out of reach. Only counts on a trusted tag or trigger. | {override}Done | Done |
{dm} | Sends the output to the person who ran it, by DM. Nobody else can be the target. | {dm}Secret | Secret |
{redirect:channel} | Sends the output to a channel in this server, named by name, ID or mention. Whoever owns the tag or wrote the trigger has to be able to post there, unless it's trusted. With both, the last of this and {dm} wins. | {redirect:general}Moved | Moved |
{require(message):list} | Only runs for someone with a listed role, or in a listed channel. Entries are names, IDs or mentions with commas between. If it stops someone, they see the message, or a warning reaction when there's none. | {require(Crew only):Crew}Welcome | Welcome |
{blacklist(message):list} | Refuses someone with a listed role, or in a listed channel. | {blacklist(Not here):Staff}Welcome | Welcome |
{react:emoji} | Reacts to the output. Spaces go between emoji. Paste the emoji itself, or write a server emoji as :name:. | {react:👍}Done | Done |
{reactu:emoji} | Reacts to the message that set it off. | {reactu:👍}Done | Done |
Embed blocks
These change the first embed the message has, and a message with no embed gets one.
| Block | What it does | Example | Result |
|---|---|---|---|
{embed(title):text} | Sets the title. | {embed(title):Hello} | nothing |
{embed(description):text} | Sets the description. | {embed(description):Hello} | nothing |
{embed(url):link} | Sets the title's link. It has to start with http:// or https://. | {embed(url):https://example.com} | nothing |
{embed(color):#hex} | Sets the color. | {embed(color):#5989ab} | nothing |
{embed(timestamp):now} | Sets the timestamp to now, the only value it takes. | {embed(timestamp):now} | nothing |
Commands
A command block runs one of the bot's commands, written as you'd write it after the prefix, short names included. The output of the tag goes first. Command blocks can't run tags or the tag and reaction role commands, and each tag runs at most five. If the person can't use the command, they get the same error the command would give them.
A tag or trigger starts out untrusted. A tag's command blocks then only run for its owner, nothing in its output pings anyone but the person it moves to the bot channel for, and automod reads what it's about to post. A trigger's command blocks don't run at all, and it only reads and posts in channels whoever wrote it can, so it goes quiet if they leave. The server owner or an Administrator can mark either one as trusted on its page, and it stops being trusted if anyone else changes its text or who can use it. Anyone else who changes a tag's text also becomes its owner, so its command blocks run only for whoever wrote the words.
What a trusted tag or a trigger posts can ping the person who set it off, the person they named, and anyone its own text mentions. Text a member typed pings nobody else.
| Block | What it does | Example | Result |
|---|---|---|---|
{command:text} | Runs a command with the permissions of the person using the tag or setting off the trigger. It needs a trusted tag or trigger, or that person to own the tag. | {command:ping} | nothing |
{cmd:text} | The same. | {cmd:ping} | nothing |
{c:text} | The same. | {c:ping} | nothing |
{cmdAdmin:text} | On a trusted tag or trigger, runs a command as the bot, with the bot's permissions and place in the role list. Anywhere else it's the same as {command:text}. | {cmdAdmin:ping} | nothing |
Since every complete block runs, an if around a command block doesn't stop it. Put the condition inside, or build the block's name with an if as below.
| Example | Result |
|---|---|
{cmd:{if({1}==one):ping|help}} | nothing |
{=():}{{if({1}==nine):cmd:ping}} | nothing |
A worked example
This tag greets whoever is mentioned, in an embed, using a random color for anyone whose color is the default, and gives them a role. Its text comes out empty, because every line is a block that leaves nothing.
{=(hello):Welcome aboard, {target(mention)}. You're part of {server} now.}
{=(oops):Mention the person you want to greet.}
{embed(description):{if({user(id)}!={target(id)}):{hello}|{oops}}}
{=(digits):0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
{=(shade):#{#:{digits}}{#:{digits}}{#:{digits}}{#:{digits}}{#:{digits}}{#:{digits}}}
{embed(color):{if({target(color)}==#000000):{shade}|{target(color)}}}
{=():}
{{if({user(id)}!={target(id)}):cmd:role add {target(id)} Crew}}
{silent}
The next tag reads a small table of holidays. Each variable holds three values with pipes between them, and the name comes from what the person typed.
{=(one):Christmas|December 25|a tree}
{=(two):Valentine's Day|February 14|a heart}
{any({1}==one|{1}==two):{{1}(1):|} falls on {{1}(2):|}. Look for {{1}(3):|}.}
Christmas falls on December 25. Look for a tree.
Limits
No template can hang the bot or fill the channel. A run that goes past a limit stops: a tag or trigger then posts nothing and does nothing, and other messages go out with the template left as written.
| What | Limit |
|---|---|
| Characters in a tag or trigger's text | 25,000 |
| Characters one block can produce | 100,000 |
| Characters handled in one run | 8,000,000 |
| Blocks in one template | 20,000 |
| Time for one run | 0.25 seconds |
| Command blocks that run per tag | 5 |
| Emoji per tag, for each of react and reactu | 5 |
| Characters in a math expression | 5,000 |
| How deep a math expression can nest | 100 levels |
| Size of a whole number in math | 4,096 bits |
A server's tags, its triggers and its other messages each have 5 seconds of processing time a minute, and one person has 1 second a minute across all of them. Past either, a tag or trigger does nothing until the next minute, a tag typed in chat gets a warning reaction, and other messages go out with the template left as written.
A tag or trigger that uses its whole 0.25 seconds is stopped for 10 minutes. It stops for everyone when its owner ran it, or once three different people have run it that far. Otherwise only the same text after its name stays stopped. A tag's owner gets a DM and a trigger leaves a note for staff. Changing the words turns it back on.
What comes out gets cut to what Discord accepts: 2,000 characters of text, 4,096 for an embed's description, 6,000 across a message's embeds. A link that doesn't come out as a link is dropped, and so is an embed field left empty, because Discord refuses a whole message over either.