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

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
Этот скрипт выполнит следующее:
- Загрузит и скомпилирует зависимости Mix.
- Загрузит статическую сборку FFmpeg.
- Создаст виртуальную среду 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()
