Ryujinni
A versão em Elixir do bot Clairemont do Discord, desenvolvida pela Providence Network (Providentia).
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/ryujinpara NIFs Rustler lidarem com tarefas computacionalmente pesadas. - Configuração por Script: Scripts locais
install.sherun.shgerenciam 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/postgresemlocalhost) - Python 3 (para Streamlink + yt-dlp em um virtualenv)
curletar(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

◆ 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á:
- Baixar e compilar as dependências Mix.
- Baixar uma build estática do FFmpeg.
- 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.shnovamente. - Banco de dados não existe: Certifique-se de que o PostgreSQL está em execução e execute
./run.shnovamente, que executamix 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()
