Ryujinni
Elixir

Ryujinni

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

image

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

Этот скрипт выполнит:

  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()