Ryujinni
Elixir

Ryujinni

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

image

Ryujin 是 Clairemont 机器人的外交联络模块。虽然系统中的其他模块负责安全和管理,但 Ryujin 专注于培养盟友关系、协调联合行动以及维护跨公会频道的稳定。它基于 Elixir 和 Nostrum 构建,并设计为可扩展至 Rust 后端,以处理高性能任务。

◆ 功能特性

  • 联盟自动化:预配置意图,用于直接消息和公会级关系管理。
  • 语音支持:集成 FFmpeg、Streamlink 和 yt-dlp 支持,用于音频调度。
  • Rust 加速:包含 native/ryujin crate,通过 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.sh

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