Ryujinni
Elixir

Ryujinni

Версия бота Clairemont из Discord на Elixir, работающая на Providence Network (Providentia).

GitHub|
image

Ryujin — это модуль дипломатической связи для бота Clairemont. В то время как другие модули системы занимаются вопросами безопасности и администрирования, Ryujin сосредоточен на укреплении союзнических отношений, координации совместных инициатив и поддержании спокойной обстановки в межгильдейских каналах. Он написан на Elixir с использованием Nostrum и разработан с возможностью расширения за счёт функций на базе Rust для выполнения высокопроизводительных задач.

◆ Возможности

  • Автоматизация, ориентированная на альянсы: намерения предварительно настроены для управления личными сообщениями и отношениями на уровне гильдий.
  • Поддержка голосовой связи: В комплект входит поддержка FFmpeg, Streamlink и yt-dlp для передачи аудио.
  • Ускорение с помощью Rust: включает крэт native/ryujin для NIF-интерфейсов Rustler, позволяющий обрабатывать вычислительно-емкие задачи.
  • Настройка с помощью скриптов: локальные скрипты install.sh и run.sh управляют набором инструментов и средой для повторяемых установок.

◆ Необходимые условия

  • Elixir ≥ 1.18 (с соответствующим выпуском Erlang/OTP)
  • PostgreSQL (по умолчанию postgres/postgres на localhost)
  • Python 3 (для Streamlink + yt-dlp в virtualenv)
  • curl и tar (для загрузки FFmpeg)
  • Набор инструментов Rust (при модификации нативного расширения)

Перед запуском убедитесь, что вспомогательные скрипты имеют права на выполнение:

chmod +x install.sh run.sh

Отчёт о диаграмме репозитория

◆ Настройка

Настройки загружаются из каталога envs/. Среда выполнения объединяет файл envs/.env (общие настройки по умолчанию) и файл, специфичный для конкретной среды, например envs/dev.env.

Как минимум, вам необходимо указать свой токен Discord в файле envs/.env:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

Скрипты среды выполнения автоматически добавляют локальный каталог vendor/bin и виртуальную среду Python в ваш PATH.

◆ Установка

Установщик загружает зависимости Mix и размещает необходимые медиа-бинарники локально в каталоге vendor/:

./install.sh

Этот скрипт выполнит следующее:

  1. Загрузит и скомпилирует зависимости Mix.
  2. Загрузит статическую сборку FFmpeg.
  3. Создаст виртуальную среду Python для Streamlink и yt-dlp.

◆ Запуск в режиме разработки

Запустите бота для разработки с помощью скрипта запуска:

./run.sh

Скрипт проверяет наличие всех инструментов (ffmpeg, yt-dlp и т. д.), выполняет миграции базы данных и запускает приложение Phoenix с помощью команды iex -S mix.

◆ Интеграция с PostgreSQL AGE

Проект включает миграцию, позволяющую использовать расширение Apache AGE для графовых запросов. После установки AGE на сервере PostgreSQL скрипт run.sh или команда mix ecto.setup включат его в базе данных.

После этого вы сможете выполнять запросы Cypher с помощью Ecto.Repo.query/2:

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

◆ Нативное расширение на Rust

Крат native/ryujin интегрирован с Rustler. Код на Elixir и Rust компилируется вместе с помощью mix compile. Добавьте новые NIF в файл src/lib.rs и предоставьте к ним доступ из Elixir через модуль lib/ryujin.ex.

◆ Устранение неполадок

  • «command not found»: Убедитесь, что вы выполнили команды chmod +x install.sh run.sh.
  • Устаревшие бинарные файлы: удалите каталог vendor/ и запустите ./install.sh заново.
  • База данных не существует: убедитесь, что PostgreSQL запущен, и запустите ./run.sh заново; эта команда выполняет mix ecto.create.
  • Подключение Observer: Бот запускается как узел с именем. Откройте новый терминал и выполните:
iex --sname observer --cookie ryujin_cookie
:observer.start()