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

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/ryujinper i NIF di Rustler, al fine di gestire attività che richiedono un'elevata potenza di calcolo. - Configurazione tramite script: gli script locali
install.sherun.shgestiscono la toolchain e l’ambiente per configurazioni ripetibili.
◆ Prerequisiti
- Elixir ≥ 1.18 (con una versione corrispondente di Erlang/OTP)
- PostgreSQL (impostazione predefinita:
postgres/postgressulocalhost) - Python 3 (per Streamlink + yt-dlp in un virtualenv)
curletar(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

◆ 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:
- Recupera e compila le dipendenze di Mix.
- Scarica una build statica di FFmpeg.
- 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 eseguemix 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()
