Ryujinni
Elixir

Ryujinni

Bot Clairemont w wersji Elixir z Discorda, zasilany przez Providence Network (Providentia).

GitHub|
obraz

Ryujin to moduł ds. kontaktów dyplomatycznych dla bota Clairemont. Podczas gdy inne moduły w systemie zajmują się bezpieczeństwem i administracją, Ryujin skupia się na budowaniu relacji sojuszniczych, koordynowaniu wspólnych inicjatyw oraz utrzymywaniu spokoju na kanałach międzygildyjnych. Został zbudowany w języku Elixir z wykorzystaniem biblioteki Nostrum i zaprojektowany z myślą o rozszerzeniu o funkcje oparte na języku Rust w celu wykonywania zadań wymagających wysokiej wydajności.

◆ Funkcje

  • Automatyzacja ukierunkowana na sojusze: Intencje są wstępnie skonfigurowane do zarządzania wiadomościami bezpośrednimi oraz relacjami na poziomie gildii.
  • Obsługa dźwięku: W zestawie z obsługą FFmpeg, Streamlink i yt-dlp do przesyłania plików audio.
  • Przyspieszenie dzięki Rustowi: Zawiera skrzynkę native/ryujin dla interfejsów NIF Rustler, umożliwiającą obsługę zadań wymagających dużej mocy obliczeniowej.
  • Konfiguracja skryptowa: Lokalne skrypty install.sh i run.sh zarządzają zestawem narzędzi i środowiskiem, umożliwiając powtarzalną konfigurację.

◆ Wymagania wstępne

  • Elixir ≥ 1.18 (z odpowiednią wersją Erlang/OTP)
  • PostgreSQL (domyślnie postgres/postgres na localhost)
  • Python 3 (dla Streamlink + yt-dlp w środowisku virtualenv)
  • curl i tar (do pobrania FFmpeg)
  • Zestaw narzędzi Rust (w przypadku modyfikacji natywnego rozszerzenia)

Przed rozpoczęciem upewnij się, że skrypty pomocnicze mają uprawnienia do wykonywania:

chmod +x install.sh run.sh

Raport dotyczący wykresu repozytorium

◆ Konfiguracja

Konfiguracja jest ładowana z katalogu envs/. Środowisko uruchomieniowe łączy plik envs/.env (wspólne ustawienia domyślne) z plikiem specyficznym dla danego środowiska, np. envs/dev.env.

Musisz przynajmniej zdefiniować swój token Discord w pliku envs/.env:

DISCORD_TOKEN=TWÓJ_TOKEN_DISCORD

Skrypty środowiska uruchomieniowego automatycznie dodają lokalny katalog vendor/bin oraz wirtualne środowisko Python do zmiennej PATH.

◆ Instalacja

Instalator pobiera zależności Mixa i umieszcza wymagane pliki binarne multimediów lokalnie w katalogu vendor/:

./install.sh

Skrypt ten:

  1. Pobierze i skompiluje zależności Mixa.
  2. Pobierze statyczną kompilację FFmpeg.
  3. Utworzy wirtualne środowisko Pythona dla Streamlink i yt-dlp.

◆ Uruchamianie w trybie programistycznym

Uruchom bota w trybie programistycznym za pomocą skryptu run:

./run.sh

Skrypt sprawdza, czy wszystkie narzędzia (ffmpeg, yt-dlp itp.) są dostępne, przeprowadza migracje bazy danych oraz uruchamia aplikację Phoenix za pomocą polecenia iex -S mix.

◆ Integracja z PostgreSQL AGE

Projekt zawiera migrację umożliwiającą korzystanie z rozszerzenia Apache AGE do zapytań grafowych. Po zainstalowaniu AGE na serwerze PostgreSQL skrypt run.sh lub polecenie mix ecto.setup włączą je w bazie danych.

Następnie można wysyłać zapytania Cypher za pomocą Ecto.Repo.query/2:

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

◆ Natywne rozszerzenie w języku Rust

Kratka native/ryujin jest zintegrowana z Rustlerem. Kod w językach Elixir i Rust jest kompilowany razem za pomocą polecenia mix compile. Dodaj nowe interfejsy NIF w pliku src/lib.rs i udostępnij je w Elixirze za pośrednictwem modułu lib/ryujin.ex.

◆ Rozwiązywanie problemów

  • „command not found”: Upewnij się, że wykonałeś polecenie chmod +x install.sh run.sh.
  • Nieaktualne pliki binarne: Usuń katalog vendor/ i ponownie uruchom skrypt ./install.sh.
  • Baza danych nie istnieje: Upewnij się, że PostgreSQL działa, a następnie ponownie uruchom skrypt ./run.sh, który wykonuje polecenie mix ecto.create.
  • Podłącz Observer: Bot działa jako węzeł o określonej nazwie. Otwórz nowe okno terminala i uruchom:
iex --sname observer --cookie ryujin_cookie
:observer.start()