Ryujinni
La version Elixir du bot Clairemont de Discord, optimisée par le réseau Providence (Providentia).

Ryujin est le module de liaison diplomatique du bot Clairemont. Alors que d’autres modules du système gèrent la sécurité et l’administration, Ryujin se concentre sur le développement des relations avec les alliés, la coordination des initiatives communes et le maintien du calme dans les canaux inter-guildes. Il est développé en Elixir avec Nostrum et conçu pour s'étendre à des fonctionnalités basées sur Rust afin d'assurer des tâches hautement performantes.
◆ Fonctionnalités
- Automatisation axée sur les alliances : les intentions sont préconfigurées pour la gestion des messages directs et des relations au niveau des guildes.
- Prise en charge de l’audio : intègre la prise en charge de FFmpeg, Streamlink et yt-dlp pour la diffusion audio.
- Accélération par Rust : inclut une crate
native/ryujinpour les NIF Rustler afin de gérer les tâches gourmandes en ressources de calcul. - Configuration par scripts : 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 compatible)
- PostgreSQL (par défaut
postgres/postgressurlocalhost) - Python 3 (pour Streamlink + yt-dlp dans un virtualenv)
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 à partir du répertoire envs/. Le runtime fusionne le fichier envs/.env (paramètres par défaut partagés) et un fichier spécifique à l’environnement, tel que envs/dev.env.
Au minimum, vous devez définir votre jeton Discord dans envs/.env :
DISCORD_TOKEN=VOTRE_JETON_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 place localement les binaires multimédia requis 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éera un environnement virtuel Python pour Streamlink et yt-dlp.
◆ Exécution en mode développement
Lancez le bot en mode développement à l’aide du 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 de PostgreSQL AGE
Le projet inclut une migration permettant d’activer l’extension Apache AGE pour les requêtes sur les graphes. Après avoir installé AGE sur votre serveur PostgreSQL, le script run.sh ou la commande mix ecto.setup l’activeront dans la base de données.
Vous pouvez ensuite lancer 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 à Rustler. Le code Elixir et Rust est compilé ensemble avec mix compile. Ajoutez de nouvelles NIF dans src/lib.rs et exposez-les à Elixir via le module lib/ryujin.ex.
◆ Dépannage
- « commande introuvable » : assurez-vous d’avoir exécuté
chmod +x install.sh run.sh. - Binaires obsolètes : supprimez le répertoire
vendor/et relancez./install.sh. - La base de données n’existe pas : assurez-vous que PostgreSQL est en cours d’exécution et relancez
./run.sh, qui exécutemix ecto.create. - Connect 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()
