Ryujinni
La versión en Elixir del bot Clairemont de Discord, impulsado por Providence Network (Providentia).

Ryujin es el módulo de enlace diplomático del bot Clairemont. Mientras que otros módulos del sistema se encargan de la seguridad y la administración, Ryujin se centra en fomentar las relaciones con los aliados, coordinar iniciativas conjuntas y mantener la calma en los canales entre clanes. Está desarrollado en Elixir con Nostrum y diseñado para integrarse con funciones basadas en Rust para tareas de alto rendimiento.
◆ Características
- Automatización centrada en las alianzas: Las intenciones están preconfiguradas para la gestión de mensajes directos y de las relaciones a nivel de gremio.
- Compatible con voz: incluye soporte para FFmpeg, Streamlink y yt-dlp para la transmisión de audio.
- Acelerado con Rust: Incluye un crate
native/ryujinpara que los NIF de Rustler gestionen tareas que requieren un gran esfuerzo computacional. - Configuración mediante scripts: Los scripts locales
install.shyrun.shgestionan la cadena de herramientas y el entorno para configuraciones repetibles.
◆ Requisitos previos
- Elixir ≥ 1.18 (con una versión compatible de Erlang/OTP)
- PostgreSQL (por defecto,
postgres/postgresenlocalhost) - Python 3 (para Streamlink + yt-dlp en un entorno virtual)
curlytar(para la descarga de FFmpeg)- Cadena de herramientas de Rust (si se modifica la extensión nativa)
Asegúrate de que los scripts auxiliares sean ejecutables antes de comenzar:
chmod +x install.sh run.sh

◆ Configuración
La configuración se carga desde envs/. El tiempo de ejecución fusiona envs/.env (valores predeterminados compartidos) y un archivo específico del entorno, como envs/dev.env.
Como mínimo, debes definir tu token de Discord en envs/.env:
DISCORD_TOKEN=TU_TOKEN_DE_DISCORD
Los scripts del entorno de ejecución añaden automáticamente el directorio local vendor/bin y el entorno virtual de Python a tu PATH.
◆ Instalación
El instalador descarga las dependencias de Mix y prepara los binarios multimedia necesarios localmente en el directorio vendor/:
./install.sh
Este script hará lo siguiente:
- Descargará y compilará las dependencias de Mix.
- Descargará una versión estática de FFmpeg.
- Creará un entorno virtual de Python para Streamlink y yt-dlp.
◆ Ejecución en desarrollo
Inicia el bot para el desarrollo utilizando el script de ejecución:
./run.sh
El script comprueba que todas las herramientas (ffmpeg, yt-dlp, etc.) estén presentes, ejecuta las migraciones de la base de datos e inicia la aplicación Phoenix mediante iex -S mix.
◆ Integración de PostgreSQL AGE
El proyecto incluye una migración para habilitar la extensión Apache AGE para consultas de grafos. Tras instalar AGE en tu servidor PostgreSQL, el script run.sh o mix ecto.setup lo habilitarán en la base de datos.
A continuación, puedes realizar consultas Cypher mediante Ecto.Repo.query/2:
Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")
◆ Extensión nativa de Rust
El crate native/ryujin está integrado con Rustler. El código de Elixir y Rust se compila conjuntamente con mix compile. Añade nuevas NIF en src/lib.rs y expónlas a Elixir a través del módulo lib/ryujin.ex.
◆ Solución de problemas
- «comando no encontrado»: Asegúrate de haber ejecutado
chmod +x install.sh run.sh. - Binarios obsoletos: Elimina el directorio
vendor/y vuelve a ejecutar./install.sh. - La base de datos no existe: Asegúrate de que PostgreSQL está en ejecución y vuelve a ejecutar
./run.sh, que ejecutamix ecto.create. - Conectar Observer: El bot se ejecuta como un nodo con nombre. Abre un nuevo terminal y ejecuta:
iex --sname observer --cookie ryujin_cookie
:observer.start()
