ManyBot é um bot para WhatsApp que roda 100% localmente, sem depender da API oficial do WhatsApp. Ele utiliza a biblioteca whatsapp-web.js, que automatiza o WhatsApp Web sem depender de gráficos (headless).
Algumas funcionalidades desse bot incluem:
- Suporte a múltiplos chats em uma única sessão
- Sistema de plugins — adicione, remova ou crie funcionalidades sem mexer no núcleo do bot
- Node.js
- NPM
- Sistema Linux ou Windows
obs: Sistemas Android e iOS ainda não são 100% compatíveis. O suporte para Termux está em fases de testes e sem garantia de funcionamento correto.
- Clone o repositório e entre:
git clone https://github.com/synt-xerror/manybot
cd manybot- Crie e abra o arquivo de configuração (use o editor de sua preferência):
touch manybot.conf
nano manybot.conf- Nele você pode configurar algumas coisas do ManyBot. Esse é o arquivo base para que possa modificar:
# Comentários com '#'
CLIENT_ID=bot_permanente
CMD_PREFIX=!
CHATS=[
123456789@c.us,
123456789@g.us
]
PLUGINS=[
video,
audio,
figurinha,
adivinhacao
]- CLIENT_ID: ID do cliente, serve para identificar sua sessão.
- Valor padrão:
bot_permanente
- Valor padrão:
- CMD_PREFIX: Prefixo do comando, o caractere que você usa para executar um comando (!many, !figurinha).
- Valor padrão:
!
- Valor padrão:
- CHATS: ID dos chats no qual você quer que o bot assista. Use o utilitário:
src/utils/get_id.jspara descobrir os IDs. Deixe vazio caso queira que funcione com qualquer chat.- Valor padrão: (nenhum)
- PLUGINS: Lista de plugins ativos. Cada nome corresponde a uma pasta dentro de
src/plugins/. Remova ou comente uma linha para desativar o plugin sem apagá-lo.- Valor padrão: (nenhum)
obs: o utilitário src/utils/get_id.js usa um CLIENT_ID separado para que não entre em conflito com a sessão principal do ManyBot. Você terá que escanear o QR Code novamente para executá-lo.
- Execute o script de instalação:
bash ./setup- Rode o bot pela primeira vez (você deve rodar da raiz, não dentro de
src):
node ./src/main.jsEle vai pedir para que escaneie o QR Code com seu celular.
No WhatsApp: Menu (três pontos) > Dispositivos conectados > Conectar um dispositivo
O uso desse bot foi pensado para rodar em um terminal Linux. No entanto, você pode usar o Git Bash, que simula um terminal Linux com Bash real:
-
Para baixar o Git Bash: https://git-scm.com/install/windows Selecione a versão que deseja (portátil ou instalador)
-
Para baixar o Node.js: https://nodejs.org/pt-br/download Role a tela e selecione "Instalador Windows (.msi)" Ou se preferir, use um gerenciador de pacotes como mostra no conteúdo inicial
Depois de instalar ambos, abra o Git Bash e execute exatamente os mesmos comandos mostrados na seção Linux.
Feito a instalação, você pode executar o bot apenas rodando:
node ./src/main.jsÉ recomendável sempre ter a versão mais recente do ManyBot. Para isso, temos um utilitário logo na raíz. Para executar:
bash ./updateSe estiver rodando numa VPS ou apenas quer mais controle, é recomendável criar um serviço systemd. Siga os passos abaixo para saber como criar, habilitar e gerenciar um.
- Configurando o diretório
Primeiro passo é garantir que o diretório do ManyBot esteja no local adequado, é recomendável guardar em /root/manybot (os passos a seguir supõem que esteja essa localização)
- Criando o serviço
Abra o arquivo:
/etc/systemd/system/manybot.serviceE cole o seguinte conteúdo:
[Unit]
Description=ManyBot
After=network.target
[Service]
ExecStart=/usr/bin/env node /root/manybot/src/main.js
WorkingDirectory=/root/manybot
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
- Iniciando e habilitando o serviço:
Primeiro reinicie o daemon do systemd:
systemctl daemon-reloadInicie o serviço:
systemctl start manybotHabilite para que ele seja iniciado junto com o seu sistema (opcional):
systemctl enable manybot- Gerenciando o serviço:
Ver logs:
journalctl -u manybotEm tempo real:
journalctl -u manybot -fParar o serviço:
systemctl stop manybotReiniciar o serviço:
systemctl restart manybotSaiba mais sobre como gerenciar serviços em: https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units-pt Sobre o journalctl: https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs-pt
O ManyBot é construído em torno de um sistema de plugins. O núcleo do bot (kernel) apenas conecta ao WhatsApp e distribui as mensagens — quem decide o que fazer com elas são os plugins.
Isso significa que você pode adicionar, remover ou criar funcionalidades sem tocar no código principal do bot.
O ManyBot vem com alguns plugins prontos para uso, como:
- video — baixa um vídeo da internet e envia no chat (
!video <link>) - audio — baixa o áudio de um vídeo e envia como mensagem de voz (
!audio <link>) - figurinha — converte imagens, GIFs e vídeos em figurinhas (
!figurinha) - adivinhacao — jogo de adivinhação de um número entre 1 e 100 (
!adivinhação começar) - forca — clássico jogo da forca (
!forca começar) - many — exibe a lista de comandos disponíveis (
!many) - obrigado — responde agradecimentos (
!obrigado,!valeu,!brigado)
Para ativar ou desativar qualquer um deles, basta editar a lista PLUGINS no manybot.conf.
Cada plugin é uma pasta dentro de plugins/ com um arquivo index.js. O bot carrega automaticamente todos os plugins listados no manybot.conf.
A estrutura mínima de um plugin:
plugins/
└── meu-plugin/
└── index.js
O index.js deve exportar uma função default que o kernel chama a cada mensagem recebida. A função recebe { msg, api } e decide por conta própria se age ou ignora:
// plugins/meu-plugin/index.js
import { CMD_PREFIX } from "../../config.js"
export default async function ({ msg, api }) {
if (!msg.is(CMD_PREFIX + "oi")) return;
await msg.reply("Olá! 👋");
}Contém as informações da mensagem recebida:
| Propriedade | Descrição |
|---|---|
msg.body |
Texto da mensagem |
msg.args |
Tokens da mensagem — ["!video", "https://..."] |
msg.type |
Tipo — "chat", "image", "video", "audio", "sticker" |
msg.sender |
ID de quem enviou |
msg.senderName |
Nome de quem enviou |
msg.fromMe |
true se foi o próprio bot que enviou |
msg.hasMedia |
true se a mensagem tem mídia |
msg.hasReply |
true se é uma resposta a outra mensagem |
msg.isGif |
true se a mídia é um GIF |
msg.is(cmd) |
Retorna true se a mensagem começa com cmd |
msg.reply(text) |
Responde à mensagem com quote |
msg.downloadMedia() |
Baixa a mídia — retorna { mimetype, data } |
msg.getReply() |
Retorna a mensagem citada, ou null |
Contém tudo que o plugin pode fazer — enviar mensagens, acessar outros plugins, registrar logs:
| Método | Descrição |
|---|---|
api.send(text) |
Envia texto no chat |
api.sendVideo(filePath) |
Envia um vídeo a partir de um arquivo local |
api.sendAudio(filePath) |
Envia um áudio a partir de um arquivo local |
api.sendImage(filePath, caption?) |
Envia uma imagem a partir de um arquivo local |
api.sendSticker(bufferOuPath) |
Envia uma figurinha — aceita Buffer ou caminho |
api.getPlugin(name) |
Retorna a API pública de outro plugin |
api.chat.id |
ID do chat atual |
api.chat.name |
Nome do chat atual |
api.chat.isGroup |
true se é um grupo |
api.log.info(...) |
Loga uma mensagem informativa |
api.log.warn(...) |
Loga um aviso |
api.log.error(...) |
Loga um erro |
Se o seu plugin precisar de configurações próprias, você pode adicioná-las diretamente no manybot.conf e importá-las no código:
import { MEU_PREFIXO } from "../../src/config.js";
const prefixo = MEU_PREFIXO ?? "padrão";Um plugin pode expor funções para que outros plugins as utilizem. Para isso, basta exportar um objeto api:
// plugins/utilidades/index.js
export const api = {
formatarData: (date) => date.toLocaleDateString("pt-BR"),
};
export default async function ({ msg }) {
// lógica normal do plugin
}Outro plugin pode chamar:
const utils = api.getPlugin("utilidades");
utils.formatarData(new Date());Se um plugin lançar um erro, o kernel o desativa automaticamente e loga o problema — o restante dos plugins continua funcionando normalmente. Isso garante que um plugin com bug não derruba o bot inteiro.
ManyBot é distribuído sob a licença GPLv3. Você pode usar, modificar e redistribuir o software conforme os termos da licença.
Saiba mais sobre as permissões lendo o arquivo LICENSE ou em: https://www.gnu.org/licenses/quick-guide-gplv3.pt-br.html

