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

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/ryujinpara NIFs do Rustler, a fim de lidar com tarefas que exigem grande poder de computação. - Configuração por script: Os scripts locais
install.sherun.shgerenciam 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/postgresnolocalhost) - Python 3 (para Streamlink + yt-dlp em um virtualenv)
curletar(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

◆ 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á:
- Buscar e compilar as dependências do Mix.
- Baixar uma compilação estática do FFmpeg.
- 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 executamix 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()
