Skip to content

synt-xerror/manybot

Repository files navigation

ManyBot Logo

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

Exemplos

Exemplo do gerador de figurinhas


Requisitos

  • 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.

Instalação (Linux)

  1. Clone o repositório e entre:
git clone https://github.com/synt-xerror/manybot
cd manybot
  1. Crie e abra o arquivo de configuração (use o editor de sua preferência):
touch manybot.conf
nano manybot.conf
  1. 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
  • CMD_PREFIX: Prefixo do comando, o caractere que você usa para executar um comando (!many, !figurinha).
    • Valor padrão: !
  • CHATS: ID dos chats no qual você quer que o bot assista. Use o utilitário: src/utils/get_id.js para 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.

  1. Execute o script de instalação:
bash ./setup
  1. Rode o bot pela primeira vez (você deve rodar da raiz, não dentro de src):
node ./src/main.js

Ele vai pedir para que escaneie o QR Code com seu celular.

No WhatsApp: Menu (três pontos) > Dispositivos conectados > Conectar um dispositivo

Instalação (Windows)

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:

  1. Para baixar o Git Bash: https://git-scm.com/install/windows Selecione a versão que deseja (portátil ou instalador)

  2. 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.

Uso

Feito a instalação, você pode executar o bot apenas rodando:

node ./src/main.js

Atualizações

É recomendável sempre ter a versão mais recente do ManyBot. Para isso, temos um utilitário logo na raíz. Para executar:

bash ./update

Criando um serviço (opcional)

Se 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.

  1. 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)

  1. Criando o serviço

Abra o arquivo:

/etc/systemd/system/manybot.service

E 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
  1. Iniciando e habilitando o serviço:

Primeiro reinicie o daemon do systemd:

systemctl daemon-reload

Inicie o serviço:

systemctl start manybot

Habilite para que ele seja iniciado junto com o seu sistema (opcional):

systemctl enable manybot
  1. Gerenciando o serviço:

Ver logs:

journalctl -u manybot

Em tempo real:

journalctl -u manybot -f

Parar o serviço:

systemctl stop manybot

Reiniciar o serviço:

systemctl restart manybot

Saiba 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

Plugins

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.

Plugins incluídos

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.

Criando um plugin

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á! 👋");
}

O objeto msg

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

O objeto api

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

Lendo o manybot.conf no plugin

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";

Expondo uma API para outros plugins

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());

Erros no plugin

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.

Considerações

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

About

Cool whatsapp bot. Local and free.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors