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

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/ryujindla interfejsów NIF Rustler, umożliwiającą obsługę zadań wymagających dużej mocy obliczeniowej. - Konfiguracja skryptowa: Lokalne skrypty
install.shirun.shzarzą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/postgresnalocalhost) - Python 3 (dla Streamlink + yt-dlp w środowisku virtualenv)
curlitar(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

◆ 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:
- Pobierze i skompiluje zależności Mixa.
- Pobierze statyczną kompilację FFmpeg.
- 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 poleceniemix 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()
