Ryujinni
Elixir

Ryujinni

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

GitHub|
image

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/ryujin pour les NIF Rustler afin de gérer les tâches gourmandes en ressources de calcul.
  • Configuration par scripts : les scripts locaux install.sh et run.sh gè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/postgres sur localhost)
  • Python 3 (pour Streamlink + yt-dlp dans un virtualenv)
  • curl et tar (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

Rapport sur le graphique du référentiel

◆ 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 :

  1. Récupérer et compiler les dépendances Mix.
  2. Télécharger une version statique de FFmpeg.
  3. 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écute mix 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()