Ryujinni
La version Elixir du bot Clairemont de Discord, optimisée par le réseau Providence (Providentia).
Ryujin est le module de liaison diplomatique pour le bot Clairemont. Alors que les autres modules du système gèrent la sécurité et l'administration, Ryujin se concentre sur le développement de relations alliées, la coordination d'initiatives conjointes et le maintien du calme dans les canaux inter-guilde. Il est construit sur Elixir avec Nostrum et conçu pour s'étendre vers des fonctionnalités basées sur Rust pour les tâches à haute performance.
◆ Fonctionnalités
- Automatisation axée sur les alliances : Les intentions sont préconfigurées pour la gestion des relations au niveau des messages directs et des guildes.
- Capacité vocale : Inclut le support FFmpeg, Streamlink et yt-dlp pour la diffusion audio.
- Accéléré par Rust : Inclut une crate
native/ryujinpour les NIF Rustler afin de gérer les tâches gourmandes en calcul. - Configuration scriptée : Les scripts locaux
install.shetrun.shgèrent la chaîne d'outils et l'environnement pour des configurations reproductibles.
◆ Prérequis
- Elixir ≥ 1.18 (avec une version Erlang/OTP correspondante)
- PostgreSQL (par défaut
postgres/postgressurlocalhost) - Python 3 (pour Streamlink + yt-dlp dans un environnement virtuel)
curlettar(pour le téléchargement de FFmpeg)- Chaîne d'outils Rust (si vous modifiez l'extension native)
Assurez-vous que les scripts d'aide sont exécutables avant de commencer :
chmod +x install.sh run.sh

◆ Configuration
La configuration est chargée depuis envs/. L'exécution fusionne envs/.env (valeurs par défaut partagées) et un fichier spécifique à l'environnement comme envs/dev.env.
Au minimum, vous devez définir votre token Discord dans envs/.env :
DISCORD_TOKEN=VOTRE_TOKEN_DISCORD
Les scripts d'exécution ajoutent automatiquement le répertoire local vendor/bin et l'environnement virtuel Python à votre PATH.
◆ Installation
Le programme d'installation récupère les dépendances Mix et prépare les binaires média requis localement dans le répertoire vendor/ :
./install.sh
Ce script va :
- Récupérer et compiler les dépendances Mix.
- Télécharger une version statique de FFmpeg.
- Créer un environnement virtuel Python pour Streamlink et yt-dlp.
◆ Exécution en développement
Lancez le bot pour le développement en utilisant le script d'exécution :
./run.sh
Le script vérifie que tous les outils (ffmpeg, yt-dlp, etc.) sont présents, exécute les migrations de base de données et démarre l'application Phoenix via iex -S mix.
◆ Intégration PostgreSQL AGE
Le projet inclut une migration pour activer l'extension Apache AGE pour les requêtes de graphes. Après avoir installé AGE sur votre serveur PostgreSQL, le script run.sh ou mix ecto.setup l'activera dans la base de données.
Vous pouvez ensuite exécuter des requêtes Cypher via Ecto.Repo.query/2 :
Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")
◆ Extension native Rust
La crate native/ryujin est intégrée avec Rustler. Le code Elixir et Rust est compilé ensemble avec mix compile. Ajoutez de nouveaux NIF dans src/lib.rs et exposez-les à Elixir via le module lib/ryujin.ex.
◆ Dépannage
- "command not found" : Assurez-vous d'avoir exécuté
chmod +x install.sh run.sh. - Binaires obsolètes : Supprimez le répertoire
vendor/et réexécutez./install.sh. - La base de données n'existe pas : Assurez-vous que PostgreSQL est en cours d'exécution et réexécutez
./run.sh, qui exécutemix ecto.create. - Connecter Observer : Le bot s'exécute en tant que nœud nommé. Ouvrez un nouveau terminal et exécutez :
iex --sname observer --cookie ryujin_cookie
:observer.start()
