Ryujinni
Elixir

Ryujinni

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

imagem

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

◆ Recursos

  • Automação Focada em Alianças: Intenções são pré-configuradas para gerenciamento de relacionamento em nível de mensagem direta e guilda.
  • Capacidade de Voz: Inclui suporte a FFmpeg, Streamlink e yt-dlp para envio de áudio.
  • Acelerado por Rust: Inclui um crate native/ryujin para NIFs Rustler lidarem com tarefas computacionalmente pesadas.
  • Configuração por Script: Scripts locais install.sh e run.sh gerenciam o toolchain e o ambiente para configurações reproduzíveis.

◆ Pré-requisitos

  • Elixir ≥ 1.18 (com uma versão correspondente de Erlang/OTP)
  • PostgreSQL (padrão: postgres/postgres em localhost)
  • Python 3 (para Streamlink + yt-dlp em um virtualenv)
  • curl e tar (para o download do FFmpeg)
  • Toolchain Rust (se for modificar a extensão nativa)

Certifique-se de que os scripts auxiliares sejam 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 de envs/. O runtime 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_DISCORD

Os scripts de runtime adicionam automaticamente o diretório local vendor/bin e o virtualenv Python ao seu PATH.

◆ Instalação

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

./install.sh

Este script irá:

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

◆ Executando em 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 migrações de banco de dados e inicia a aplicação Phoenix via iex -S mix.

◆ Integração com PostgreSQL AGE

O projeto inclui uma migração para habilitar a extensão Apache AGE para consultas em grafo. 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ê pode então executar consultas Cypher através de Ecto.Repo.query/2:

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

◆ Extensão Nativa Rust

O crate native/ryujin é integrado com Rustler. O código Elixir e Rust é compilado junto com mix compile. Adicione novos NIFs em src/lib.rs e exponha-os ao Elixir através do módulo lib/ryujin.ex.

◆ Solução de Problemas

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