Ryujinni
Die Elixir-Version des Clairemont-Bots von Discord, betrieben vom Providence Network (Providentia).
Ryujin ist das diplomatische Verbindungsmodul für den Clairemont-Bot. Während andere Module im System für Sicherheit und Verwaltung zuständig sind, konzentriert sich Ryujin auf den Aufbau verbündeter Beziehungen, die Koordination gemeinsamer Initiativen und die Wahrung der Ruhe in kanalübergreifenden Bereichen. Es basiert auf Elixir mit Nostrum und ist darauf ausgelegt, für leistungsintensive Aufgaben um Rust-gestützte Funktionen erweitert zu werden.
◆ Funktionen
- Allianzorientierte Automatisierung: Absichten sind für Direktnachrichten- und Gildenebenen-Beziehungsmanagement vorkonfiguriert.
- Sprachfähig: Enthält FFmpeg-, Streamlink- und yt-dlp-Unterstützung für die Audioausgabe.
- Rust-beschleunigt: Enthält eine
native/ryujin-Crate für Rustler-NIFs zur Bewältigung rechenintensiver Aufgaben. - Skriptgestützte Einrichtung: Lokale
install.sh- undrun.sh-Skripte verwalten die Toolchain und Umgebung für wiederholbare Einrichtungen.
◆ Voraussetzungen
- Elixir ≥ 1.18 (mit einer passenden Erlang/OTP-Version)
- PostgreSQL (Standard:
postgres/postgresauflocalhost) - Python 3 (für Streamlink + yt-dlp in einer virtualenv)
curlundtar(für den FFmpeg-Download)- Rust-Toolchain (falls die native Erweiterung geändert wird)
Stellen Sie sicher, dass die Hilfsskripte vor dem Start ausführbar sind:
chmod +x install.sh run.sh

◆ Konfiguration
Die Konfiguration wird aus envs/ geladen. Die Laufzeitumgebung führt envs/.env (gemeinsame Standardwerte) und eine umgebungsspezifische Datei wie envs/dev.env zusammen.
Mindestens müssen Sie Ihren Discord-Token in envs/.env definieren:
DISCORD_TOKEN=IHR_DISCORD_TOKEN
Die Laufzeitskripte fügen automatisch das lokale vendor/bin und die Python-virtualenv zu Ihrem PATH hinzu.
◆ Installation
Das Installationsprogramm lädt Mix-Abhängigkeiten herunter und platziert die erforderlichen Medienbinärdateien lokal im vendor/-Verzeichnis:
./install.sh
Dieses Skript wird:
- Mix-Abhängigkeiten herunterladen und kompilieren.
- Einen statischen FFmpeg-Build herunterladen.
- Eine Python-virtualenv für Streamlink und yt-dlp erstellen.
◆ Ausführung in der Entwicklung
Starten Sie den Bot für die Entwicklung mit dem Ausführungsskript:
./run.sh
Das Skript überprüft, ob alle Werkzeuge (ffmpeg, yt-dlp, usw.) vorhanden sind, führt Datenbankmigrationen durch und startet die Phoenix-Anwendung über iex -S mix.
◆ PostgreSQL AGE-Integration
Das Projekt enthält eine Migration zur Aktivierung der Apache AGE-Erweiterung für Graphabfragen. Nach der Installation von AGE auf Ihrem PostgreSQL-Server wird das run.sh-Skript oder mix ecto.setup die Erweiterung in der Datenbank aktivieren.
Sie können dann Cypher-Abfragen über Ecto.Repo.query/2 ausführen:
Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")
◆ Native Rust-Erweiterung
Die native/ryujin-Crate ist mit Rustler integriert. Elixir- und Rust-Code werden zusammen mit mix compile kompiliert. Fügen Sie neue NIFs in src/lib.rs hinzu und machen Sie sie über das lib/ryujin.ex-Modul für Elixir verfügbar.
◆ Fehlerbehebung
- "Befehl nicht gefunden": Stellen Sie sicher, dass Sie
chmod +x install.sh run.shausgeführt haben. - Veraltete Binärdateien: Entfernen Sie das
vendor/-Verzeichnis und führen Sie./install.sherneut aus. - Datenbank existiert nicht: Stellen Sie sicher, dass PostgreSQL läuft, und führen Sie
./run.sherneut aus, dasmix ecto.createausführt. - Observer verbinden: Der Bot läuft als benannter Knoten. Öffnen Sie ein neues Terminal und führen Sie aus:
iex --sname observer --cookie ryujin_cookie
:observer.start()
