FELIPE WINSCHDesenvolvedor Full Stack
Voltar aos projetos

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.

  1. PostgreSQL · fila de mensagens pendentes
  2. Dispatcher asyncio · sessão CAS / Moodle
  3. Endpoints AJAX · envio e atualização de estado
O leitor opcional com Gemini também escreve na fila; não há garantia de entrega exatamente uma vez.

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

Fontes conferidas em 2026-09-27 · Conteúdo v1 · Revisão 36f3358.