Ryujinni
Elixir

Ryujinni

Discord의 Clairemont 봇의 Elixir 버전으로, Providence Network(Providentia)에서 구동됩니다.

GitHub|
image

Ryujin은 Clairemont 봇을 위한 외교 연락 모듈입니다. 시스템 내의 다른 모듈들이 보안 및 관리를 담당하는 반면, Ryujin은 동맹 관계 구축, 공동 이니셔티브 조정, 길드 간 채널의 평온 유지에 중점을 둡니다. 이 모듈은 Nostrum을 활용한 Elixir 기반으로 구축되었으며, 고성능 작업을 위해 Rust 기반 기능으로 확장되도록 설계되었습니다.

◆ 기능

  • 동맹 중심 자동화: 직접 메시지 및 길드 차원의 관계 관리를 위한 인텐트가 사전 구성되어 있습니다.
  • 음성 지원: 오디오 전송을 위해 FFmpeg, Streamlink 및 yt-dlp 지원이 포함되어 있습니다.
  • Rust 가속화: 연산 집약적인 작업을 처리하기 위해 Rustler NIF용 native/ryujin 크레이트가 포함되어 있습니다.
  • 스크립트 기반 설정: 로컬 install.shrun.sh 스크립트가 툴체인 및 환경을 관리하여 반복 가능한 설정을 지원합니다.

◆ 필수 조건

  • Elixir 1.18 이상 (일치하는 Erlang/OTP 릴리스 포함)
  • PostgreSQL (기본값: localhostpostgres/postgres)
  • Python 3 (가상 환경 내 Streamlink + yt-dlp용)
  • curltar (FFmpeg 다운로드용)
  • Rust 툴체인 (네이티브 확장 기능을 수정하는 경우)

시작하기 전에 헬퍼 스크립트가 실행 가능한지 확인하십시오:

chmod +x install.sh run.sh

리포지토리 차트 보고서

◆ 구성

구성은 envs/에서 불러옵니다. 런타임은 envs/.env(공유 기본값)와 envs/dev.env와 같은 환경별 파일을 병합합니다.

최소한 envs/.env에 Discord 토큰을 정의해야 합니다:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

런타임 스크립트는 로컬 vendor/bin 및 Python 가상 환경을 PATH에 자동으로 추가합니다.

◆ 설치

설치 프로그램은 Mix 의존성을 가져오고, 필요한 미디어 바이너리를 로컬 vendor/ 디렉터리에 준비합니다:

./install.sh

이 스크립트는 다음 작업을 수행합니다:

  1. Mix 의존성을 가져와 컴파일합니다.
  2. 정적 FFmpeg 빌드를 다운로드합니다.
  3. Streamlink 및 yt-dlp를 위한 Python 가상 환경을 생성합니다.

◆ 개발 환경에서 실행

run 스크립트를 사용하여 개발용 봇을 실행합니다:

./run.sh

이 스크립트는 모든 도구(ffmpeg, yt-dlp 등)가 설치되어 있는지 확인하고, 데이터베이스 마이그레이션을 실행한 후, iex -S mix를 통해 Phoenix 애플리케이션을 시작합니다.

◆ PostgreSQL AGE 통합

이 프로젝트에는 그래프 쿼리를 위한 Apache AGE 확장 기능을 활성화하는 마이그레이션이 포함되어 있습니다. PostgreSQL 서버에 AGE를 설치한 후, run.sh 스크립트나 mix ecto.setup을 실행하면 데이터베이스에서 AGE가 활성화됩니다.

그러면 Ecto.Repo.query/2를 통해 Cypher 쿼리를 실행할 수 있습니다:

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

◆ 네이티브 Rust 확장

native/ryujin 크레이트는 Rustler와 통합되어 있습니다. mix compile을 실행하면 Elixir 코드와 Rust 코드가 함께 컴파일됩니다. src/lib.rs에 새로운 NIF를 추가하고, lib/ryujin.ex 모듈을 통해 Elixir에 노출시킵니다.

◆ 문제 해결

  • "command not found": chmod +x install.sh run.sh를 실행했는지 확인하십시오.
  • 오래된 바이너리: vendor/ 디렉터리를 삭제하고 ./install.sh를 다시 실행하세요.
  • 데이터베이스가 존재하지 않음: PostgreSQL이 실행 중인지 확인한 후, mix ecto.create를 실행하는 ./run.sh를 다시 실행하세요.
  • Connect Observer: 봇은 이름이 지정된 노드로 실행됩니다. 새 터미널을 열고 다음 명령을 실행하세요:
iex --sname observer --cookie ryujin_cookie
:observer.start()