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 gestiscono sicurezza e amministrazione, Ryujin si concentra sulla coltivazione di relazioni alleate, il coordinamento di iniziative congiunte e il mantenimento della calma nei canali inter-gilda. È costruito su Elixir con Nostrum e progettato per estendersi a funzionalità basate su Rust per attività ad alte prestazioni.
◆ Funzionalità
- Automazione incentrata sulle alleanze: Le intenzioni sono preconfigurate per la gestione delle relazioni a livello di messaggi diretti e gilde.
- Capacità vocali: Supporto integrato per FFmpeg, Streamlink e yt-dlp per la riproduzione audio.
- Accelerato con Rust: Include un crate
native/ryujinper NIF Rustler per gestire attività computazionalmente intensive. - Configurazione tramite script: Script locali
install.sherun.shper gestire la toolchain e l'ambiente per configurazioni ripetibili.
◆ Prerequisiti
- Elixir ≥ 1.18 (con una release Erlang/OTP corrispondente)
- PostgreSQL (predefinito su
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)
Assicurati che gli script helper 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 ambiente come envs/dev.env.
Come minimo, devi definire il tuo token Discord in envs/.env:
DISCORD_TOKEN=YOUR_DISCORD_TOKEN
Gli script runtime aggiungono automaticamente la directory locale vendor/bin e il virtualenv Python al tuo PATH.
◆ Installazione
Il programma di installazione recupera le dipendenze Mix e prepara i binari multimediali richiesti localmente nella directory vendor/:
./install.sh
Questo script:
- Recupera e compila le dipendenze Mix.
- Scarica una build statica di FFmpeg.
- Crea un virtualenv Python per Streamlink e yt-dlp.
◆ Esecuzione in Sviluppo
Avvia il bot per lo sviluppo usando lo script run:
./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 con PostgreSQL AGE
Il progetto include una migrazione per abilitare l'estensione Apache AGE per query su grafi. Dopo aver installato AGE sul tuo server PostgreSQL, lo script run.sh o mix ecto.setup lo abiliterà nel database.
Puoi quindi 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 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: Rimuovi la directory
vendor/e riesegui./install.sh. - Il database non esiste: Assicurati che PostgreSQL sia in esecuzione e riesegui
./run.sh, che eseguemix ecto.create. - Connetti Observer: Il bot viene eseguito come nodo nominato. Apri un nuovo terminale ed esegui:
iex --sname observer --cookie ryujin_cookie
:observer.start()
