Ryujinni
Elixir

Ryujinni

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

GitHub|
Bild

Ryujin ist das Modul für diplomatische Beziehungen des Clairemont-Bots. Während andere Module im System für Sicherheit und Verwaltung zuständig sind, konzentriert sich Ryujin darauf, verbündete Beziehungen zu pflegen, gemeinsame Initiativen zu koordinieren und die Ruhe in den Kanälen zwischen den Gilden zu wahren. Es basiert auf Elixir mit Nostrum und ist so konzipiert, dass es für hochleistungsfähige Aufgaben auf Rust-gestützte Funktionen erweitert werden kann.

◆ Funktionen

  • Allianzorientierte Automatisierung: Intents sind für Direktnachrichten und das Beziehungsmanagement auf Gildenebene vorkonfiguriert.
  • Sprachfähig: Mit integrierter Unterstützung für FFmpeg, Streamlink und yt-dlp zur Übertragung von Audio.
  • Rust-beschleunigt: Enthält eine native/ryujin-Crate für Rustler-NIFs zur Bewältigung rechenintensiver Aufgaben.
  • Skriptbasierte Einrichtung: Lokale install.sh- und run.sh-Skripte verwalten die Toolchain und die Umgebung für wiederholbare Setups.

◆ Voraussetzungen

  • Elixir ≥ 1.18 (mit einer passenden Erlang/OTP-Version)
  • PostgreSQL (standardmäßig 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 angepasst wird)

Stellen Sie vor dem Start sicher, dass die Hilfsskripte ausführbar sind:

chmod +x install.sh run.sh

Repository-Diagrammbericht

◆ Konfiguration

Die Konfiguration wird aus dem Verzeichnis envs/ geladen. Die Laufzeitumgebung führt die Datei envs/.env (gemeinsame Standardwerte) mit einer umgebungsspezifischen Datei wie envs/dev.env zusammen.

Sie müssen mindestens Ihr Discord-Token in envs/.env definieren:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

Die Laufzeit-Skripte fügen das lokale Verzeichnis vendor/bin und die Python-Virtual-Environment automatisch zu Ihrem PATH hinzu.

◆ Installation

Das Installationsskript ruft die Mix-Abhängigkeiten ab und legt die erforderlichen Medien-Binärdateien lokal im Verzeichnis vendor/ bereit:

./install.sh

Dieses Skript führt Folgendes aus:

  1. Abrufen und Kompilieren der Mix-Abhängigkeiten.
  2. Herunterladen eines statischen FFmpeg-Builds.
  3. Erstellt eine Python-Virtual-Environment für Streamlink und yt-dlp.

◆ Ausführung in der Entwicklungsumgebung

Starten Sie den Bot für die Entwicklung mit dem Ausführungsskript:

./run.sh

Das Skript überprüft, ob alle Tools (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 diese durch das Skript run.sh oder den Befehl mix ecto.setup in der Datenbank aktiviert.

Anschließend können Sie 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 Crate native/ryujin ist in Rustler integriert. Elixir- und Rust-Code werden gemeinsam mit mix compile kompiliert. Fügen Sie neue NIFs in src/lib.rs hinzu und stellen Sie diese über das Modul lib/ryujin.ex für Elixir bereit.

◆ Fehlerbehebung

  • „Befehl nicht gefunden“: Stellen Sie sicher, dass Sie chmod +x install.sh run.sh ausgeführt haben.
  • Veraltete Binärdateien: Entfernen Sie das Verzeichnis vendor/ 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, wodurch mix ecto.create ausgeführt wird.
  • Observer verbinden: Der Bot läuft als benannter Knoten. Öffnen Sie ein neues Terminal und führen Sie Folgendes aus:
iex --sname observer --cookie ryujin_cookie
:observer.start()