Ryujinni
Версия бота Clairemont из Discord на Elixir, работающая на Providence Network (Providentia).
Ryujin — это модуль дипломатического взаимодействия для бота Clairemont. В то время как другие модули системы отвечают за безопасность и администрирование, Ryujin сосредоточен на развитии союзнических отношений, координации совместных инициатив и поддержании спокойствия в межгильдийных каналах. Он построен на Elixir с использованием Nostrum и спроектирован для расширения возможностей с помощью функций на Rust для высокопроизводительных задач.
◆ Возможности
- Автоматизация союзнических отношений: Намерения предварительно настроены для управления прямыми сообщениями и отношениями на уровне гильдий.
- Поддержка голоса: Включает поддержку FFmpeg, Streamlink и yt-dlp для воспроизведения аудио.
- Ускорение с помощью Rust: Включает пакет
native/ryujinдля Rustler NIF, обрабатывающих вычислительно сложные задачи. - Скриптовая настройка: Локальные скрипты
install.shиrun.shуправляют инструментарием и окружением для воспроизводимых настроек.
◆ Предварительные требования
- Elixir ≥ 1.18 (с соответствующей версией Erlang/OTP)
- PostgreSQL (по умолчанию
postgres/postgresнаlocalhost) - Python 3 (для Streamlink и yt-dlp в виртуальном окружении)
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()
