Este repositório traz um bot de WhatsApp escrito em Go, usando WhatsMeow para a conexão e a API da OpenAI para gerar texto, transcrição de áudio e imagens.
- Docker & Docker Compose
- Go ≥ 1.23 (opcional, apenas se quiser validar ou compilar localmente)
- Variáveis de ambiente:
OPENAI_API_KEY– sua chave da OpenAIUSER_PHONE– seu número no formato internacional (ex.:5561999999999)GROUPS– lista de<chatJID>s de grupos autorizados, separados por vírgulaPROMPT– prompt base para!resumoCHATGPT_PROMPT– prompt base para!chatgptMODEL– modelo inicial (ex.:gpt-4o-mini)TZ– fuso horário (ex.:America/Sao_Paulo)
INSTA_COOKIES_PATH– caminho para o arquivo de cookies do Instagram/Threads (opcional). Monte o arquivo no container e informe o caminho aqui para que oyt-dlpconsiga autenticar, inclusive para links do threads.com.TIKTOK_COOKIES_PATH– arquivo de cookies do TikTok (opcional, uso similar ao do Instagram).
- Clone este repositório e acesse a pasta:
git clone https://github.com/atcasanova/whatsappBot.git
cd whatsappBot- (Opcional) Gere e valide seu go.mod e go.sum antes do Docker:
go mod tidy
go mod download- (Opcional) Compile localmente para testar:
go build -o bot .
./bot --help # ou ./bot para ver logs iniciais- Configure as variáveis de ambiente, seja criando um arquivo .env com:
OPENAI_API_KEY=sk-...
USER_PHONE=5561999999999
GROUPS=551199999999-11111118@g.us,5511999999999-222222222@g.us
PROMPT="Resuma as mensagens do dia:"
CHATGPT_PROMPT="Responda ao texto a seguir:"
MODEL=gpt-4o-mini
TZ=America/Sao_Paulo
INSTA_COOKIES_PATH=/cookies/insta_cookies.txt
TIKTOK_COOKIES_PATH=/cookies/tiktok_cookies.txtSe já possuir um arquivo de cookies do Instagram, monte-o no container, por exemplo:
volumes:
# remova `:ro` se quiser atualizar os cookies via `!insta`
- ./insta_cookies.txt:/cookies/insta_cookies.txt
- ./tiktok_cookies.txt:/cookies/tiktok_cookies.txtOu diretamente no docker-compose.yml
docker-compose down
docker-compose up --build -d- No primeiro start é mostrado na tela um conteúdo em base64, como um qrcode. Para escaneá-lo direto do terminal, execute
qrencode -t ANSI256 <string> - A sessão (datastore.db em volume) será criada e reutilizada.
| Gatilho | Onde | Exemplo | O que faz |
|---|---|---|---|
!model |
Sua conversa consigo mesmo | !model |
Mostra o modelo atual usado pelo bot na API OpenAI |
!model <nome> |
Sua conversa consigo mesmo | !model gpt-4 |
Altera o modelo do ChatGPT sem reiniciar o container |
!logs <groupJID> |
Sua conversa consigo mesmo | !logs 551199999999-14700@g.us |
Mostra o histórico armazenado do grupo informado |
!grupos |
Sua conversa consigo mesmo | !grupos |
Mostra os grupos monitorados para !resumo |
!grupos add <id do grupo> |
Sua conversa consigo mesmo | !grupos add 551199999999-14700@g.us |
Adiciona grupos monitorados para !resumo |
!grupos del <id do grupo> |
Sua conversa consigo mesmo | !grupos del 551199999999-14700@g.us |
Remove grupos monitorados para !resumo |
!insta <cookies> |
Sua conversa consigo mesmo | !insta sessionid=abc |
Atualiza o conteúdo do arquivo de cookies usado pelo yt-dlp. Também é possível montar o arquivo e definir INSTA_COOKIES_PATH. |
!tiktok <cookies> |
Sua conversa consigo mesmo | !tiktok sid_tt=abc |
Atualiza os cookies do TikTok usados no yt-dlp. Também é possível montar o arquivo e definir TIKTOK_COOKIES_PATH. |
!carteirinha |
Qualquer conversa | !carteirinha |
Envia a imagem carteirinha.jpg para o chat |
!cnh |
Qualquer conversa | !cnh |
Envia o PDF cnh.pdf para o chat |
!pix |
Qualquer conversa | !pix 120,50 |
Gera um payload Pix (com valor opcional) |
!copia |
Qualquer conversa | (Responder a uma mensagem) | Extrai e envia e-mails/telefones da mensagem citada |
!chatgpt <txt> |
Qualquer conversa | !chatgpt Está correto? |
Envia <txt> + mensagem citada (texto ou imagem) ao ChatGPT e devolve a resposta |
!edit <prompt> |
Qualquer conversa | (Responder a uma imagem) | Edita a imagem citada via gpt-image-1.5 e envia o resultado |
!img <prompt> |
Qualquer conversa | !img gato astronauta, estilo cartoon |
Gera e envia uma imagem via gpt-image-1.5 diretamente no chat |
!sticker |
Qualquer conversa | (Responder a uma imagem ou vídeo curto) | Converte a mídia citada em figurinha (imagem estática ou animada) |
!download |
Sua conversa consigo mesmo | (Responder a um link) | Baixa mídias suportadas pelo yt-dlp e envia no chat |
!paywall |
Sua conversa consigo mesmo | (Responder a um link) | Gera link alternativo usando PAYWALL_REMOVER |
!ler |
Qualquer conversa | !ler |
Transcreve o último áudio citado usando Whisper |
!podcast |
Qualquer conversa | !podcast |
Transcreve o áudio citado e resume com clareza usando o modelo configurado |
!resumo |
Grupos autorizados | !resumo |
Gera resumo das mensagens trocadas hoje nesse grupo |
- Nível de log: ajuste em
main.gona criação do client:clientLog := waLog.Stdout("Client", "DEBUG", true)
.
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
├── main.go
└── README.md- Dockerfile: instala Go 1.23, habilita cgo, instala o
yt-dlpatualizado viapip, configura timezone e compila o binário. - docker-compose.yml: monta volumes para sessão e arquivos de áudio.
- main.go: toda a lógica do bot e handlers de eventos.