
Ryujin 是 Clairemont 机器人的外交联络模块。系统中的其他模块负责安全和管理工作,而 Ryujin 则专注于培养盟友关系、协调联合行动,并在公会间频道中维持秩序。 该模块基于 Elixir 并结合 Nostrum 构建,同时设计为可扩展至由 Rust 支持的功能以处理高性能任务。
◆ 功能
- 以联盟为中心的自动化:预配置了用于私信和公会级关系管理的意图。
- 支持语音功能:内置 FFmpeg、Streamlink 和 yt-dlp 支持,用于分发音频。
- Rust 加速:包含
native/ryujin库,通过 Rustler NIF 处理计算密集型任务。 - 脚本化配置:本地
install.sh和run.sh脚本管理工具链和环境,确保配置可重复。
◆ 先决条件
- Elixir ≥ 1.18(需搭配对应的 Erlang/OTP 版本)
- PostgreSQL(默认在
localhost上使用postgres/postgres) - Python 3(用于虚拟环境中运行 Streamlink + yt-dlp)
curl和tar(用于下载 FFmpeg)- Rust 工具链(若需修改原生扩展)
开始前请确保辅助脚本具有可执行权限:
chmod +x install.sh run.sh

◆ 配置
配置文件从 envs/ 目录加载。运行时会合并 envs/.env(共享默认值)和特定于环境的文件(如 envs/dev.env)。
至少,您必须在 envs/.env 中定义您的 Discord 令牌:
DISCORD_TOKEN=YOUR_DISCORD_TOKEN
运行时脚本会自动将本地 vendor/bin 目录和 Python 虚拟环境添加到您的 PATH 中。
◆ 安装
安装程序会获取 Mix 依赖项,并将所需的媒体二进制文件暂存到本地的 vendor/ 目录中:
./install.sh
该脚本将执行以下操作:
- 获取并编译 Mix 依赖项。
- 下载静态 FFmpeg 构建版本。
- 为 Streamlink 和 yt-dlp 创建 Python 虚拟环境。
◆ 开发环境运行
使用 run 脚本启动开发版机器人:
./run.sh
该脚本会验证所有工具(ffmpeg、yt-dlp 等)是否已安装,执行数据库迁移,并通过 iex -S mix 启动 Phoenix 应用程序。
◆ PostgreSQL AGE 集成
该项目包含一个用于启用 Apache AGE 扩展 以支持图查询的数据库迁移。在您的 PostgreSQL 服务器上安装 AGE 后,run.sh 脚本或 mix ecto.setup 命令将启用数据库中的 AGE 功能。
随后,您可以通过 Ecto.Repo.query/2 执行 Cypher 查询:
Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")
◆ Rust 原生扩展
native/ryujin 模块已与 Rustler 集成。通过 mix compile 即可将 Elixir 和 Rust 代码一起编译。 在 src/lib.rs 中添加新的 NIF,并通过 lib/ryujin.ex 模块将其暴露给 Elixir。
◆ 故障排除
- “命令未找到”:请确保已执行
chmod +x install.sh run.sh。 - 二进制文件过期:删除
vendor/目录并重新运行./install.sh。 - 数据库不存在:确保 PostgreSQL 正在运行,并重新运行
./run.sh(该脚本会执行mix ecto.create)。 - 连接 Observer:该机器人作为命名节点运行。请打开一个新的终端并执行:
iex --sname observer --cookie ryujin_cookie
:observer.start()
