projeto
Moodle Chat Bot — Assistente de Programação em C no Chat do Moodle
com Felipe Zanoni da Rosa
Moodle Chat Bot — Assistente de Programação em C no Chat do Moodle
Uma extensão de navegador que transforma o chat do Moodle em um compilador e tutor de C com IA.
O que é
Uma extensão de navegador (Chrome/Firefox) que monitora o chat de mensagens do Moodle e o transforma em um assistente acadêmico de programação em C. Direto do chat da disciplina, é possível compilar e rodar código C, interagir com o programa em execução (inclusive fornecer entradas via scanf), pedir para uma IA explicar erros ou corrigir bugs, e manter um histórico de conversas e execuções anteriores — tudo sem sair da interface do curso.
Como funciona
Um content script injetado na página do Moodle observa o chat em busca de comandos que começam com !, enviados por um usuário autorizado. Cada comando é repassado para um backend local em Flask, que roteia a mensagem: se for código C, ele é compilado com GCC e executado em um subprocesso, com um sistema de filas e threads para capturar saída em tempo real e detectar quando o programa está esperando entrada do usuário. Se for uma pergunta, a mensagem — junto com o contexto de execuções anteriores escolhido pelo usuário — é enviada para a IA do Google Gemini, com fallback automático entre modelos em caso de limite de cota. Todo o histórico de mensagens, respostas e execuções fica salvo em um banco DuckDB local.
Stack técnica
- JavaScript (extensão de navegador, Manifest V3)
- Python + Flask (backend local)
- Google Gemini API
- DuckDB para persistência
- GCC para compilação e execução de C
Destaques técnicos
- Runner de C interativo, com suporte a
scanfem tempo real através de um "timer de silêncio" que decide quando entregar a saída ao usuário - Inferência automática de
#include: quando o chat do Moodle corrompe símbolos como#, o bot reconhece as funções usadas (printf,malloc,sqrt...) e injeta os headers corretos - Sistema de contexto para a IA com granularidade fina — desde "última execução" até um ID específico de conversa, com regras sobre incluir só a pergunta, só a resposta, ou ambas
- Fallback em cascata entre modelos Gemini para contornar limites de cota gratuita
- Arquitetura em camadas no backend (rotas, execução, IA, inferência de headers, banco de dados), mantendo cada responsabilidade isolada