Chatbot Manga Reader - WhatsApp e Telegram
Criei um chatbot para ler mangás que se conecta com o WhatsApp e com o Telegram, assim é possível ler seus títulos favoritos de qualquer lugar!
A inspiração para esse projeto veio daqui da TabNews, após ler o artigo do Guia completo de como integrar o ChatGPT com Whatsapp 🤖 descobri a Lib Venom Bot e, a partir daí, decidi integrá-la com a API de mangás que eu havia desenvolvido a um tempo.
O objetivo era ter uma forma fácil de ler meus títulos favoritos em um tablet bem velhinho que tenho aqui. Como eu havia desenvolvido um API em Python que realiza o Scrapping de páginas da internet, resolvi reaproveitar esse projeto que estava parado. Nessa API recebo a requisição para um título e qual seria a fonte que preciso realizar a raspagem de dados, se não encontrar os arquivos localmente envio para uma fila SQS. Para popular esse banco de imagens tenho consumers que buscam e inserem em uma pasta, nesse caso fica em um EBS na AWS, já que tudo está hospedado em uma máquina EC2 (free tier).
Exemplo de chamada para a API
curl --location --request GET 'http://localhost:3000/chapter?source=manga_livre&manga=Naruto&number=692'
Mensagem enviada para o SQS apartir do request não encontrado
{
"source": "manga_livre",
"manga": "Naruto",
"chapter": "692"
}
Para esse projeto também configurei uma esteira de CD para subir automaticamente as alterações na API. Posso compartilhar um post aqui no TabNews depois explicando melhor como configurei! Segue o arquivo para quem tiver curiosidade deploy.yml
A ideia inicial era fazer apenas para o WhatsApp então utilizei apenas a lib VenomBot nessa primeira versão, segue o exemplo de como estava:
Só que no caminho tive alguns imprevistos... o número que peguei para o WhatsApp foi bloqueado e até o momento não consegui recadastrar ele...
Decidi adicionar o telegram como uma segunda opção e utilizar ele por enquanto. Foi bem simples porque já existem diversas libs para ele, sem falar que havia feito em python alguns bots anos atrás, mas foi a primeira vez em NodeJS.
Integração Telegram
import TelegramBot from 'node-telegram-bot-api'
import commands from '../utils/commands.js'
import MangaService from './manga.service.js';
export default function startTelegramBot() {
const token = process.env.TELEGRAM_BOT_TOKEN;
const bot = new TelegramBot(token, { polling: true });
bot.onText(/\/mangabot (.+) (.+)/, (msg, request) => {
const chatId = msg.chat.id;
const manga = request[1];
const chapter = request[2];
bot.sendMessage(chatId, `Buscando o capítulo ${chapter} de ${manga}...`);
MangaService.getMangaChapter(manga, chapter, 0).then((pages) => {
if (pages === null || pages.length === 0) {
bot.sendMessage(chatId, "Capítulo sendo baixado ou não encontrado. Aguarde alguns minutos e tente novamente.")
return
}
let i = 0;
function sendNext() {
if (i >= pages.length) return;
let pageNumber = pages[i].split("=").pop()
bot.sendPhoto(
chatId,
pages[i]
).catch((error) => {
console.log(error)
bot.sendMessage(chatId, `Ocorreu um erro ao enviar a página ${pageNumber}. Tente novamente mais tarde.`)
})
i++;
setTimeout(sendNext, 1000); // delay of 1 second
}
sendNext();
}).catch((error) => {
console.log(error)
bot.sendMessage(chatId, "Ocorreu um erro ao buscar o capítulo. Tente novamente mais tarde.")
})
})
bot.onText(/\/help/, (msg) => {
const chatId = msg.chat.id;
// send a message to the chat acknowledging receipt of their message
bot.sendMessage(chatId, "Comandos disponíveis: \n/mangabot [nome do mangá] [número capítulo] \n\n Exemplo: /mangabot Naruto 698");
})
commands.hello.map((command) => {
bot.onText(new RegExp(command, 'i'), (msg) => {
const chatId = msg.chat.id;
// send a message to the chat acknowledging receipt of their message
bot.sendMessage(chatId, "Olá, eu sou o Mangabot! \n\nPara saber os comandos disponíveis, digite /help");
})
})
}
No final ficou assim o desenho: A requisição pode chegar do WhatsApp ou do Telegram e a aplicação NodeJS irá chamar a API de scrapping para pegar as páginas, fazendo retentativas até o consumer finalizar e retornar.
Ainda preciso realizar algumas melhorias no código, mas já está bem legal para uma versão beta test! Espero que gostem!
Seguem os repositórios e o link do bot
- Código do Chatbot - https://github.com/jjeanjacques10/mangajj-chatbot
- Código API de Scrapping - https://github.com/jjeanjacques10/manga-scrapper-api
- Bot Telegram - https://t.me/mangajjbot
Não esqueçam de dar um "star🌟" se curtiram o projeto!
Que projeto legal Jean 👏👏 Uma ideia seria de usar a api que a MangaDex criou também, é um site agregador de grupos de tradução americano, mas que contém muitos mangás em pt-br.
Aqui estaria a documentação caso surgir o interesse: https://api.mangadex.org/docs/
Sensacional jjeanjacques10! Projeto ficou muito bem explicado e completinho, é maravilhoso ver explicações assim aqui no fórum 🥳
seria muito massa se as respostas das requisições viessem em um pdf, para prevenir acabar perdendo a ordem das paginas ou a pessoa queira guardar em outro lugar
Tenho uma empresa que atua com experiências em canais digitais e não tinha pensando em uma jornada como essa, achei mega interessante a aplicação. Talvez só tentaria oferecer uma forma de paginação manual para quem nao quer receber uma porrada de imagens de uma única vez. No mais, achei incrível! Parabéns!
Ficou muito top, parabéns!!!
Projeto massa! Achei bem interessante a ideia e como você explicou o desenvolvimento dele. De forma simples. Acho interessante que a forma que você explicou ajuda muito quem deseja criar um bot para Whatsapp e Telegram. E vendo tanto a possibilidade, como um guia simples, de integração com imagens e outros conteúdos fora respostas simples, o pessoal pode ter ideia para criar muitos outros tipos de bots que os ajudarão no dia a dia, assim como o seu te ajudou a conseguir ler seus mangás de qualquer lugar! Ótimo projeto e ótima publicação!
Que bot incrível, me inspirando muito nos posts do pessoal para voltar a programar! Parabéns!
Parabéns, não apenas pelo projeto mas pelo storyteller que nos proporcionou, ótimo post! Explicando a motivação, e as inspirações! Já deixei as stars :) E pra mim criar um bot do whatsapp era complicado, isso vai me ajudar bastante ;)
o número que peguei para o WhatsApp foi bloqueado e até o momento não consegui recadastrar ele.
Isso foi por causa do uso do Venom Bot?
Que projeto top!!! Posso contribuir com alguma modificação lá no github?
Muito bom, resolver desafios do dia a dia com tecnologia é que faz de nós desenvolvedores de software melhores que qualquer IA por aí rs, meus parabéns.
Curti o projeto, muito bom! Talvez, como sugestão, separar o nome do manga com o capitulo, por exemplo em mangas com nome que contenha mais que uma palavra, colocar todo junto ele não encontra, nem separado pois pega como mais de dois argumentos ou algo assim.
Nossa! Eu tenho que aprender a fazer bot no Telegram. rsrs