Um bot profissional e completo para WhatsApp que converte imagens, vídeos e stickers em múltiplos formatos, agora com assistente virtual Luma com capacidade de visão!
Desenvolvido com Baileys, Sharp, FFmpeg e Google Gemini AI.
- Conversação natural: Fala como uma amiga no WhatsApp
- Visão de imagens: Analisa fotos, figurinhas e memes
- Memória de contexto: Lembra conversas anteriores
- Personalidade única: Engraçada, sarcástica e descontraída
- Respostas inteligentes: Comentários específicos sobre imagens
Como usar a Luma:
• "luma, o que você acha dessa foto?" + [imagem]
• Envie uma figurinha e pergunte: "ei luma, quem é esse?"
• Responda a uma imagem: "luma, explica essa imagem"
• Converse naturalmente: "oi luma, tudo bem?"
- Imagens → Stickers: Converte qualquer imagem em sticker estático
- Vídeos/GIFs → Stickers Animados: Suporta até 6-8 segundos de duração
- Stickers → Imagens PNG: Converte stickers estáticos de volta para imagens em alta qualidade
- Stickers Animados → GIFs/MP4: Extrai animações de stickers para formato compartilhável
- Resposta a mensagens: Todos os comandos funcionam respondendo mensagens
- @everyone: Menciona todos os participantes do grupo (apenas admins)
- Sistema de Blacklist: Bloqueie grupos indesejados permanentemente
- Controle de permissões: Apenas o proprietário pode gerenciar a blacklist
- Blacklist persistente: Grupos bloqueados são salvos em arquivo JSON
- Verificação de proprietário: Comandos administrativos protegidos
- Logs detalhados: Rastreamento completo de todas as ações
- IA com visão multimodal usando Gemini 2.0 Flash
- Reconexão automática inteligente com backoff exponencial
- Limpeza automática de sessão quando necessário
- Otimização automática para manter stickers < 800 KB
- Processamento eficiente com Sharp e FFmpeg
- Arquitetura modular seguindo Clean Code
- Gerenciamento de memória com limpeza automática de arquivos temporários
git clone https://github.com/seu-usuario/whatsapp-sticker-bot.git
cd whatsapp-sticker-botnpm installLinux (Debian/Ubuntu):
sudo apt update && sudo apt install ffmpeg -yLinux (Fedora/RHEL):
sudo dnf install ffmpeg -yWindows: Download FFmpeg e adicione ao PATH
MacOS:
brew install ffmpeg- Acesse Google AI Studio
- Crie uma API Key gratuita
- Crie um arquivo
.envna raiz do projeto:
GEMINI_API_KEY=sua_chave_aquiEdite o arquivo src/config/constants.js e configure seu número:
export const CONFIG = {
OWNER_NUMBER: "5598988776655", // Substitua pelo seu número com DDI
// ... outras configurações
};Para descobrir seu número exato:
- Inicie o bot e escaneie o QR Code
- Envie
!meunumeropara o bot em qualquer conversa - Copie o número exibido e configure em
OWNER_NUMBER
Modo produção:
npm startModo desenvolvimento (com hot-reload):
npm run devPrimeiros passos:
- Escaneie o QR Code que aparecerá no terminal com seu WhatsApp
- Aguarde a mensagem: ✅ Conectado com sucesso!
- Use os comandos disponíveis em qualquer conversa
Acione a Luma usando qualquer um destes gatilhos:
• luma
• ei luma
• oi luma
• e aí luma
• fala luma
• luminha
• luminda
Exemplos de uso:
✅ "luma, como você está?"
✅ "ei luma, me ajuda com uma coisa"
✅ "oi luma, você conhece esse meme?" + [imagem]
✅ Responder mensagem da Luma diretamente (sem precisar mencionar "luma")
A Luma pode ver e comentar sobre:
- 📸 Fotos
- 🎭 Figurinhas/Stickers
- 🎨 Memes
- 📱 Screenshots
- 🖼️ Qualquer imagem
Como usar:
✅ Envie foto com legenda: "luma, o que você acha?"
✅ Envie figurinha e pergunte: "ei luma, comenta essa"
✅ Responda a uma imagem: "luma, explica essa foto"
✅ Pergunte sobre detalhes: "luma, que lugar é esse?"
Exemplos práticos:
[Foto de comida] → "luma, isso tá com cara de bom?"
Luma: "Cara, essa pizza tá com uma cara BOA demais!
Aquele queijo derretendo... Fiquei com fome kkkk"
[Figurinha de meme] → "ei luma, explica esse meme"
Luma: "Kkkkk é o Stonks! Representa quando algo dá
lucro de jeito inesperado. Clássico da internet 📈"
[Foto de viagem] → "luma"
Luma: "Eita que praia LINDA! Olha a cor dessa água,
parece Caribe. Tá me deixando com inveja aí kkkk"
Converte imagens, vídeos ou GIFs em stickers.
Exemplos:
• Envie uma foto com a legenda: !sticker
• Envie um vídeo/GIF com a legenda: !sticker
• Responda a uma mensagem com mídia: !sticker
Converte stickers estáticos de volta para imagens PNG.
Exemplos:
• Envie um sticker com a legenda: !image
• Responda a um sticker: !image
Converte stickers animados para GIFs/vídeos.
Exemplos:
• Envie um sticker animado com a legenda: !gif
• Responda a um sticker animado: !gif
Menciona todos os participantes do grupo (apenas administradores).
Uso:
Digite: @everyone
Observações:
⚠️ Funciona apenas em grupos- 🔒 Requer permissão de administrador
- 📋 Marca todos os membros do grupo
Adiciona o grupo atual à lista de bloqueio.
Uso:
Digite no grupo indesejado: !blacklist add
Remove o grupo atual da blacklist.
Uso:
Digite no grupo: !blacklist remove
Lista todos os grupos bloqueados.
Uso:
Digite: !blacklist list
Limpa completamente a blacklist.
Uso:
Digite: !blacklist clear
Exibe estatísticas de uso da Luma.
Mostra:
- Número de conversas ativas
- Quantidade de mensagens por usuário
- Última interação de cada conversa
Limpa o histórico de conversa com a Luma na conversa atual.
Uso:
Digite: !luma clear
Observações importantes:
- 🔒 Apenas o proprietário configurado pode usar estes comandos
- 📁 A blacklist é salva em
blacklist.jsone persiste entre reinicializações - 🚫 O bot ignorará automaticamente todas as mensagens de grupos bloqueados
- 🧠 Histórico da Luma é limpo automaticamente após 2 horas de inatividade
✅ "luma, tudo bem?" → Conversa casual
✅ "ei luma, me ajuda aqui" → Pedir ajuda
✅ Foto + "luma, comenta" → Análise de imagem
✅ Figurinha + "ei luma" → Comentar sticker
✅ Responder mensagem dela → Continuar conversa
✅ Foto + !sticker → Sticker estático
✅ Vídeo/GIF + !sticker → Sticker animado
✅ Sticker + !image → Imagem PNG
✅ Sticker animado + !gif → GIF/vídeo MP4
✅ Responder foto com !sticker
✅ Responder vídeo com !sticker
✅ Responder sticker com !image
✅ Responder sticker animado com !gif
✅ Mencionar todos → @everyone (somente admin)
✅ Bloquear grupo atual → !blacklist add
✅ Desbloquear grupo → !blacklist remove
✅ Ver grupos bloqueados → !blacklist list
✅ Ver stats da Luma → !luma stats
whatsapp-sticker-bot/
├── src/
│ ├── config/
│ │ ├── constants.js # Configurações centralizadas
│ │ ├── lumaConfig.js # Configuração da Luma (NOVO!)
│ │ └── messages.js # Mensagens do sistema
│ ├── handlers/
│ │ ├── LumaHandler.js # Lógica da IA (NOVO!)
│ │ ├── MediaProcessor.js # Processamento de mídia
│ │ └── MessageHandler.js # Gerenciamento de mensagens
│ ├── managers/
│ │ ├── BlacklistManager.js # Sistema de blacklist
│ │ ├── ConnectionManager.js # Gerenciamento de conexão
│ │ └── GroupManager.js # Funções de grupo
│ ├── processors/
│ │ ├── ImageProcessor.js # Processamento de imagens
│ │ └── VideoConverter.js # Conversão de vídeos
│ └── utils/
│ ├── FileSystem.js # Gerenciamento de arquivos
│ └── Logger.js # Sistema de logs
├── .env # API Keys (criar manualmente)
├── index.js # Ponto de entrada
├── package.json
├── nodemon.json
├── blacklist.json # Grupos bloqueados (gerado automaticamente)
└── README.md
Clean Code & SOLID:
- Separação clara de responsabilidades
- Classes especializadas e focadas
- Métodos pequenos e testáveis
- Código autodocumentado
Modularização:
config/: Configurações e constantes centralizadashandlers/: Lógica de negócio e processamentomanagers/: Gerenciamento de estado e conexõesprocessors/: Processamento especializado de mídiautils/: Funções utilitárias reutilizáveis
Edite src/config/lumaConfig.js:
export const LUMA_CONFIG = {
PERSONALITY: {
name: "Luma",
gender: "feminino",
style: "amigável, engraçada e levemente sarcástica",
// Personalize os traços de personalidade
},
TRIGGERS: [
/^luma[,!?]?\s+/i,
/^luma$/i,
// Adicione mais gatilhos personalizados
],
TECHNICAL: {
model: "gemini-2.0-flash-exp", // Modelo com visão
maxHistory: 20, // Mensagens no histórico
maxResponseLength: 800, // Tamanho máximo da resposta
thinkingDelay: { min: 800, max: 2000 }, // Delay para parecer humano
},
};Edite src/config/constants.js:
export const CONFIG = {
// Diretórios
TEMP_DIR: "./temp",
AUTH_DIR: "./auth_info",
BLACKLIST_FILE: "./blacklist.json",
// Segurança
OWNER_NUMBER: "5598988776655",
// Reconexão
MAX_RECONNECT_ATTEMPTS: 3,
RECONNECT_DELAY: 5000,
MIN_CLEAN_INTERVAL: 60000,
// Qualidade de mídia
STICKER_SIZE: 512,
STICKER_QUALITY: 90,
VIDEO_DURATION: 6,
GIF_DURATION: 8,
GIF_FPS: 15,
VIDEO_FPS: 15,
MAX_FILE_SIZE: 800,
WEBP_QUALITY: 75,
MAX_GIF_FRAMES: 50,
// Timeouts
TIMEOUT_MS: 60000,
KEEPALIVE_MS: 30000,
};Características:
- Modelo: Gemini 2.0 Flash Experimental (com visão multimodal)
- Memória: Mantém contexto de até 20 mensagens por usuário
- Personalidade: Amigável, engraçada e levemente sarcástica
- Limpeza automática: Históricos antigos são removidos após 2 horas
Capacidades de Visão:
- Identifica objetos, pessoas, animais, lugares
- Lê texto em imagens (memes, screenshots, etc)
- Entende contexto e emoções em fotos
- Comenta de forma específica e detalhada
- Faz perguntas para continuar a conversa
- Detecta automaticamente desconexões
- Retry com backoff exponencial (3 tentativas)
- Limpa sessão automaticamente quando necessário
- Gera novo QR Code após limpeza
- Cooldown entre limpezas para evitar loops
- Persistência: Grupos bloqueados são salvos em JSON
- Automático: Bot ignora mensagens de grupos bloqueados
- Gerenciável: Comandos completos para adicionar/remover grupos
- Seguro: Apenas o proprietário pode modificar a blacklist
- Remove arquivos temporários automaticamente
- Limpa sessões corrompidas quando detecta erros
- Gerenciamento inteligente de memória
- Cooldown entre limpezas
- Histórico da Luma auto-limpa após inatividade
- Sharp: Processamento rápido de imagens
- FFmpeg: Conversão eficiente de vídeos/GIFs
- Gemini AI: Análise inteligente de imagens
- Redimensionamento automático: Sempre 512x512
- Compressão inteligente: Mantém qualidade abaixo de 800 KB
- Logs informativos e coloridos
- Indicadores de progresso claros
- Mensagens de erro descritivas
- Rastreamento de todas as operações
- Debug detalhado para Luma
- Stickers animados são limitados a 6-8 segundos
- Tamanho máximo de arquivo: 800 KB
- Sessões podem ser invalidadas se o bot ficar offline por muito tempo
- Requer API Key do Google Gemini (gratuita)
- Modelo gemini-2.0-flash-exp suporta visão
- Respostas limitadas a 800 caracteres
- Histórico mantido por 2 horas de inatividade
- Não identifica pessoas específicas por privacidade
- Compressão automática quando o arquivo ultrapassa 800 KB
- Imagens convertidas são salvas em formato PNG com qualidade máxima
- Stickers animados são convertidos para MP4 para melhor compatibilidade
- Blacklist é aplicada automaticamente sem notificação
- Luma responde apenas quando mencionada ou em respostas diretas
- Nodemon ignora
auth_infoetemppara evitar loops - Node.js v18.0.0+ recomendado
- Arquivo
.envé obrigatório para a Luma funcionar
- Verifique se o arquivo
.envexiste comGEMINI_API_KEY - Confirme que está usando
gemini-2.0-flash-expnolumaConfig.js - Mencione "luma" explicitamente na mensagem
- Verifique os logs: deve aparecer
🖼️ Imagem será analisada pela Luma
- Certifique-se de mencionar "luma" na legenda da imagem ou ao responder
- Envie imagem + texto na mesma mensagem ou responda à imagem
- Formatos suportados: JPG, PNG, WebP (figurinhas)
- Verifique logs: deve aparecer
✅ Imagem convertida para base64
- Erro temporário de criptografia do WhatsApp
- Solução: Apenas tente o comando novamente
- Verifique sua conexão com internet
- Delete a pasta
auth_infoe escaneie novo QR Code - Certifique-se que FFmpeg está instalado:
ffmpeg -version
- O bot tenta comprimir automaticamente
- Dica: Envie vídeos/GIFs mais curtos (< 6 segundos)
- Reduza a qualidade/resolução da mídia original
- Verifique se configurou
OWNER_NUMBERcorretamente - Use
!meunumeropara ver seu número no formato correto - Certifique-se de estar usando em um grupo (exceto
!blacklist list)
- Verifique se a chave no
.envestá correta - Acesse Google AI Studio e gere nova chave
- Não use espaços ou aspas no
.env
| Tecnologia | Versão | Propósito |
|---|---|---|
| Node.js | v18+ | Runtime JavaScript |
| Baileys | v6.7.18 | WhatsApp Web API |
| Google Gemini AI | 2.0 Flash | IA com visão multimodal |
| Sharp | v0.32.6 | Processamento de imagens |
| FFmpeg | Latest | Processamento de vídeos |
| Pino | v10.0.0 | Sistema de logs |
| QRCode Terminal | v0.12.0 | Exibição de QR Code |
| dotenv | v16.0.0 | Gerenciamento de variáveis de ambiente |
Contribuições são muito bem-vindas! Para contribuir:
- Faça um Fork do projeto
- Crie uma branch para sua feature
git checkout -b feature/MinhaFeature
- Commit suas mudanças
git commit -m 'Adiciona MinhaFeature' - Push para a branch
git push origin feature/MinhaFeature
- Abra um Pull Request
- Siga os princípios de Clean Code
- Mantenha a arquitetura modular
- Adicione comentários em código complexo
- Teste suas mudanças antes de submeter
- Respeite a personalidade da Luma
Este projeto é open source e está disponível sob a licença MIT.
Desenvolvido por Murilo Castelhano
Funcionalidades principais:
- ✅ Assistente virtual com IA e visão
- ✅ Conversão completa de mídia
- ✅ Sistema de gerenciamento de grupos
- ✅ Blacklist persistente
- ✅ Reconexão automática inteligente
- ✅ Arquitetura limpa e modular