Ryujinni
Elixir

Ryujinni

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

image

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/ryujin pour les NIF Rustler afin de gérer les tâches gourmandes en calcul.
  • Configuration scriptée : 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 correspondante)
  • PostgreSQL (par défaut postgres/postgres sur localhost)
  • Python 3 (pour Streamlink + yt-dlp dans un environnement virtuel)
  • 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 du graphique du dépôt

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

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