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

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- enrun.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/postgresoplocalhost) - Python 3 (voor Streamlink + yt-dlp in een virtualenv)
curlentar(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

◆ 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:
- De Mix-afhankelijkheden ophalen en compileren.
- Een statische FFmpeg-build downloaden.
- 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.shhebt uitgevoerd. - Verouderde binaire bestanden: Verwijder de map
vendor/en voer./install.shopnieuw uit. - Database bestaat niet: Zorg ervoor dat PostgreSQL draait en voer
./run.shopnieuw uit, waarmeemix ecto.createwordt 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()
