Dynamic responses

Tired of your welcome messages and custom commands always yielding the same boring results? Try spicing things up with Dynamic Responses!

To use a dynamic response, simply put one of the 'variables' below (in curly brackets) in your response. You'd be surprised by how much you can do!

Use r!execute to test dynamic responses directly through Discord!

Discord

Name Description Usage Example Result
Author Returns an author-related variable. Available fields: username, tag, @, nickname, discrim, id, bot, avatar, roles, color {field|optional: member name/id} Hi there {username}! Your user ID is {id}, your color is {color}, and your discriminator is #{discrim}. Also, get pinged: {@} Hi there Colon! Your user ID is 309104296362901505, your color is #ff8000, and your discriminator is #0009. Also, get pinged: @Colon#0009
Server Returns a server-related variable. Available fields: name, id, members, roles, channels, categories, vcs, emojis, boosts, icon {server|field} This server is named {server|name}, has {server|members} members, and {server|emojis} emojis! This server is named Epic Server, has 43 members, and 31 emojis!
Channel Returns a channel-related variable. Available fields: name, tag, topic, id, members, category, slowmode, nsfw, thread, url {channel|field} This channel is named #{channel|name}, is viewable by {channel|members} members and is part of the {channel|category} category! This channel is named #talking, is viewable by 38 members and is part of the General category!
Message Returns a variable based on the message used to trigger the custom command. Only works with custom commands (no join messages, etc). Available fields: id, content, author, timestamp, tts, url {message|field} The ID of your message is {message|id} and it is {length|{message|content}} characters long! The ID of your message is 814910681928564788 and it is 364 characters long!
Role Returns a variable based on the author's roles. Available fields: highest, lowest, color, hoist, random (color = the author's highest color role, hoist = the author's member list role). Formatting fields (what information on the role you want): name, tag, id, color, position, hoisted, mentionable, external {role|field or role ID|formatting} Your highest role is {role|highest|tag}, and your username color is {role|color|color} Your highest role is @Admin, and your username color is #ff8000
Custom
Emoji
Posts a custom emoji. You can get the ID right from Discord by typing a backslash before a custom emoji, e.g. \:robotop: will turn into <:robotop:562615332800299008>. Putting this in your response should automatically convert it to an emoji, provided RoboTop is in the server with it {emoji|name} or <:emojiname:emojiid> Hi there! I'm {emoji|robotop} RoboTop! <:robotop:562615332800299008> Hi there! I'm RoboTop!
Button Adds a URL button to the message (up to 25) {button|text|url} Click the button below to go to my website! {button|Cool Button|gdcolon.com} Click the button below to go to my website!
File Attaches a file (image, video, sound, etc) to the message (up to 10). Note that this method is slower and large files may not be posted, so it's probably safer to just share the direct URL. {file|text|url} Here's a random foxxo! {file|randomfox.ca/images/{rng|1|100}.jpg} Here's a random foxxo!
[insert cute attached fox pic]

User Data

Name Description Usage Example Result
Joined Returns the time since the author joined the server. Allowed units are milliseconds, seconds, minutes, hours, days, weeks, or years. {joined|unit} You have been a member of our club for {joined|weeks} weeks! You have been a member of our club for 9 weeks!
Created Returns the time since the author created their account. Allowed units are the same as {joined} {created|unit} You have been slowly turning into a furry for {created|days} days. You have been slowly turning into a furry for 638 days.
Has Role Checks if the member has a specific role. Useful with {test} {hasrole|role name or ID} It is **{hasrole|nerd}** that you have the "nerd" role It is true that you have the "nerd" role
Permission Checks if the member has a specific permission. Useful with {test}. You can view the list of permission names here. {permission|name of permission} It is **{permission|manage messages}** that you have the Manage Messages permission It is false that you have the Manage Messages permission
Zoo Returns the amount of a certain animal in the author's zoo. Using just {zoo} will return their total zoo score, and {zoo|%} will return their completion percentage. {zoo|animal} You have {zoo|fox} foxes in your zoo. Can I have them? You have 9 foxes in your zoo. Can I have them?
Zoo Data Returns miscellaneous information about the author's zoo. Available fields: name, color, public, leader, quest, notifications, autorescues, score, completion {zoodata|field} Your zoo is named "{zoodata|name}"" and its color is #{zoodata|color} Your zoo is named "potential sacrifices" and its color is #344cff

Text

Name Description Usage Example Result
Args Gets an argument from the command.
If the command is r!customcommand cool dude, argument 1 is "cool" and argument 2 is "dude".
Use just {args} to get all arguments, {args|x|y} to get arguments X through Y, and {args|#} to get the total number of arguments
{args|number|optional: last} My favorite color is {args|1}! My favorite color is red!
(if you entered r!command red)
Var Declares a variable which can be used later on. The value can be read with {variablename} or {var|variablename} {var|name|value} {var|chosenPet|{choose|cat|dog}}
You should buy a pet {chosenPet}. Make sure to feed your {chosenPet} plenty of {chosenPet} food!
You should buy a pet dog. Make sure to feed your dog plenty of dog food!
Variable with Arguments Additional arguments may be provided for a {variable}. These arguments will replace instances of "%1", "%2", etc in the string. {variable name|arg1|arg2...} {var|quote|Oh, %1! I cannot wait to play %1! I love %2 with %1!} {quote|Minecrap|building bricks} Oh, Minecrap! I cannot wait to play Minecrap! I love building bricks with Minecrap!
Prefix Returns the server's prefix {prefix} Use {prefix}rank to check your current RoboTop level! Use r!rank to check your current RoboTop level!
Alias Returns the name of the command or alias used to trigger the response (always lowercase) {alias} You triggered this command with {prefix}{alias} You triggered this command with r!dostuff
Test Compares two or more strings of text and returns different text depending on if they match or not.
If more parameters are added, all of the values must be the same to count as a match
{test|text1|text2...|
match|nomatch}
{test| {username} | Colon | Your username is Colon! | Your username is not Colon!} Your username is not Colon!
(but if Colon ran this command, it would give the other response!)
Switch Returns a different value depending on which 'key' the input matches. Keys and values are separated with colons, or semicolons for case sensitivity. The first non-separated argument will be used as the default value if none of the keys are matched. {switch|text|key1:value1|
key2:value2|key3;value3...|
default value}
This animal goes
{switch|Cow|cat: meow|dog: woof|pig: oink|something else|cow: moo}!
This animal goes moo!
Length Gets the length of text {length|text} Hello is {length|hello} letters long, and your username is {length|{username}}! Hello is 5 letters long, and your username is 7!
Lower Converts text to lowercase {lower|text} {lower|I am VERY EDGY and I have a Black Profile Photo...} i am very edgy and i have a black profile photo...
Upper Converts text to UPPERCASE {upper|text} {upper|sans is in smash} SANS IS IN SMASH
Capitalize Capitalizes the first letter of the text {capitalize|text|optional: Title Case} {capitalize|my name is craig}, but you can call me {capitalize|the cringe normie|true} My name is craig, but you can call me The Cringe Normie
Apostrophe Adds a possessive apostrophe to the message. In most cases this will add 's to the message, or just ' if it already ends with S. {apos|text} Did you fluff {apos|Colon} {apos|foxes} tails today? Did you fluff Colon's foxes' tails today?
Unmark Removes Discord markdown from text {unmark|text} This message is NOT in {unmark|**bold**}. This message is NOT in **bold**.
Reverse Reverses text {reverse|text} {reverse|This text is in reverse!} !esrever ni si txet sihT
Repeat Repeats text {repeat|text|amount, max 200} I {repeat|really |3}like this image I really really really like this image
Limit Truncates text to a specific length {limit|text|maxlength} {limit|I am so stupidly impressed with your ability to make bad suggestions|14}! I am so stupid!
Slice Trims the beginning and end of text {slice|text|beginning|end} {slice|123456789|3|3} -- {slice|123456789|6} -- {slice|123456789|0|6} 456 -- 789 -- 123
Split Splits text into smaller strings with the specified character.
e.g. splitting have;a;good day;sir would split into "have", "a", "good day", and "sir"
{split|text|string number|splitter, default is space} {split|Hi there, my name is Garfield, and I love lasagna!|2|, } my name is Garfield
Contains Returns the number of times a substring appears within a message (case sensitive!) {contains|text|substring} The word "banana" contains "a" {contains|banana|a} times! The word "banana" contains "a" 3 times!
URL URL encodes text {url|text} What are all these {url|wacky symbols?? >:/} What are all these wacky%20symbols%3F%3F%20%3E%3A%2F
Spoiler Puts text between ||spoiler tags|| {spoiler|text} {spoiler|Sans} is actually Ness!!! ||Sans|| is actually Ness!!!
Replace Finds some text and replaces it with something else. The text you put in the 'case sensitive' part doesn't matter. {replace|text|find|replace|
optional: case sensitive?}
{replace|Craig is really ugly!|ugly|handsome} Craig is really handsome!
Regex Matches text using a regular expression. I recommend testing expressions at regexr.com
The global (g) flag will always be set unless capture groups are enabled. (in which result #0 returns the full match)
{regex|text|expression|
result #|optional: enable capture groups?}
The second word to start with "ca" in the following list is **{regex|car cry cod cat cup can cow|ca[a-z]|2}** The second word to start with "ca" in the following list is cat
Regex
Replace
Finds and replaces text using a regular expression. I recommend testing expressions at regexr.com
The global (g) flag will always be set.
{regexreplace|text|expression|
replace}
{regexreplace|this Expression will Highlight every Capitalized Word in Bold|[A-Z]\w+|**$&**} this Expression will Highlight every Capitalized Word in Bold
Trim Removes the whitespace from the beginning and end of some text. Useful with {split} {trim|    text    } I like fire trucks and {trim|      moster trucks     } I like fire trucks and moster trucks
Hex Color Gets the hex code from a color's name. Leave the name blank or use "random" for a random color. {hexcolor|color} I'm feeling especially #{hexcolor|blue} today... I'm feeling especially #0000ff today...
Char Converts a numeric character code to a UTF-8 character. Sometimes multiple codes need to be combined to form a single character. {char|charactercode|
code2|code3...}
Look at all of these neat unicode characters! {char|3486} {char|0x30c4} {char|0xd83d|56613} Look at all of these neat unicode characters! ඞ ツ 🔥
Char Code Returns the numberic character code of a UTF-8 character. Sometimes a single character contains multiple combined codes. {charcode|char} The character code for ༬ is {charcode|ꑕ}, and the codes for 🦊 are {charcode|🦊} The character code for ༬ is 42069, and the codes for 🦊 are 129418,56714
Newline Adds a line break. How fancy. {\n} owo{\n}uwu{\n}⚫︎w⚫︎ owo
uwu
⚫︎w⚫︎
Comment Ignores the text inside the brackets. Useful for comments. {#|text} test 123 {#|note to self - finish this dumb command} test 123

Lists

Name Description Usage Example Result
Params Converts a normal list into dynamic response parameters, separated by | {params|list|splitter, default is ,} My favorite indie games are {params|Celeste and Hollow Knight and OneShot and Terraria and Cave Story| and } My favorite indie games are Celeste|Hollow Knight|OneShot|Terraria|Cave Story
Choose Randomly picks from a list of words {choose|text1|text2|text3...} I'm really good at {choose|Minecraft|Fortnite|Smash|Tetris}! I'm really good at Smash!
Multichoose Randomly picks multiple results from a list of words. Chosen words will never repeat, and the list will reshuffle if the # of words to choose is larger than the list of words {multichoose|# of results|splitter|text1|
text2|text3...}
Should I adopt a {multichoose|5| or a |cat|dog|hamster|bird|mouse|fox|
chicken|horse|snake}?
Should I adopt a cat or a horse or a mouse or a dog or a bird?
Empty Returns the first string which isn't empty. Useful for setting a default value if {args} is empty. {empty|text1|text2|text3...} {empty|{args}|{username}} has been slapped! Raymond has been slapped!
(only if you entered r!slap raymond - otherwise defaults to your username)
Unix Returns the current Unix Timestamp (milliseconds since 1970). Best used as a seed for RNG to generate the same number multiple times, while still being random. Using {unix|true} will divide the result by 1000 for the number of seconds since 1970. {unix|optional: divide?} {rng|1|10|{unix}} shall be the number thou shalt count, and the number of the counting shall be {rng|1|10|{unix}} 3 shall be the number thou shalt count, and the number of the counting shall be 3
Date Returns the current date and time, which can be formatted however you'd like. Refer to this table for details on how to format properly. Hour offset can be used for time zones (e.g. an offset of 3 = 3 hours ahead of UTC) {date|formatting|hour offset|optional: unix timestamp of date} The current date is {date|dddd, MMM D at h:mm A UTC} The current date is Tuesday, Feb 17 at 4:20 p.m. UTC

Math + Numbers

Name Description Usage Example Result
RNG Generates a random number.
You can also add a seed to generate the same number multiple times. {id} and {unix} make great seeds
{rng|min|max|optional:seed} {username}, your dunsparce is {rng|100|500}cm Colon, your dunsparce is 461cm
Add Adds numbers {add|number|number|...} 2 + 3 = {add|2|3} and 6 + 8 + 3 = {add|6|8|3} 2 + 3 = 5 and 6 + 8 + 3 = 17
Subtract Subtracts numbers {subtract|number|number|...} 10 - 3 = {subtract|10|3} and 20 - 5 - 3 = {subtract|20|5|3} 10 - 3 = 7 and 20 - 5 - 3 = 12
Multiply Multiplies numbers {multiply|number|number|...} 20 x 2 = {multiply|20|2} and 3 x 2 x 5 = {multiply|3|2|5} 20 x 2 = 40 and 3 x 2 x 5 = 30
Divide Divides numbers {divide|number|number|...} 100 / 4 = {divide|100|4} and 50 / 5 / 2 = {divide|50|5|2} 100 / 4 = 25 and 50 / 5 / 2 = 5
Power Powers numbers. Use an exponent of 0.5 for square root {power|number|number|...} 2 ^ 5 = {power|2|5} and 4 ^ 2 ^ 3 = {power|4|2|3} 2 ^ 5 = 32 and 4 ^ 2 ^ 3 = 4096
Modulo Gets the remainder of numbers {modulo|number|number|...} 3 % 2 = {modulo|3|2} and 100 % 30 % 4 = {modulo|100|30|4} 3 % 2 = 1 and 100 % 30 % 4 = 2
Round Rounds a decimal to the nearest whole number. It will be rounded down if less than .5, otherwise it will be rounded up. {round|decimal} 2.2 rounded is {round|2.2}, and 100 / 3 = about {round| {divide|100|3} } 2.2 rounded is 2, and 100 / 3 = about 33
Floor Rounds a decimal down to the nearest whole number {floor|decimal} 6.1 rounds down to {floor|6.1} and
6.9 also rounds down to {floor|6.9}!
6.1 rounds down to 6 and
6.9 also rounds down to 6!
Ceil Rounds a decimal up to the nearest whole number {ceil|decimal} 9.9 rounds up to {ceil|9.9} and
9.1 also rounds up to {ceil|9.1}!
9.9 rounds up to 10 and
9.1 also rounds up to 10!
Fixed Rounds a number to a fixed number of decimal places {fixed|number|places, max 32} 10 / 3 equals about {fixed|3.33333333|2}, and 10 / 6 = about {fixed| {divide|10|6} |5 } 10 / 3 equals about 3.33, and 10 / 6 = about 1.66667
Precise Rounds a number to a fixed number of significant figures {precise|number|places, max 32} In science class we don't say 42069, we say {precise|42069|2} In science class we don't say 42069, we say 4.2e+4
Highest Returns the largest number listed {highest|number|number|...} The highest of 2, 3, and 4 is {highest|2|3|4} The highest of 2, 3, and 4 is 4
Lowest Returns the smallest number listed {lowest|number|number|...} The lowest of 5, 6, and 7 is {lowest|5|6|7} The lowest of 5, 6, and 7 is 5
Absolute Returns the absolute value of a number (converts negative numbers to positive) {absolute|number} The bot has a ping of {absolute|-20000}! The bot has a ping of 20000
Clamp Limits a number between two values {clamp|number|min|max} I ate {clamp|500|5|10} cookies! (max of 10) I ate 10 cookies! (max of 10)
Commafy Adds commas to large numbers {commafy|number|optional: splitter} She's not 14, she's actually {commafy|10000000000} years old! She's not 14, she's actually 10,000,000,000 years old!
Nth Displays a number as an ordinal (1st, 2nd, etc) {nth|number|optional: exclude number?} This is my {nth|21} time seeing this meme This is my 21st time seeing this meme
Bit Performs a bitwise operation on two numbers by comparing their binary digits. Using just {bit|binary number} will convert a binary number to decimal {bit|number1|operation|
number2}
18 (10010) OR 25 (11001) makes **{bit|18|or|25}** (11011) 18 (10010) OR 25 (11001) makes 27 (11011)
BBit Same as {bit}, but takes and returns binary numbers instead of base 10. Using just {bbit|number} will convert a decimal number to binary {bbit|number1|operation|
number2}
XOR returns 1 if the two bits are different, so 11001100 XOR 01100110 would make **{bbit|11001100|xor|01100110}** XOR returns 1 if the two bits are different, so 11001100 XOR 01100110 would make 10101010
Base Converts a number to a different base system {base|number|new base|optional: reverse convert?} 420 in hexadecimal is {base|420|16}, and
420 *from* hexadecimal is {base|420|16|true}
420 in hexadecimal is 1A4, and
420 from hexadecimal is 1056

Embeds

Along with dynamic responses, you can also put fancy embeds in your messages!

Adding any of the below to your response will automatically convert the message into an embed.
The same one can be used multiple times and will run in order from beginning of the message to the end.
However, ones with variables inside of them (e.g. {embed|title|{username}} ) will take priority, because of how the system works.

Name Description Usage Example Result
Title Sets the title of the embed. Use {embed|title} to return the current title (256 character maximum) {embed|title|text} RoboTop is a pretty cool bot. {embed|title|Fact of the Day!}
Author Adds the author's tag and profile picture to the top of the embed {embed|author|optional: text|optional: image url} This embed shows your tag at the top! {embed|author}
Color Sets the color of the embed's sidebar. Use a hex code (e.g. #ff8000) or CSS color name (e.g. lightred) {embed|color|hex code or name} This embed is red. How fancy! {embed|color|#ff0000}
Time Adds the date the message was sent at to the bottom of the embed {embed|time} Sans! Please pick up your sock! {embed|time}
Footer Sets the footer of the embed. Use {embed|footer} to return the current footer {embed|footer|text|optional: image url} Who closes the door for the bus driver? {embed|footer|Deep thoughts with RoboTop}
Outer Sets the text to display outside of the embed. Use {embed|outer} to return the current message {embed|outer|text} average embed.description enjoyer {embed|outer|average message.content fan} average message.content fan
Hyperlink Adds a custom named link to the embed. Only works for regular text. This one is actually built into Discord but I'm including it anyways [text](url) {embed|footer|shameless plug}
Follow RoboTop on Twitter [here!](https://twitter.com/RoboTopBot)
Thumbnail Sets the embed's thumbnail to the URL provided. For custom commands, leaving the URL field blank will use the attachment provided in the (first) "post file" action. {embed|thumbnail|url} {embed|title|Dad} Are ya winning son? {embed|thumbnail|
https://i.imgur.com/xDBapc7.png}
Image Sets the embed's large image to the URL provided. For custom commands, leaving the URL field blank will use the attachment provided in the (first) "post file" action. {embed|image|url} {embed|title|KAREN YOU WENCH} RELEASE ME FROM THIS MESSAGEEMBED IMMEDIATELY {embed|image|
https://i.imgur.com/HRRJ1Qf.png}
Field Adds a field to the embed. Requires a title and content. Inline will put the field appear next to (instead of below) other fields. The text you put in the 'inline' part doesn't matter {embed|field|title|text
|optional: inline}
{embed|author}
{embed|title|{username}'s stats}
{embed|field|Health|200 hp}
{embed|field|Mana|300 pts|}
{embed|field|Strength|180 dmg|inline!}
{embed|field|Defense|50 pts|also inline!}




Have fun =)