Ryujinni
Elixir

Ryujinni

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

image

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/ryujin per NIF Rustler per gestire attività computazionalmente intensive.
  • Configurazione tramite script: Script locali install.sh e run.sh per gestire la toolchain e l'ambiente per configurazioni ripetibili.

◆ Prerequisiti

  • Elixir ≥ 1.18 (con una release Erlang/OTP corrispondente)
  • PostgreSQL (predefinito su 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)

Assicurati che gli script helper siano eseguibili prima di iniziare:

chmod +x install.sh run.sh

Repository Chart Report

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

  1. Recupera e compila le dipendenze Mix.
  2. Scarica una build statica di FFmpeg.
  3. 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 esegue mix 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()