Paso 3: Configuración básica del bot
- Crea un archivo llamado
main.js
se configura las dependencias.
- Luego, se crean las variables para almacenar el token y help.
Paso 4: Manejar eventos básicos
/start
Este comando se usa para iniciar la interacción con el bot.
/help
Este comando viene predeterminado para la opción de ayuda.
/random
Este comando es personalizado.
- Puedes crear comandos para realizar tareas específicas, en este caso con el comando personalizado
/random
para generar un número aleatorio:
- Primero se define la función random, que genera un número aleatorio entre 0 y un número máximo especificado, y la utiliza en un comando
/random
Recuerda, guarda los cambios y ejecuta el archivo:
Paso 5: Manejar eventos personalizados
En este paso se añaden funcionalidades personalizadas al bot, en este caso: un comando avanzado para generar números aleatorios, la detección de imágenes enviadas por el usuario, y la devolución de una imagen desde el local.
1. Comando avanzado /advancerandom
El comando /advancerandom
permite al usuario generar un número aleatorio dentro de un rango específico. Para usarlo, el usuario escribe el comando seguido de un número, como por ejemplo /advancerandom 50
. El bot verifica si el número ingresado es válido:
- Si el número es menor o igual a 0, o si no es un número, el bot responde con un mensaje explicando cómo usar el comando correctamente.
- Si el número es válido, el bot genera un número aleatorio entre 0 y el número ingresado, y lo devuelve al usuario.
2. Manejo de imágenes enviadas por el usuario
Cuando el usuario envía una foto al bot, este detecta la imagen y guarda una copia en el servidor. Para lograr esto:
- El bot selecciona la última versión de la foto enviada.
- Obtiene un enlace directo al archivo utilizando la API de Telegram.
- Descarga la imagen al servidor en una ubicación predefinida. Finalmente, el bot confirma al usuario que la imagen ha sido recibida correctamente.
3. Devolver una imagen al usuario
El bot /sendphoto
que permite al usuario recibir una imagen específica almacenada en el local. Cuando el comando es ejecutado, el bot envía la imagen predefinida al chat del usuario.
Con este bot ya tienes una base para empezar a experimentar y agregarle más cosas según lo que necesites o quieras probar. También puedes encontrar el tutorial completo en el siguiente link Como crear un bot de Telegram usando JavaScript con NodeJS y la librería Telegraf
Te comparto el código para que puedas explorarlo.
const { Telegraf } = require('telegraf');
const axios = require('axios');
const fs = require('fs');
const { resolve } = require('path');
const { rejects } = require('assert');
const bot = new Telegraf('Tu Api');
const helpMessage = 'Este es un bot de tutorial para codeInProgress'
const downloadImage = (url, image_path, ctx) =>
axios({ url, responseType: 'stream' }).then((response) => {
response.data
.pipe(fs.createWriteStream(image_path))
.on('finish', () => {
ctx.reply('Almacenada correctamente');
resolve();
})
.on('error', (e) => {
ctx.reply('No pude almacenarla correctamente :(');
reject(e);
});
});
function random(number) {
return Math.floor(Math.random() * (number + 1));
}
bot.start((ctx)=>{
ctx.reply('Bienvenido a CodeInProgress')
})
bot.help((ctx)=>{
ctx.reply(helpMessage)
})
bot.command('random', (ctx)=>{
ctx.reply(random(100));
})
bot.command('advancerandom', (ctx)=>{
const message = ctx.update.message.text
const randomNumber = Number(message.split(' ')[1])
if(isNaN(randomNumber) || randomNumber <=8){
ctx.reply('Por favor escribe /advancerandom seguido de un numero mayor de 0, ejemplo: advancerandom 10')
} else{
ctx.reply(random(randomNumber));
}
})
bot.on('photo', (ctx)=>{
const fileid =ctx.update.message.photo.pop().file_id
ctx.telegram.getFileLink(fileid).then((response)=>{
downloadImage(response.href, './photo.jpg', ctx);
})
ctx.reply('Me has enviado una foto')
}
)
bot.command('sendphoto', (ctx)=>{
ctx.replyWithPhoto({source:'resp.webp' })
})
bot.launch()