Ryujinni
Elixir

Ryujinni

来自Discord的Clairemont机器人的Elixir版本,由Providence Network(Providentia)提供支持。

GitHub|
image

Ryujin 是 Clairemont 机器人的外交联络模块。系统中的其他模块负责安全和管理工作,而 Ryujin 则专注于培养盟友关系、协调联合行动,并在公会间频道中维持秩序。 该模块基于 Elixir 并结合 Nostrum 构建,同时设计为可扩展至由 Rust 支持的功能以处理高性能任务。

◆ 功能

  • 以联盟为中心的自动化:预配置了用于私信和公会级关系管理的意图。
  • 支持语音功能:内置 FFmpeg、Streamlink 和 yt-dlp 支持,用于分发音频。
  • Rust 加速:包含 native/ryujin 库,通过 Rustler NIF 处理计算密集型任务。
  • 脚本化配置:本地 install.shrun.sh 脚本管理工具链和环境,确保配置可重复。

◆ 先决条件

  • Elixir ≥ 1.18(需搭配对应的 Erlang/OTP 版本)
  • PostgreSQL(默认在 localhost 上使用 postgres/postgres
  • Python 3(用于虚拟环境中运行 Streamlink + yt-dlp)
  • curltar(用于下载 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

该脚本将执行以下操作:

  1. 获取并编译 Mix 依赖项。
  2. 下载静态 FFmpeg 构建版本。
  3. 为 Streamlink 和 yt-dlp 创建 Python 虚拟环境。

◆ 开发环境运行

使用 run 脚本启动开发版机器人:

./run.sh

该脚本会验证所有工具(ffmpegyt-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()