Ryujin 是 Clairemont 机器人的外交联络模块。虽然系统中的其他模块负责安全和管理,但 Ryujin 专注于培养盟友关系、协调联合行动以及维护跨公会频道的稳定。它基于 Elixir 和 Nostrum 构建,并设计为可扩展至 Rust 后端,以处理高性能任务。
◆ 功能特性
- 联盟自动化:预配置意图,用于直接消息和公会级关系管理。
- 语音支持:集成 FFmpeg、Streamlink 和 yt-dlp 支持,用于音频调度。
- Rust 加速:包含
native/ryujincrate,通过 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.sh
该脚本会验证所有工具(ffmpeg、yt-dlp 等)是否存在,运行数据库迁移,并通过 iex -S mix 启动 Phoenix 应用程序。
◆ PostgreSQL AGE 集成
该项目包含一个迁移脚本,用于启用 Apache AGE 扩展 以支持图查询。在 PostgreSQL 服务器上安装 AGE 后,run.sh 脚本或 mix ecto.setup 将在数据库中启用该扩展。
然后您可以通过 Ecto.Repo.query/2 执行 Cypher 查询:
Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")
◆ 原生 Rust 扩展
native/ryujin crate 已与 Rustler 集成。Elixir 和 Rust 代码通过 mix compile 一起编译。在 src/lib.rs 中添加新的 NIF,并通过 lib/ryujin.ex 模块将其暴露给 Elixir。
◆ 故障排除
- "command not found":请确保已运行
chmod +x install.sh run.sh。 - 二进制文件过时:删除
vendor/目录并重新运行./install.sh。 - 数据库不存在:确保 PostgreSQL 正在运行,然后重新运行
./run.sh,该脚本会执行mix ecto.create。 - 连接 Observer:机器人以命名节点方式运行。打开新终端并运行:
iex --sname observer --cookie ryujin_cookie
:observer.start()
