Bot de WhatsApp desenvolvido para auxiliar estudantes do Bacharelado em Tecnologia da Informação (BTI) do Instituto Metrópole Digital (IMD/UFRN) com informações acadêmicas, horários, vagas de emprego e muito mais.
📱 Clique aqui para conversar com o bot
Lista gerada a partir de src/commands/. Todo comando aceita o prefixo !.
| Comando | Apelidos | Descrição |
|---|---|---|
!professor |
!prof |
Taxa de aprovação de um professor por disciplina. Uso: !professor <nome> |
!turma |
!disciplina, !aprovacao, !aprovação, !taxa |
Taxa de aprovação por professor numa disciplina. Uso: !turma calculo 1 |
| Comando | Apelidos | Descrição |
|---|---|---|
!grade |
!grades, !curricular |
Envia a imagem da grade curricular especificada. |
!calendario |
!cal, !acad |
Envia o arquivo do calendário acadêmico. |
!horarios |
!turno, !horario, !h, !turnos |
Exibe os horários dos turnos disponíveis. |
!faltas |
!faltas, !faltaspermitidas, !faltaslimite, !f |
responde com o número limite de faltas permitidas |
!pes |
— | Informa a grade necessária para conseguir o certificado de cada PES. (só no privado) |
!calculadora |
!calc, !calcular, !media, !previsao, !reposicao |
Calcula média, previsão de nota para N3 ou nota necessária na reposição. |
!feriados |
!feriado, !holidays |
Lista feriados restantes de 2026 |
| Comando | Apelidos | Descrição |
|---|---|---|
!ru |
!cardapio, !rurefeicao |
Mostra o cardapio do RU UFRN para hoje. |
!circular |
!circ, !onibus, !horariocircular |
Envia a imagem dos horários do circular. |
!secretaria |
— | Envia o contato da secretaria. |
!links |
!link, !comunidade, !grupo |
Retorna links relacionados à comunidade do BTI |
| Comando | Apelidos | Descrição |
|---|---|---|
!figurinha |
!sticker, !fig |
Transforma foto, vídeo ou gif (na legenda) em figurinha. (só no privado) |
| Comando | Apelidos | Descrição |
|---|---|---|
!jobs |
!jerimum, !vagas, !jerimumjobs |
Lista vagas de emprego do Jerimum Jobs. (só no privado) |
!editais |
!bolsas, !metropole |
Lista editais do portal Metrópole Digital. (só no privado) |
| Comando | Apelidos | Descrição |
|---|---|---|
!menu |
!ajuda, !comandos, !help |
Mostra a lista de comandos disponíveis. |
!uso |
!eu, !chamadas |
Faz uma requisição no servidor e vê quantos comandos você já usou. (só no privado) |
!dashboard |
!painel, !dash |
Retorna o link para o painel geral do bot. |
!ping |
!p |
Responde com Pong! |
!repositorio |
!repo, !github, !source, !sourcecode, !code, !codigo, !star |
Manda o link do repositório do bot |
!sugestao |
!sgt, !sugestão, !feedback, !ideia |
Envie uma sugestão ou ideia pro bot. Uso: !sgt <sua ideia> (só no privado) |
| Comando | Apelidos | Descrição |
|---|---|---|
!aviso |
— | Envia um aviso (restrito a moderadores). |
!sugestoes |
!sugestões, !backlog |
Lista as sugestões (moderadores). |
Os comandos aviso, dashboard, figurinha, ping, sugestoes, uso não entram nas métricas de uso, porque têm loggable = false.
- Node.js (versão 20 ou superior)
- npm ou yarn
- ffmpeg instalado no sistema (
apt install ffmpeg/brew install ffmpeg) — necessário para o comando!figurinha - Conta do WhatsApp para conectar o bot
-
Clone o repositório
git clone https://github.com/Jcassio-dev/bti-help-bot.git cd bti-help-bot -
Instale as dependências
npm install
-
Configure as variáveis de ambiente
Crie um arquivo
.envna raiz do projeto:API_BASE_URL=https://sua-api.com API_SECRET_KEY=sua-chave-secreta
-
Inicie o bot em modo de desenvolvimento
npm run dev
-
Escaneie o QR Code
Um QR Code será exibido no console. Escaneie-o com o WhatsApp Web para conectar o bot.
npm run dev # Inicia em modo desenvolvimento
npm run build # Compila o TypeScript para JavaScript
npm start # Inicia o bot em produção
npm run pm2:start # Inicia com PM2 (produção)
npm run pm2:stop # Para o bot rodando no PM2
npm run pm2:restart # Reinicia o bot no PM2
npm run pm2:logs # Visualiza logs do PM2-
Configure o ambiente
cp .env.example .env # Edite o .env com suas configurações -
Inicie o bot
docker-compose up -d --build
-
Visualize os logs
docker-compose logs -f bot
-
Escaneie o QR Code
Copie a string do QR Code dos logs e use um gerador online para criar o QR Code escaneável.
docker-compose down # Para e remove os containers
docker-compose restart # Reinicia o bot
docker-compose logs -f bot # Acompanha os logs em tempo real
docker volume rm <volume-name> # Remove o volume de sessão (força novo login)bti-help-bot/
├── src/
│ ├── commands/ # Comandos do bot
│ │ ├── calendario.ts
│ │ ├── circular.ts
│ │ ├── dashboard.ts
│ │ ├── editais.ts
│ │ ├── faltas.ts
│ │ ├── feriados.ts
│ │ ├── grade.ts
│ │ ├── horarios.ts
│ │ ├── jobs.ts
│ │ ├── links.ts
│ │ ├── menu.ts
│ │ ├── pes.ts
│ │ ├── ping.ts
│ │ ├── repositorio.ts
│ │ ├── secretaria.ts
│ │ └── uso.ts
│ ├── core/ # Lógica principal
│ │ ├── api.ts # Cliente da API
│ │ ├── bot.ts # Configuração do Baileys
│ │ └── handlers.ts # Manipulador de mensagens
│ ├── resources/ # Recursos estáticos
│ │ ├── constants/ # Constantes (PES, etc)
│ │ ├── docs/ # PDFs e documentos
│ │ ├── imgs/ # Imagens das grades
│ │ └── feriados2026.json
│ ├── types/ # Definições TypeScript
│ │ ├── api.ts
│ │ └── command.ts
│ └── index.ts # Ponto de entrada
├── auth_info_baileys/ # Sessão do WhatsApp (não versionado)
├── dist/ # Código compilado
├── .env # Variáveis de ambiente
├── docker-compose.yml # Configuração Docker
├── Dockerfile # Imagem Docker
├── package.json
├── tsconfig.json
└── README.md
- Node.js - Runtime JavaScript
- TypeScript - Superset tipado do JavaScript
- Baileys - Biblioteca para WhatsApp Web
- Axios - Cliente HTTP
- Cheerio - Web scraping
- Docker - Containerização
- PM2 - Process manager para Node.js
Contribuições são muito bem-vindas! Aqui estão algumas formas de ajudar:
- Reportar bugs - Abra uma issue descrevendo o problema
- Sugerir funcionalidades - Compartilhe suas ideias de novos comandos
- Adicionar comandos - Crie novos comandos úteis para os estudantes
- Melhorar a documentação - Ajude a tornar este README ainda melhor
- Corrigir bugs - Envie um Pull Request com correções
- Fork este repositório
- Crie uma branch para sua feature (
git checkout -b feature/NovoComando) - Faça commit das suas mudanças (
git commit -m 'Adiciona novo comando') - Push para a branch (
git push origin feature/NovoComando) - Abra um Pull Request
Para criar um novo comando, siga este template:
import { Command } from "../types/command";
import { WASocket, WAMessage, AnyMessageContent } from "baileys";
const meuComando: Command = {
name: "meucomando",
description: "Descrição do comando",
aliases: ["alias1", "alias2"],
privateRestricted: false, // true = só privado, false = privado e grupos
loggable: true, // Registra uso na API
execute: async (
sock: WASocket,
msg: WAMessage,
args: string[]
): Promise<AnyMessageContent | string | null | undefined> => {
return "Resposta do comando";
},
};
export default meuComando;Salve o arquivo em src/commands/meucomando.ts e o bot carregará automaticamente!
Acesse o dashboard público para ver estatísticas de uso do bot:
https://bti-hp-dashboard.vercel.app/
- Limpe a pasta
auth_info_baileyse tente novamente - Verifique se não há múltiplas sessões ativas no WhatsApp Web
- Atualize o Baileys:
npm install baileys@latest
- Verifique se o bot está online com
!ping - Confirme que o comando começa com
! - Use
!menupara ver todos os comandos disponíveis
- Certifique-se de que o volume está montado corretamente no
docker-compose.yml - Não use
docker-compose down -v(isso remove os volumes)
Se este bot te ajudou, considere dar uma ⭐ no repositório! Isso ajuda a tornar o projeto mais visível para outros estudantes e mostra seu apoio.
- Bot no WhatsApp: 558486735862
- Repositório: github.com/Jcassio-dev/bti-help-bot
- Email: josecassio2013@gmail.com
- LinkedIn: linkedin.com/in/jcassio-dev