Crie um bot para WhatsApp capaz de criar desculpas criativas para evitar sair de casa.
Ontem eu estava atoa em casa e pensei numa maneira de tornar o grupo que eu tenho com meus amigos um pouco mais divertido. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A ideia inicial era de que o BOT pudesse xingar alguns deles, fazer uma lista de membros inativos conforme um número determinado de dias e também fazer uma espécie de leaderboard de quem mais interage no grupo. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
No final, eu tinha também uma função que gerava uma desculpa esfarrapada e exagerada pra não sair com eles que competia diretamente com as desculpas que alguns membros usavam pra não sair. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vou mostrar agora como você pode fazer algo parecido em NodeJS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Preparando o Ambiente | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Antes de mais nada, é interessante que você crie uma pasta pro seu projeto e inicie um projeto com npm init -y | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Estou assumindo que voce tenha o Node instalado no seu sistema, mas caso não tenha, entre nesse link aqui e instale a versão 20. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Agora, precisamos instalar algumas bibliotecas que nosso bot vai usar | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Como o WhatsApp não tem uma API que permita bots, nós vamos usar da seguinte artimanha: vamos 'emular' um navegador web no nosso terminal, mas não se preocupe que quem vai cuidar dos detalhes disso é a api whatsapp-web.js | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A única coisa que teremos que fazer é gerar o qr-code, scannear pelo celular e pronto! Nosso BOT estará rodando no nosso perfil do WhatsApp. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Outra coisa, por estar rodando uma instância real do whatsapp web, não corremos o risco de ser banido e nem nada do tipo. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Não garanto nada, mas se até agora eu não fui banido, ta de boa. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Recebendo as primeiras mensagens | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vamos separar nosso código em alguns arquivos por questão de organização. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Crie um arquivo chamado client.js e coloque o seguinte código nele. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Esse arquivo vai ser responsável por criar a instância do whatsapp web e o qr-code que será scanneado. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Agora em outro arquivo chamado index.js, coloque o seguinte código: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Com isso você já vai conseguir ser capaz de enxergar as mensagens que chegam pra você através do terminal. Ao rodar node index.js você terá: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A partir de agora, se você quiser que o bot responda apenas a certos grupos específicos, precisamos filtrar as mensagens e direcionar respostas apenas aquelas que possuem o campo from desejado. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Observe as mensagens e selecione o atributo from do grupo dos seus amigos e armazene numa variável, nesse caso eu chamei de groupIdRemote. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Quando os campos baterem, ele vai chamar uma função main. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Veja como vai ficar nosso index.js agora: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Não vou mostrar como implementar todos esses comandos, vou implementar o passo a passo do /gpt, que na minha opinião é o mais complicado deles e o resto você descobre por contra própria. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Então vamos lá. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Você vai precisar de $5 dólares. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sério, para você acessar a api do ChatGPT você vai precisar gastar no mínimo $5 dólares. Mas, relaxa que você vai ter mais tokens pro uso da api depois. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Clique nesse Link, faça login e depois vá para a parte de APIs: https://openai.com/blog/introducing-chatgpt-and-whisper-apis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Crie uma nova chave API aqui: https://platform.openai.com/api-keys | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Você vai conseguir qual é o seu plano atual e seus limites de uso da API nesse link aqui: https://platform.openai.com/account/limits | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Agora só precisamos conectar na api através dessa chave, no arquivo de index.js, adicione: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Assim como fizemos com config.js podemos criar um arquivo separado para fazer todo setup de configuração da api e exportar o módulo depois, mas não vou fazer isso aqui agora para que o post fique mais conciso. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E a função sendGPT vai ficar assim: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Veja passamos o contexto para o qual queremos que o chatGPT devolva as respostas. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nesse caso, pedimos para que ele seja um personagem totalmente desgraçado e sarcástico. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
No início eu disse que fiz o bot gerar uma desculpa esfarrapada e para fazer isso, basta apenas alterar o contexto: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"Você é um ser humano que adora dar desculpas mentirosas e esfarrapadas para não encontrar seus amigos, você é bem criativo e bem humorado nas histórias que inventa" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Passamos também na nossa request, o atributo max_tokens que é nada mais do que uma estimativa de resposta, assim limitamos o tamanho da resposta que será devolvida e economizamos tokens (dinheiro). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O arquivo final de index.js ficará assim: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A função cantada e surpresa devem ser mais fáceis de implementar por conta própria, afinal até a mais dificil foi fácil. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Eu disse que era a mais difícil porque precisamos lidar com argumentos já que você precisa passar o prompt que o usuário vai digitar. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Peça pra alguém te mandar mensagem usando: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Esse texto foi apenas uma apresentação da biblioteca whatsapp-web.js e da api da openai. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tem muita coisa que pode ser melhorada e muita função divertida que pode ser implementada. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Qualquer coisa, dá uma olhada na documentação aqui e veja quais recursos estão disponíveis: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Espero que tenham te agradado pelo menos um pouco, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tamo junto | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||