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.
|
TelegramDemo |
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!