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!
| 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] |
| 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 |
| 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 |
| 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 |
| 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 |
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 =)