Automação · Mensageria assíncrona
Moodle Messaging Bot
Serviço Python que processa uma fila PostgreSQL para enviar mensagens ao Moodle da UFSC. Coordena autenticação, recuperação de sessão e respostas opcionais via Gemini.
Protótipo
- Python
- asyncio
- HTTPX
- PostgreSQL
- asyncpg
- Gemini
Minha contribuição
Projeto mantido por felpzw: o recorte reúne autenticação CAS, workers assíncronos, persistência da fila e integração opcional de IA. O histórico público também registra uma contribuição de Copilot, sem fundamentar uma alegação de autoria exclusiva.
Problema
Separar a criação de mensagens de seu envio ao Moodle, mantendo uma fila persistente e lidando com a expiração da sessão autenticada. Opcionalmente, uma conversa monitorada pode originar respostas por IA.
Contexto e escopo
O serviço é específico para o Moodle presencial da UFSC e seu fluxo CAS. Não é um conector genérico para todas as instalações Moodle. Sem uma conversa configurada, processa a fila existente e mantém a sessão; respostas automáticas exigem configuração adicional.
Arquitetura
bot.py organiza autenticação e workers de envio, leitura e keep-alive com asyncio. HTTPX mantém a sessão HTTP; asyncpg acessa a fila com estados PENDING, SENT e FAILED.
O leitor consulta a última mensagem da conversa configurada. Quando habilitado, AI.py chama Gemini e a resposta entra na mesma fila de saída. O dispatcher divide textos longos em blocos antes de enviá-los pelos endpoints AJAX do Moodle.
- PostgreSQL · fila de mensagens pendentes
- Dispatcher asyncio · sessão CAS / Moodle
- Endpoints AJAX · envio e atualização de estado
Decisões e trade-offs
A fila relacional preserva conteúdo e resultado do envio entre reinícios, mas a seleção de pendências não bloqueia nem reserva linhas para workers concorrentes. O desenho atual pressupõe um único processo por fila.
Usar a sessão web permite acompanhar o fluxo implementado pelo Moodle alvo, ao custo de depender de cookies, sesskey e detalhes do CAS. Essas consequências são inferidas do código e dos limites documentados.
Testes e evidências
A revisão conferiu os workers, o schema SQL e a documentação. Não foi encontrada uma suíte automatizada no inventário analisado. Testes futuros devem simular expiração de sessão, falha após envio parcial e mensagens concorrentes; não foram realizados login, chamadas ao Gemini ou envios reais nesta revisão.
Limitações
Não há garantia de entrega exatamente uma vez nem reenvio automático das linhas FAILED. O leitor busca apenas a mensagem mais recente a cada ciclo e pode perder mensagens em uma conversa movimentada.
As dependências Python não estão fixadas por versão. Com IA habilitada, o texto recebido é enviado ao Gemini; a fila armazena o conteúdo, e logs podem conter trechos das mensagens. O projeto exige acesso autorizado à conversa e configuração adequada ao ambiente.
Explorar o projeto
Comece pelo schema da fila e siga dispatcher_loop, reader_loop e send_message em bot.py. O guia explica a configuração local e a recuperação de sessão.
Os comandos abaixo apenas preparam o ambiente Python e verificam sintaxe. Para uma execução autorizada, o README descreve PostgreSQL, variáveis de ambiente e python bot.py. TEST_CONTENT pode enfileirar uma mensagem a cada inicialização; deixe-o ausente ao apenas preparar o ambiente.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install httpx asyncpg beautifulsoup4 python-dotenv google-genai
python -m py_compile bot.py AI.py- Código revisado
- Autenticação e workers
- Modelo da fila
- Integração com Gemini
- Configuração e limites operacionais
- Preparação do ambiente
Fontes conferidas em 2026-09-27 · Conteúdo v1 · Revisão 36f3358.