Ryujinni
Elixir

Ryujinni

De Elixir-versie van de Clairemont-bot van Discord, aangedreven door het Providence Network (Providentia).

GitHub|
afbeelding

Ryujin is de diplomatieke verbindingsmodule voor de Clairemont-bot. Terwijl andere modules in het systeem zich bezighouden met beveiliging en beheer, richt Ryujin zich op het onderhouden van bondgenootschappelijke relaties, het coördineren van gezamenlijke initiatieven en het bewaren van de rust in de kanalen tussen gilden. De module is gebouwd in Elixir met Nostrum en ontworpen om uit te breiden naar op Rust gebaseerde functies voor taken die hoge prestaties vereisen.

◆ Functies

  • Op allianties gerichte automatisering: Er zijn vooraf geconfigureerde intenties voor het beheer van directe berichten en relaties op gildniveau.
  • Ondersteuning voor spraak: Inclusief ondersteuning voor FFmpeg, Streamlink en yt-dlp voor het verzenden van audio.
  • Versneld met Rust: Bevat een native/ryujin-crate voor Rustler NIF’s om rekenintensieve taken af te handelen.
  • Scriptgestuurde installatie: Lokale install.sh- en run.sh-scripts beheren de toolchain en omgeving voor herhaalbare installaties.

◆ Vereisten

  • Elixir ≥ 1.18 (met een bijpassende Erlang/OTP-release)
  • PostgreSQL (standaard ingesteld op postgres/postgres op localhost)
  • Python 3 (voor Streamlink + yt-dlp in een virtualenv)
  • curl en tar (voor het downloaden van FFmpeg)
  • Rust-toolchain (indien de native extensie wordt aangepast)

Zorg ervoor dat de hulpscripts uitvoerbaar zijn voordat je begint:

chmod +x install.sh run.sh

Repository Chart Report

◆ Configuratie

De configuratie wordt geladen vanuit envs/. De runtime voegt envs/.env (gedeelde standaardinstellingen) samen met een omgevingsspecifiek bestand zoals envs/dev.env.

Je moet minimaal je Discord-token definiëren in envs/.env:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

De runtime-scripts voegen automatisch de lokale map vendor/bin en de Python virtualenv toe aan je PATH.

◆ Installatie

Het installatieprogramma haalt de Mix-afhankelijkheden op en plaatst de benodigde mediabinaire bestanden lokaal in de map vendor/:

./install.sh

Dit script zal:

  1. De Mix-afhankelijkheden ophalen en compileren.
  2. Een statische FFmpeg-build downloaden.
  3. Een Python-virtualenv aanmaken voor Streamlink en yt-dlp.

◆ Uitvoeren tijdens ontwikkeling

Start de bot voor ontwikkeling met behulp van het run-script:

./run.sh

Het script controleert of alle tools (ffmpeg, yt-dlp, enz.) aanwezig zijn, voert databasemigraties uit en start de Phoenix-applicatie via iex -S mix.

◆ PostgreSQL AGE-integratie

Het project bevat een migratie om de Apache AGE-extensie voor grafiekquery’s in te schakelen. Nadat je AGE op je PostgreSQL-server hebt geïnstalleerd, zal het run.sh-script of mix ecto.setup deze in de database inschakelen.

Vervolgens kun je Cypher-query’s uitvoeren via Ecto.Repo.query/2:

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

◆ Native Rust-uitbreiding

De native/ryujin-crate is geïntegreerd met Rustler. Elixir- en Rust-code worden samen gecompileerd met mix compile. Voeg nieuwe NIF’s toe in src/lib.rs en maak ze beschikbaar voor Elixir via de module lib/ryujin.ex.

◆ Probleemoplossing

  • "command not found": Zorg ervoor dat je chmod +x install.sh run.sh hebt uitgevoerd.
  • Verouderde binaire bestanden: Verwijder de map vendor/ en voer ./install.sh opnieuw uit.
  • Database bestaat niet: Zorg ervoor dat PostgreSQL draait en voer ./run.sh opnieuw uit, waarmee mix ecto.create wordt uitgevoerd.
  • Observer verbinden: De bot draait als een benoemde node. Open een nieuwe terminal en voer het volgende uit:
iex --sname observer --cookie ryujin_cookie
:observer.start()