Crates.io | disle |
lib.rs | disle |
version | 1.2.4 |
source | src |
created_at | 2020-09-11 21:54:24.158938 |
updated_at | 2021-04-30 16:18:54.803707 |
description | A Discord dice roller bot with alias management |
homepage | |
repository | https://github.com/Geobert/disle |
max_upload_size | |
id | 287532 |
size | 129,139 |
A Discord bot that rolls RPG dices, with aliases management and reaction to critics, written in Rust.
You need to host the bot yourself.
DISCORD_TOKEN
with the bot's
token../disle
CLIENTID
with the value of your application Client ID (in "General Information) in:
https://discordapp.com/oauth2/authorize?client_id=CLIENTID&permissions=268445760&scope=bot
.Type /help
to get all the available help and /help <command>
to get help on the command.
/roll xdy [OPTIONS][TARGET][FAILURE][REASON]
(or "/r" for short)
rolls x dices of y sides
Options:
+ - / * : modifiers
e# : Explode value
ie# or !# : Indefinite explode value
K# : Keeping # highest (upperacse "K")
k# : Keeping # lowest (lowercase "k")
D# : Dropping the highest (uppercase "D")
d# : Dropping the lowest (lowercase "d")
r# : Reroll if <= value
ir# : Indefinite reroll if <= value
Target:
t# : Minimum value to be a success
tt# : Minimum value to be double success
t[x, y, z, …]: Value to consider as success
Failure:
f# : Value under which it is count as failure
Reason:
: : Any text after `:` will be a comment
See the underlying crate caith
's Readme for the full syntax
Some games have special rules to interpret the dices and Dìsle supports some:
/r ova(<number>)
, ex: /r ova(4)
)/r cde(<number of dice>, <element>)
,
ex: /r cde(5, fire)
)
You can now use a deck of cards. In a server channel:
/newdeck or /nd <nb_of_joker>
/draw or /d <nb_of_cards>
s
to draw cards secretly: /d <nb_of_cards> s
/reveal or /rev
/discard or /dis
/shuffle or /sh
/remain
Aliases can be set per channel and per user. Basically, they store some expression and can
be called instead of a dice command. Imagine the alias FS
has been setup to be 1d6! - 1d6!
. You can then do:
/r $FS
> Geob roll: [6][4] - [5] Result: 5
Global aliases are accessible to all the user in the channel.
You can set a global alias:
/alias setg fs 1d6ie6 - 1d6ie6
> Alias `$FS` set
/r $FS
> Geob roll: [4] - [5] Result: -1
You can delete a global alias:
/alias delg fs
Global aliases are turned uppercase in order to distinguish them from user's aliases when using them.
Only specifically allowed users can manage global aliases. A dedicated role "Dìsle Alias" is created and any user member of this role can edit global aliases.
Each user can set their own alias only accessible by them:
/alias set att d20
/r $att
> Geob roll: [11] Result: 11
Users aliases are turn to lowercase to avoid conflict with global ones.
Since 1.2.0, aliases accept parameters. It is a very crude macro like mechanism so it can break easily.
When creating the alias, uses %<integer>
to refer to a parameter, ex:
/alias set knight %1d6 t[2,4,6]
Alias $knight set for user Geob
And to pass parameter:
/r $4|knight
Alias expansion: 4d6 t[2,4,6]
[5, 5, 2, 1] = 1
Parameters are comma separated and the parameters list ends with the pipe character (|
).
Example with multiple parameters:
/alias set two_param %1d6 + %2 : refers to 2 different parameters
/alias set same_param %1d6 + %1 : refers to the same parameters
/r $1,2|two_param
Alias expansion: 1d6 + 2
[5] + 2 = 7
/r $2|same_param
Alias expansion: 2d6 + 2
[2, 5] + 2 = 9
When setting an alias, you can use aliases. Global aliases can only use other global aliases and users can refer to either their own aliases or global ones:
/alias setg ATT d20
/alias set att $ATT + 4
/r $att
> Geob roll: [12] + 4 Result: 16
Alias expansion occurs on use. So you can do things like that:
/alias setg ATT d20
/alias set att_bonus +4
/alias set att $ATT $att_bonus
/r $att
> Geob roll: [11] +4 Result: 15
/alias set att_bonus +5
/r $att
> Geob roll: [11] +5 Result: 16
Redefining att_bonus
has an impact on $att
.
Global alias can reference a user alias:
/alias setg DAG d20 + $dagger
but on calling the alias, if the user don't have $dagger
defined or if a cycle occurs,
you'll get an error.
Of course, if you go messy and delete aliases referenced in others, you'll end with alias not found errors on use.
In a roll expression, if a dice reach its minimum value or maximum value, a reaction is added to the response to highlight it.
Another reaction is added if the expression does not contain any die, ex: /r 20 + 4
(because sometime, we miss the d
when typing /r d20
:p).