#grpc #build #dice-roll #models #protobuf #docker-image #tenebrous

tenebrous-rpc

Tenebrous的gRPC protobuf模型

1 个不稳定发布

0.1.0 2021年9月5日

#23 in #dice-roll


用于 tenebrous-dicebot

AGPL-3.0-or-later

2KB

Tenebrous骰子机器人

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 Discussions 上发表帖子。

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

开发和贡献

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

构建和安装

Docker镜像

运行骰子机器人最简单的方法是使用 官方Docker镜像。它通过CI管道在GitHub Container Registry上分发。

latest 标签始终指向最新成功构建的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-cmd:从命令行运行dicebot命令。
  • dicebot_migrate:独立的数据库迁移器(不是必需的)。
  • tonic_client:gRPC连接的测试客户端(不是必需的)。

从源代码构建

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

构建项目需要

  • 基本构建环境(Ubuntu上的build-essential,Void和Arch上的base-devel等)。
  • Rust 1.45.0或更高版本。
  • 已安装OpenSSL/LibreSSL开发头文件。
  • olm-sys crate依赖项: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优势或劣势这样的东西。

!roll 2d20k1
!r 2d20dh1 + 5
!r 10d10k5 + 10d10dh5 - 2

故事叙述系统

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

可以通过在数字前添加 ner 来控制卷的类型,分别为重复9次、重复8次和记忆品质卷。可以通过 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镜像的典型运行命令可能看起来像这样

# 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。这应该是您在登录框中输入的正确主机名,这可能与显示给其他用户的服务器名称不同。
  • 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的分支,增加了对《黑暗Chronicles》和《克苏鲁的呼唤》的支持。

依赖关系

~5.5–7.5MB
~130K SLoC