Ryujinni
Elixir

Ryujinni

A versão em Elixir do bot Clairemont do Discord, desenvolvida pela Providence Network (Providentia).

GitHub|
imagem

O Ryujin é o módulo de ligação diplomática do bot Clairemont. Enquanto outros módulos do sistema lidam com segurança e administração, o foco do Ryujin está em cultivar relações de aliança, coordenar iniciativas conjuntas e manter a calma nos canais entre guildas. Ele foi desenvolvido em Elixir com Nostrum e projetado para se estender a recursos baseados em Rust para tarefas de alto desempenho.

◆ Recursos

  • Automação com foco em alianças: as intenções são pré-configuradas para o gerenciamento de mensagens diretas e de relações no nível da guilda.
  • Compatível com áudio: Inclui suporte a FFmpeg, Streamlink e yt-dlp para envio de áudio.
  • Acelerado por Rust: Inclui um crate native/ryujin para NIFs do Rustler, a fim de lidar com tarefas que exigem grande poder de computação.
  • Configuração por script: Os scripts locais install.sh e run.sh gerenciam a cadeia de ferramentas e o ambiente para configurações repetíveis.

◆ Pré-requisitos

  • Elixir ≥ 1.18 (com uma versão compatível do Erlang/OTP)
  • PostgreSQL (padrão: postgres/postgres no localhost)
  • Python 3 (para Streamlink + yt-dlp em um virtualenv)
  • curl e tar (para o download do FFmpeg)
  • Cadeia de ferramentas do Rust (caso seja necessário modificar a extensão nativa)

Certifique-se de que os scripts auxiliares estejam executáveis antes de iniciar:

chmod +x install.sh run.sh

Relatório do gráfico do repositório

◆ Configuração

A configuração é carregada a partir de envs/. O ambiente de execução mescla envs/.env (padrões compartilhados) e um arquivo específico do ambiente, como envs/dev.env.

No mínimo, você deve definir seu token do Discord em envs/.env:

DISCORD_TOKEN=SEU_TOKEN_DO_DISCORD

Os scripts de tempo de execução adicionam automaticamente o diretório local vendor/bin e o virtualenv do Python ao seu PATH.

◆ Instalação

O instalador busca as dependências do Mix e prepara os binários de mídia necessários localmente no diretório vendor/:

./install.sh

Este script irá:

  1. Buscar e compilar as dependências do Mix.
  2. Baixar uma compilação estática do FFmpeg.
  3. Criará um virtualenv do Python para o Streamlink e o yt-dlp.

◆ Execução em ambiente de desenvolvimento

Inicie o bot para desenvolvimento usando o script de execução:

./run.sh

O script verifica se todas as ferramentas (ffmpeg, yt-dlp, etc.) estão presentes, executa as migrações do banco de dados e inicia o aplicativo Phoenix por meio de iex -S mix.

◆ Integração do PostgreSQL AGE

O projeto inclui uma migração para habilitar a extensão Apache AGE para consultas em grafos. Após instalar o AGE no seu servidor PostgreSQL, o script run.sh ou mix ecto.setup irá habilitá-lo no banco de dados.

Você poderá então emitir consultas Cypher por meio de Ecto.Repo.query/2:

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

◆ Extensão nativa em Rust

O crate native/ryujin está integrado ao Rustler. O código em Elixir e Rust é compilado em conjunto com o comando mix compile. Adicione novos NIFs em src/lib.rs e exponha-os ao Elixir por meio do módulo lib/ryujin.ex.

◆ Solução de problemas

  • "comando não encontrado": Certifique-se de ter executado chmod +x install.sh run.sh.
  • Binários desatualizados: Remova o diretório vendor/ e execute novamente ./install.sh.
  • Banco de dados inexistente: Certifique-se de que o PostgreSQL esteja em execução e execute novamente ./run.sh, que executa mix ecto.create.
  • Conectar o Observer: O bot é executado como um nó nomeado. Abra um novo terminal e execute:
iex --sname observer --cookie ryujin_cookie
:observer.start()