#骰子 #机器人 #掷骰 #游戏 #矩阵

程序+库 暗影骰子机器人

适用于角色扮演游戏的异步矩阵骰子机器人

2 个版本

0.13.1 2021 年 9 月 6 日
0.13.0 2021 年 9 月 5 日

#854游戏

AGPL-3.0-or-later

225KB
6K SLoC

暗影骰子机器人

Build Status Matrix Chat

此仓库托管在 Agnos.is Git,并镜像到 GitHub

这是一个用于在 Matrix 消息平台上辅助角色扮演游戏的掷骰机器人。它目前支持《黑暗纪元 2E 故事讲述系统》和《克苏鲁的呼唤》,并计划进一步扩展代码库以支持其他系统和角色卡管理。

功能

tenebrous-dicebot 是一个用于在 Matrix 上(以及 Matrix 可以桥接的任何东西,如 Discord)进行角色扮演游戏的掷骰机器人。它目前具有以下功能

  • 掷任意骰子表达式(例如 1d4、1d20+5、1d8+1d6 等)。
  • 掷《黑暗纪元 2E 故事讲述系统》的骰子池。
  • 掷《克苏鲁的呼唤》系统的骰子。
  • 在加密或未加密的 Matrix 房间中工作。
  • 存储用户创建的变量。

支持和社区

该项目在 #tenebrous:agnos.is 有一个 Matrix 房间。您还可以在 GitHub 讨论区 发帖。

对于报告错误,我们建议您在 git.agnos.is 上打开一个问题。但是,您也可以在 GitHub 上打开一个问题。

开发和贡献

所有开发都在 git.agnos.is 上进行。如果您想贡献,请在那里打开一个拉取请求。在某些情况下,可以接受来自 GitHub 的拉取请求。所有贡献都必须在 AGPL 3.0 或更高版本 下授权才能被接受。

构建和安装

Docker 镜像

运行骰子机器人的最简单方法是使用 官方 Docker 镜像。它由 CI 管道在 GitHub 容器注册表中分发。

最新的标签总是指向最近成功构建的master提交,被认为是不可靠的,而单个标签被认为是稳定的。

  • 不稳定:docker pull ghcr.io/projectmoon/chronicle-dicebot:latest
  • 稳定:docker pull ghcr.io/projectmoon/chronicle-dicebot:X.Y.Z

此镜像基于 Void Linux。要自己构建镜像,请在存储库根目录下运行 docker build -t chronicle-dicebot .

在拉取或构建镜像后,请参阅 如何使用Docker镜像的说明

从crates.io安装

该项目可以从 crates.io 获取。要安装它,请执行 cargo install tenebrous-dicebot。这将使以下可执行文件在您的系统上可用

  • dicebot:主dicebot可执行文件。
  • dicebot-cmd:从命令行运行dicebot命令。
  • dicebot_migrate:独立的数据库迁移器(非必需)。
  • tonic_client:gRPC连接的测试客户端(非必需)。

从源代码构建

预编译的可执行文件尚未可用。克隆此存储库并运行 cargo install

构建项目需要

  • 基本的构建环境(在Ubuntu上为build-essential,在Void和Arch上为base-devel等)。
  • Rust 1.45.0或更高版本。
  • 已安装OpenSSL/LibreSSL开发头文件。
  • olm-sys存储库依赖项:cmake,libstdc++。
  • glibc。

为什么它不能在musl libc上构建?

据我所知,该项目不能在musl libc上构建。它肯定不会使用rust-musl-builder创建静态二进制文件。这看起来是由于Rust Matrix SDK的传递依赖项导致的。

任何将项目或Matrix SDK正确构建为使用musl的静态二进制的PR都将非常有用。

用法

要使用它,您可以将其邀请到任何您想要的房间,然后它会自动加入。然后您只需给出用于故事叙述系统或更传统的RPG骰子投掷的故事叙述表达式即可。

该机器人支持!help命令,提供有关其功能的基本帮助信息。

基本的骰子投掷

命令!roll!r可以处理任意的骰子投掷表达式。

!roll 4d6
!r 4d7 + 3
!r 3d12 - 5d2 + 3 - 7d3 + 20d20

此系统尚未具有处理类似D&D 5e优势或劣势等功能的能力。

故事叙述系统

命令!pool(或!rp)和!chance用于故事叙述系统,并使用特定的语法来支持骰子系统。命令的最简单版本是!pool <num>,用于使用最常用的投掷类型投掷给定大小的骰子池。

可以通过在数字前添加 ner 来控制卷的类型,分别对应重复、再次和重复质量卷。通过 s<num> 控制杰出成功的所需成功次数,例如 s3 只需 3 次成功即可获得杰出成功。所有修正都应该在数字之前,并用 : 冒号隔开。

示例

!pool 8      //regular pool of 8 dice
!pool n:8    //roll 8 dice, 9-again
!pool ns3:8  //roll 8 dice, 9-again with only 3 successes for exceptional
!pool rs2:5  //5 dice, rote quality, 2 successes for exceptional

克苏鲁的呼唤系统

命令 !cthRoll!cthroll!cthARoll!cthadv 用于克苏鲁的呼唤系统。 !cthRoll!cthroll 用于掷百分比骰子以对抗目标数字。可以在前面添加 b:bb: 来获得一个或两个奖励骰子。

!cthARoll!cthadv 用于技能提升。

示例

!cthRoll 50     //roll against a target of 50
!cthRoll bb:60  //roll against a target of 60 with 2 bonus dice
!cthARoll 30    //advancement roll against a target of 30

用户变量

用户可以存储变量以与故事叙述骰池系统一起使用。变量存储在数据库中,按房间和用户分别存储(目前位于使用 Docker 图像时的缓存目录)。

示例

!set myvar 5 //stores 5 for this room under the name "myvar"
!get myvar //will print 5

变量可以在骰池和克苏鲁的呼唤掷骰表达式中引用,例如 !pool myvar!pool myvar+3!cthroll myvar。克苏鲁的呼唤提升掷骰也接受变量,如果使用变量,并且掷骰成功,它将使用新技能更新变量。

运行机器人

运行机器人的最简单方法是使用 官方 Docker 镜像,尽管您也可以 直接运行二进制文件

使用官方 Docker 镜像的典型 docker run 命令可能如下所示

# Run unstable version of the bot
VERSION="latest"
docker run --rm -d --name dicebot \
-v /path/to/dicebot-config.toml:/config/dicebot-config.toml:ro \
-v /path/to/cache/:/cache \
ghcr.io/projectmoon/chronicle-dicebot:$VERSION

Docker 镜像需要两个卷挂载:配置文件的存储位置,应挂载在 /config/dicebot-config.toml,以及用于存储数据库和客户端状态(在初始同步后)的缓存目录。应该在容器中挂载在 /cache/

配置文件

配置文件是一个包含三个部分的 TOML 文件。

[matrix]
home_server = 'https://example.com'
username = 'thisismyusername'
password = 'thisismypassword'

[database]
path = '/path/to/database/directory/'

[bot]
oldest_message_age = 300

[matrix] 部分包含登录机器人矩阵账户的信息。

  • home_server:机器人应登录的 Matrix homeserver 的 URL。这应该是您在登录框中输入的 homeserver 的正确主机名,它可能与其他用户显示的服务器名称不同。
  • username:机器人账户用户名。
  • password:机器人账户密码。

[database] 部分包含连接到嵌入式数据库的信息。注意:如果您使用 Docker 镜像,则不需要此信息

  • path:在文件系统中用作数据库存储目录的路径。

[bot]部分包含控制机器人操作设置的选项。此部分是可选的,如果不存在该部分或设置,则将回退到默认值。

  • oldest_message_age:过去最久的时间(以秒为单位),在此时间之前的消息将被忽略。这可以防止机器人处理在离线期间收到的过时命令。默认值为900秒(15分钟)。

直接运行二进制文件

如果您已经从源代码构建了应用程序,您可以通过运行dicebot /path/to/config.toml直接调用骰子机器人,而不是使用Docker。默认情况下,用户帐户缓存存储在平台相关位置。例如,如果您想更改Linux上的缓存位置,可以在调用机器人之前运行以下命令:export XDG_CACHE_HOME=/path/to/cache

直接安装应用程序还会安装dicebot-cmd,这允许您在命令行上运行任意机器人命令。这不会连接到正在运行的机器人实例;它只是在本地处理命令。

未来计划

最基本计划包括

  • 资源计数:创建可以上升和下降的自定义计数器。
  • 也许某种类型的角色表集成。但为了做到这一点,我们需要一个表格服务。
  • 在Docker镜像中使用环境变量而不是配置文件。

致谢

这最初是axfive-matrix-dicebot的一个分支,增加了对《黑暗编年史》和《克苏鲁的呼唤》的支持。

依赖项

~70MB
~1M SLoC