← projetos

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 scanf em 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
ZZZZ