This profile is made for use with to help people understand the commands, especially ones involved with adding your own content.
Dice Bot uses JSON format for many of its custom content commands like !savetable and !savepotion. This format is widely used in the web community and fairly simple to understand and read as a human. These commands use the format:
!savepotion {"suffix":"of being Custom","prefix":"Custom","explanation":"This potion sure is original","Nsfw":false, "Rarity":1}
Firstly, in order to understand data in any format you need to know what it's called. These are variable types used in JSON:
string: a series of letters or numbers, surrounded with quotation marks
"hello 1123" boolean (bool): a true or false
true integer (int): a number without a decimal place (positive or negative)
500 double: a number with a decimal place (positive or negative)
500.5
A JSON data object is a list of data variables. They are formatted as a bunch of quotation marks inside curly brackets, with commas and colons. The main idea is: The NAME of a field is the first quotation, the colon comes after it, and the data of the field comes after that. There's a comma between different fields.
"FieldName": "Data Value" (a string variable) "FieldName": true (a boolean variable) "FieldName": 1 (an integer variable)
These field names are highlighted in yellow. This is just for clarity: Do not add in colors in the actual command when used
{"suffix":"of being Custom","prefix":"Custom","explanation":"This potion sure is original","Nsfw":false, "Rarity":1}
The field names have to stay exactly the same for it to work. To make your own potion, you would replace the items that come after them (the data values). The order of the fields does not matter, as long as they stay paired with the correct type of data value after them.
Thus, in order to create a new potion you could change it as follows:
!savepotion {"suffix":"of Grammar","prefix":"Grammar","explanation":"This potion will imbue you with the power of grammatical knowledge.","Nsfw":false, "Rarity":0.5}
Example:
[12:04] : !savepotion {"suffix":"of Grammar","prefix":"Grammar","explanation":"This potion will imbue you with the power of grammatical knowledge.","Nsfw":false, "Rarity":0.5}
[12:04] : Success. Potion saved by . This can now be generated using !generatepotion of grammar
[12:04] : !generatepotion of grammar
[12:04] : I think the formula was right.
Muddy hazel vial of of Grammar ( ☆☆☆ strength )[eicon]potionvase1[/eicon]
This potion will imbue you with the power of grammatical knowledge. Caramel apple flavored. Rare [12:05] : !deletepotion of grammar
[12:05] : Grammar deleted by
Lists and sub-objects are possible in JSON, and they look like this:
A list of strings:
"Greetings":["hello","hi","how are you?"]
A list of lists of doubles:
"Multipliers":[[2,2.25],[4,2],[8,1.5]]
A list of objects:
"TableEntries":[{"Roll":1,"Range":0,"Name":"roll1","Description":"you rolled a 1"},{"Roll":2,"Range":0,"Name":"roll2","Description":"you rolled a 2"},{"Roll":3,"Range":0,"Name":"roll3","Description":"you rolled a 3"}]
Lists are mainly used for custom tables, to complete the table entries. They are quite powerful.
Example:
[12:49] : !savetable {"RollBonus":0,"DieSides":3,"Name":"Test Table Name3","Description":"Test table for viewing format.","TableEntries":[{"Roll":1,"Range":0,"Name":"roll1","Description":"you rolled a 1"},{"Roll":2,"Range":0,"Name":"roll2","Description":"you rolled a 2"},{"Roll":3,"Range":0,"Name":"roll3","Description":"you rolled a 3"}]}
[12:49] : Success. Table saved by . Roll on this table using !rolltable testtablename3
[12:49] : !rolltable testtablename3
[12:49] : Test Table Name3 Rolled 1 (1d3) (1) roll1: you rolled a 1
[12:49] : !deletetable testtablename3
[12:49] : testtablename3 deleted by
In order to edit your JSON to create custom data, it is often helpful to use a JSON formatter like this free [url=https://jsonformatter.org/]website[/url] so you can be sure it has a valid format and view the items more easily.
For all of these custom content items, in order to update your data you need to do the save command again with the entire entry. It's good to save your JSON data for these while making them so you can modify it later if you need to!
Armed with this knowledge, you should be able to understand the specific information in each of the custom content types provided below to save in .
Potions are generated from a pool of potions available in the channel. The default pool of potions contains over 110. You can turn off the default pool of potions with the channel setting 'UseDefaultPotions' set to false. If the default potions are off, it will cause the channel to only generate custom potions that have been created for this channel. Each character can save up to 40 potions, and saved potions are specific to the channel they are saved in.
[12:39] : !generatepotion
[12:40] : Don't tell anyone you got it here.
Open rainbow Skin Coloring oil ( ☆ strength )[eicon]potionpink2[/eicon]
Changes the color of your skin to orange. Eggnog flavored. Common
Generation Rules: 33% common potion pool only, random effect (possible with default potions enabled) >Roll randomly between the designated 'common potions', with an equal chance of each.
67% use entire potion pool (with default potions disabled, this is the only outcome) >Total up all of the rarity scores of potions in the pool, and then generate a random double 0 - total rarity. This number is used to pinpoint which potion (in order) is chosen.
Generate random adjective, potion noun, print format, flavor, eicon (even chance of each outcome, except potion noun which is weighted towards some common words)
Generate random strength (30% ★, 30% ★★, 20% ★★★, 13%★★★★, 7% ★★★★★)
If the channel has no viable potions to generate from the !generatepotion command with its search terms, the bot will generate a potion of Water
Fields: suffix: (string) the name of the potion, when generated at the end of the potion name (potion of growth)
prefix: (string) the name of the potion, when generated at the start of the potion name (growth potion)
explanation: (string) the text that appears to explain the potion's effect
Nsfw: (boolean) flag whether the potion is Nsfw in nature or not. This is used in the !generatepotion command as a filter, so people can generate exclusively Nsfw or Sfw ones
Rarity: (double) the relative rarity of this potion. The labels work as follows: Common 2, Uncommon 1, Rare 0.5, Ultra-Rare 0.2, Mythic 0.05
OverrideEicon: (string) the name of the eicon that will appear for this potion. If left out, the potion will use the ~35 random potion eicons when generated
HidePotionDetails: (boolean) hide all of the automatically generated potion details when printing (name variation, strength, rarity, flavor)
Save Format: !savepotion {"suffix":"of being Custom","prefix":"Custom","explanation":"This potion sure is original","Nsfw":false,"OverrideEicon":"cathi","Rarity":1}
Example:
[12:04] : !savepotion {"suffix":"of Grammar","prefix":"Grammar","explanation":"This potion will imbue you with the power of grammatical knowledge.","Nsfw":false,"OverrideEicon":"cathi", "Rarity":0.5}
[12:04] : Success. Potion saved by . This can now be generated using !generatepotion of grammar
[12:04] : !generatepotion of grammar
[12:04] : I think the formula was right.
Muddy hazel vial of of Grammar ( ☆☆☆ strength )[eicon]potionvase1[/eicon]
This potion will imbue you with the power of grammatical knowledge. Caramel apple flavored. Rare [12:05] : !deletepotion of grammar
[12:05] : Grammar deleted by
You can now add the field HidePotionDetails to make the potion appear without the random generations for name variation, flavor, rarity, and strength. It will use the prefix as the potion's printed name and show the given description and eicon only.
Example:
[18:16] : !savepotion {"suffix":"Custom","prefix":"of being Custom","explanation":"This potion sure is original","Nsfw":false,"CreatedBy":"Ambitious Syndra","OverrideEicon":"cathi","Rarity":1.0,"Flag":6,"HidePotionDetails":true}
[18:16] : Success. Potion saved by . This can now be generated using !generatepotion custom
[18:16] : !generatepotion custom
[18:16] : This one is a favorite.
Of being Custom[eicon]cathi[/eicon]
This potion sure is original
use !potionjson to view the json that created a particular potion, so you can get it to edit the save later.
Tables allow users to create their own list of responses that are rolled at random when the command is used. These responses can also be used to roll on other tables, draw cards, generate potions, or roll dice. Tables and the tableinfo command can be turned off for a channel with the settings AllowTables and AllowTableInfo. Each user can save up to 4 tables, and tables are not specific to the channel they are saved in.
Fields: RollBonus: (integer) the amount to the die roll every roll while rolling this table
DieSides: (integer) the number of sides the die rolled for this table will have
Name: (string) the name you'd like to use for this table. (It will be modified to a lowercase, no-space version for the table's id)
Description: (string) the table's description that appears under !tableinfo
OnlyShowResultDescription: (boolean) hide all of the rolling details and the entry's rolled name when it's rolled
TableEntries: (list of objects) the list of objects that represent the entries for this table (max 50)
>Roll: (string) the starting roll required for this table entry to appear
>Range: (string) the range of rolls (from 'Roll') in which this table entry will appear
>Name: (string) the name of this table entry, which appears when rolled
>Description: (string) the description for this table entry, which appears after the : when rolled.
>Triggers: (list of objects) the list of triggers for this table entry
>>Command: (string) the command you wish to trigger when this table entry is rolled (!rolltable, !roll, !generatepotion, or !drawcard)
Example:
[12:49] : !savetable {"RollBonus":0,"DieSides":3,"Name":"Test Table Name3","Description":"Test table for viewing format.","Nsfw":false,"TableEntries":[{"Roll":1,"Range":0,"Name":"roll1","Description":"you rolled a 1"},{"Roll":2,"Range":0,"Name":"roll2","Description":"you rolled a 2"},{"Roll":3,"Range":0,"Name":"roll3","Description":"you rolled a 3"}]}
[12:49] : Success. Table saved by . Roll on this table using !rolltable testtablename3
[12:49] : !rolltable testtablename3
[12:49] : Test Table Name3 Rolled 1 (1d3) (1) roll1: you rolled a 1
[12:49] : !deletetable testtablename3
[12:49] : testtablename3 deleted by
Using tables, you can execute commands when each table entry is rolled. This allows you to use !rolltable, !roll, !generatepotion, or !drawcard (and their various optional parameters) from inside a table result automatically. You can also chain table rolls this way, by making one table roll on another that calls a third table. The limit for roll depth is 3 tables.
Tables also allow people to put in different modifiers with !rolltable tablename x=1 y=2 z=3 . In order to make use of these, you put them into your table entry Description, and into the Triggers Command field with #x #y #z. when printing !tableinfo, it will show which variables it detects using.
Example:
[22:32] : !savetable {"RollBonus":0,"DieSides":3,"Name":"testinputxy","Nsfw":false,"Description":"Roll the table to test secondary functions with !roll, !generatepotion, !rolltable, x y z variable entry, and !drawcard","TableEntries":[{"Roll":1,"Range":0,"Name":"","Description":"Write #xd4 * 100 words about how awesome I am~","Triggers":[{"Command":"!rolltable cheeses +#y"},{"Command":"!roll #xd4 * 100"}]},{"Roll":2,"Range":0,"Name":"","Description":"Roll on the twister table and draw #x cards for some reason","Triggers":[{"Command":"!rolltable twister +#y"},{"Command":"!drawcard #x s"},{"Command":"!roll #xd4 * 100"}]},{"Roll":3,"Range":0,"Name":"","Description":"Roll on the cheeses table and generate a non flavor potion","Triggers":[{"Command":"!rolltable cheeses +#y"},{"Command":"!generatepotion noflavor"}]}]}
[22:32] : Success. Table saved by . Roll on this table using !rolltable testinputxy
[01:11] : !rolltable testinputxy
[01:11] : testinputxy Rolled 2 (1d3) (2) : Roll on the twister table and draw 0 cards for some reason (perform: !rolltable twister +0, !drawcard 0 s, !roll 0d4 * 100) Twister Spinner Rolled 7 (1d16) (7) Right Hand:Yellow : Card drawn: 1 card
Current Hand: 1 card note: you can use the 'reveal' parameter to reveal your draws in the channel. ERROR: number of sides and number of dice must be greater than 0, 100 Result: 0 * 100 = 0 [01:12] : !rolltable testinputxy x=3 y=3
[01:12] : testinputxy Rolled 2 (1d3) (2) : Roll on the twister table and draw 3 cards for some reason (perform: !rolltable twister +3, !drawcard 3 s, !roll 3d4 * 100) Twister Spinner Rolled 13 (1d16 +3) (13) Right Foot:Green : Cards drawn: 3 cards
Current Hand: 4 cards
Rolled 3d4 {3, 3, 3} = 9, 100 Result: 9 * 100 = 900
You can now use OnlyShowResultDescription to hide the rolling details and make the output appear much more custom, by only showing the Description of the roll result:
Example:
[18:24] : !savetable {"RollBonus":0,"DieSides":3,"Name":"Test Table Name1","Description":"Test table for viewing format.", "OnlyShowResultDescription":true,"Nsfw":false,"TableEntries":[{"Roll":1,"Range":0,"Name":"roll1","Description":"you rolled a 1"},{"Roll":2,"Range":0,"Name":"roll2","Description":"you rolled a 2"},{"Roll":3,"Range":0,"Name":"roll3","Description":"you rolled a 3"}]}
[18:24] : Success. Table saved by . Roll on this table using !rolltable testtablename1
[18:24] : !rolltable testtablename1
[18:24] : Test Table Name1 you rolled a 3
Use !tablejson to view the json that created a particular table, so you can get it to edit the save later.
You can view the list of tables saved with !mytables or !showtables (and '!showtables all' will show you everyone's saved tables).
You can view the list of a table's entries and information with !tableinfo TABLENAME
Note: Saved Tables are a very powerful feature, and could be abused. Please do not make me restrict them for everyone.
Decks allow users to save a list of cards that can be used with all of Dice Bot's card commands (see the 'Cards' section below). Each user can save up to 4 decks, and decks are not specific to the channel they are saved in.
Custom decks have a few different commands that can be used to save. They are all recorded in the same pool of custom decks when completed. SaveCustomDeckSimple just takes a list of card names separated with commas, and the normal SaveCustomDeck command is used to save more information about the cards.
The deck can include any number of cards from 1 - 200. If you want multiples of the same card, add it to the list multiple times. Like other text, cards can include fchat formatting like eicon or color.
Fields: DeckId: (string) The name of the deck, which will be changed to lowercase and spaces removed for the id to use
DeckList: (string) The list of cards in the deck, separated by commas. Optionally, you can include | to split the card into its name and its description (maximum 200 cards)
Save Format: !savecustomdeck {"DeckId":"Alphabet","DeckList":"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"}
!savecustomdeck {"DeckId":"AlphabetWithDescriptions","Nsfw":false,"DeckList":"a|theletterA,b|the letter b,c|the letter c,d|the letter d,e|the letter e,f|the letter f,g|the letter g,h|the letter h,demo card longer|a demo card name that is longer than 1 letter."}
Example:
[13:27] : !savecustomdeck {"DeckId":"Alphabet","DeckList":"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"}
[13:27] : Success. Deck saved by . Draw from this deck using !drawcard deck:alphabet
[13:27] : !drawcard deck:alphabet 5 reveal
[13:27] : : (alphabet) Cards drawn: z, m, j, x, b
Current Hand: (1) z, (2) m, (3) j, (4) x, (5) b
[13:27] : !deletecustomdeck alphabet
[13:27] : alphabet deleted by
Use !deckjson to view the json that created a particular deck, so you can get it to edit the save later.
//TODO : finish this section
Relevant Commands:
!addchips
!removechips
!givechips
!takechips
!bet
!claimpot
!work
!joingame ### (for games which allow a starting bet/ ante) !gc addbet (and other gc commands in betting games) !redeemchips
!buychips
!cancelbuychips
!cashout