Ryujinni
Elixir

Ryujinni

Die Elixir-Version des Clairemont-Bots von Discord, betrieben vom Providence Network (Providentia).

Bild

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- und run.sh-Skripte verwalten die Toolchain und Umgebung für wiederholbare Einrichtungen.

◆ Voraussetzungen

  • Elixir ≥ 1.18 (mit einer passenden Erlang/OTP-Version)
  • PostgreSQL (Standard: postgres/postgres auf localhost)
  • Python 3 (für Streamlink + yt-dlp in einer virtualenv)
  • curl und tar (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

Repository-Diagrammbericht

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

  1. Mix-Abhängigkeiten herunterladen und kompilieren.
  2. Einen statischen FFmpeg-Build herunterladen.
  3. 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.sh ausgeführt haben.
  • Veraltete Binärdateien: Entfernen Sie das vendor/-Verzeichnis und führen Sie ./install.sh erneut aus.
  • Datenbank existiert nicht: Stellen Sie sicher, dass PostgreSQL läuft, und führen Sie ./run.sh erneut aus, das mix ecto.create ausfü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()