Ryujinni
Elixir

Ryujinni

La versione Elixir del bot Clairemont di Discord, alimentata dalla Providence Network (Providentia).

GitHub|
immagine

Ryujin è il modulo di collegamento diplomatico per il bot Clairemont. Mentre altri moduli del sistema si occupano della sicurezza e dell’amministrazione, Ryujin si concentra sulla coltivazione delle relazioni con gli alleati, sul coordinamento delle iniziative congiunte e sul mantenimento della calma nei canali tra le gilde. È realizzato in Elixir con Nostrum e progettato per integrarsi con funzionalità basate su Rust per attività ad alte prestazioni.

◆ Caratteristiche

  • Automazione incentrata sulle alleanze: gli intenti sono preconfigurati per la gestione dei messaggi diretti e delle relazioni a livello di gilda.
  • Supporto audio: include il supporto per FFmpeg, Streamlink e yt-dlp per la trasmissione di audio.
  • Accelerato da Rust: include un crate native/ryujin per i NIF di Rustler, al fine di gestire attività che richiedono un'elevata potenza di calcolo.
  • Configurazione tramite script: gli script locali install.sh e run.sh gestiscono la toolchain e l’ambiente per configurazioni ripetibili.

◆ Prerequisiti

  • Elixir ≥ 1.18 (con una versione corrispondente di Erlang/OTP)
  • PostgreSQL (impostazione predefinita: postgres/postgres su localhost)
  • Python 3 (per Streamlink + yt-dlp in un virtualenv)
  • curl e tar (per il download di FFmpeg)
  • Toolchain Rust (se si modifica l’estensione nativa)

Assicurarsi che gli script di supporto siano eseguibili prima di iniziare:

chmod +x install.sh run.sh

Report del grafico del repository

◆ Configurazione

La configurazione viene caricata da envs/. Il runtime unisce envs/.env (impostazioni predefinite condivise) e un file specifico per l’ambiente come envs/dev.env.

Come minimo, devi definire il tuo token Discord in envs/.env:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

Gli script del runtime aggiungono automaticamente la directory locale vendor/bin e l’ambiente virtuale Python al PATH.

◆ Installazione

Il programma di installazione recupera le dipendenze di Mix e prepara localmente i binari multimediali necessari nella directory vendor/:

./install.sh

Questo script:

  1. Recupera e compila le dipendenze di Mix.
  2. Scarica una build statica di FFmpeg.
  3. Creerà un ambiente virtuale Python per Streamlink e yt-dlp.

◆ Esecuzione in fase di sviluppo

Avvia il bot per lo sviluppo utilizzando lo script di esecuzione:

./run.sh

Lo script verifica che tutti gli strumenti (ffmpeg, yt-dlp, ecc.) siano presenti, esegue le migrazioni del database e avvia l’applicazione Phoenix tramite iex -S mix.

◆ Integrazione di PostgreSQL AGE

Il progetto include una migrazione per abilitare l’estensione Apache AGE per le query sui grafi. Dopo aver installato AGE sul proprio server PostgreSQL, lo script run.sh o mix ecto.setup lo abiliterà nel database.

È quindi possibile eseguire query Cypher tramite Ecto.Repo.query/2:

Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")

◆ Estensione nativa in Rust

Il crate native/ryujin è integrato con Rustler. Il codice Elixir e Rust viene compilato insieme con mix compile. Aggiungi nuovi NIF in src/lib.rs ed esponili a Elixir tramite il modulo lib/ryujin.ex.

◆ Risoluzione dei problemi

  • "comando non trovato": Assicurati di aver eseguito chmod +x install.sh run.sh.
  • Binari obsoleti: Rimuovere la directory vendor/ ed eseguire nuovamente ./install.sh.
  • Il database non esiste: Assicurarsi che PostgreSQL sia in esecuzione ed eseguire nuovamente ./run.sh, che esegue mix ecto.create.
  • Connetti Observer: il bot viene eseguito come nodo con nome. Apri un nuovo terminale ed esegui:
iex --sname observer --cookie ryujin_cookie
:observer.start()