#discord-bot #dice-roll #dice #bot #discord #rpg #roll

应用 disle

一个带有别名管理的Discord掷骰机器人

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

MIT协议

85KB
2K SLoC

Crates.io Crates.io

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 caithReadme文件以获取完整语法

特定游戏支持

一些游戏有特殊的规则来解释骰子,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