9个版本 (3个稳定版)
1.2.4 | 2021年4月30日 |
---|---|
1.2.3 | 2021年4月26日 |
1.0.1 | 2021年1月17日 |
0.10.0 | 2021年1月16日 |
0.7.1 | 2020年9月13日 |
在游戏类别中排名173
每月下载量34次
85KB
2K SLoC
Dìsle
一个Rust编写的Discord机器人,用于掷RPG骰子,具有别名管理和对批评的响应。
安装
您需要自己托管机器人。
- 在Discord上创建一个应用 https://discord.com/developers/applications
- 创建一个机器人
- 在您的机器人服务器上,设置一个名为
DISCORD_TOKEN
的环境变量,值为机器人的token。 - 下载机器人为您的服务器(发布部分提供了Linux和Windows的可执行文件)
- 运行机器人
- 打开控制台,转到机器人目录并运行
./disle
- 您应该会看到 "Bot正在运行,按Ctrl-C退出。Disle-Dev已连接!" 的提示
- 打开控制台,转到机器人目录并运行
- 将
CLIENTID
替换为您的应用程序Client ID的值(在“通用信息”中),在以下链接中使用:https://discordapp.com/oauth2/authorize?client_id=CLIENTID&permissions=268445760&scope=bot
。 - 将此修改后的URL粘贴到浏览器中,并允许机器人访问您的Discord服务器。
使用方法
帮助
输入 /help
获取所有可用帮助,或使用 /help <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
查看底层crate caith
的 Readme文件以获取完整语法
特定游戏支持
一些游戏有特殊的规则来解释骰子,Dìsle支持其中一些
- "OVA: The Anime Role-Playing Game" 结果(
/r ova(<number>)
,例如:/r ova(4)
) - 香港:《异闻录》(
/r cde(<骰子数量>, <元素>)
,例如:/r cde(5, fire)
)- 法语说明:由于游戏是法语,也可以用法语来写元素,结果将是法语!
卡片
现在可以使用一副卡片。在服务器频道
- 创建一副洗好的卡片牌:
/newdeck 或 /nd <小丑数量>
- 从牌堆中抽取卡片:
/draw 或 /d <卡片数量>
- 添加
s
以秘密抽取卡片:/d <卡片数量> s
- 揭露你的秘密抽取:
/reveal 或 /rev
- 丢弃你的秘密抽取:
/discard 或 /dis
- 再次洗牌:
/shuffle 或 /sh
- 查询牌堆中剩余多少张卡片:
/remain
别名
别名可以按频道和用户设置。基本上,它们存储一些表达式,可以用作代替骰子命令。想象一下别名 FS
已经被设置为 1d6! - 1d6!
。然后你可以这样做
/r $FS
> Geob roll: [6][4] - [5] Result: 5
全局别名
全局别名对所有频道用户都可用。
你可以设置一个全局别名
/alias setg fs 1d6ie6 - 1d6ie6
> Alias `$FS` set
/r $FS
> Geob roll: [4] - [5] Result: -1
你可以删除一个全局别名
/alias delg fs
全局别名在使用时转为大写,以便与用户的别名区分。
只有特别允许的用户可以管理全局别名。创建了一个专门的角色“Dìsle Alias”,该角色的任何成员都可以编辑全局别名。
用户的别名
每个用户都可以设置仅对自己可用的别名
/alias set att d20
/r $att
> Geob roll: [11] Result: 11
用户的别名转为小写以避免与全局别名冲突。
别名参数
从1.2.0版本开始,别名接受参数。它是一个非常简单的宏机制,因此很容易损坏。
在创建别名时,使用 %<整数>
来引用参数,例如
/alias set knight %1d6 t[2,4,6]
Alias $knight set for user Geob
传递参数
/r $4|knight
Alias expansion: 4d6 t[2,4,6]
[5, 5, 2, 1] = 1
参数由逗号分隔,参数列表以竖线字符(|
)结尾。具有多个参数的示例
/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
别名展开
设置别名时,可以使用别名。全局别名只能使用其他全局别名,用户可以引用自己的别名或全局别名。
/alias setg ATT d20
/alias set att $ATT + 4
/r $att
> Geob roll: [12] + 4 Result: 16
别名展开在调用时发生。因此,你可以做一些类似的事情
/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
重新定义 att_bonus
对 $att
有影响。
全局别名可以引用用户别名
/alias setg DAG d20 + $dagger
但是在调用别名时,如果用户没有定义 $dagger
或如果发生循环,你会得到一个错误。
当然,如果你删除了其他别名中引用的别名,你会在使用时遇到别名未找到的错误。
对批评的反应
在滚动表达式中,如果骰子达到最小值或最大值,就会在响应中添加一个反应来突出显示。
如果表达式中不包含任何骰子,则会添加另一个反应,例如:/r 20 + 4
(因为有时候我们在输入/r d20
时会忘记d
:p)。
依赖项
~6-20MB
~222K SLoC