Underc0de

Programación Scripting => Python => Mensaje iniciado por: blackdrake en Abril 01, 2018, 07:09:48 AM

Título: Desarrollando BOTs para Telegram - Parte 2
Publicado por: blackdrake en Abril 01, 2018, 07:09:48 AM
(https://telegram.org/file/811140614/2/flKQKZ7xUOE.27938.gif/5574a04570218c9e11)

Buenas!

Bienvenidos a la segunda parte de desarrollos de BOTs para Telegram en Python, si no habéis leído la parte uno os lo dejo aquí, pues es obligatoria: https://underc0de.org/foro/python/desarrollando-bots-para-telegram-parte-1/

Dicho esto, comezamos!

Es importante mencionar que yo he escogido Python, pero podéis elegir cualquier lenguaje de programación, hay librerías prácticamente en cualquier lenguaje y si no, siempre podéis atacar contra la propia API de telegram, aunque sea más tedioso.

1) Antes de nada, debemos elegir la libreria que vamos a utilizar, yo he utilizado estas dos, y ambas tienen sus pros y sus contras, así que os dejo que trasteéis con ellas y elijáis la que prefiráis (luego veremos ejemplos en cada una de ellas).

En mi caso son pyTelegramBotAPI (https://github.com/eternnoir/pyTelegramBotAPI) y python-telegram-bot (https://github.com/python-telegram-bot/python-telegram-bot)

Para su instalación sobra con seguir el readme correspondiente, por lo general sobra con hacer un pip install o un git clone y su correspondiente python setup.


Interactuando con el BOT

A continuación os dejo dos fragmentos de código con los que podréis interactuar con vuestro BOT en Telegram para cada una de las librerías mencionadas anteriormente.

pyTelegramBotAPI
Código (python) [Seleccionar]
import telebot
from telebot import types

bot = telebot.TeleBot("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") #Introducir el token que nos devolvió BOTFather

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Hello World Underc0de!")

bot.polling()


El siguiente código hace que el bot permanezca a la espera y si recibe el comando /start o el comando /help entrará en la función send_welcome respondiendo a nuestro mensaje (reply_to message) Hello World Underc0de!

(https://i.imgur.com/mOakd8B.png)

Ahora que ya podemos interactuar con nuestro bot, vamos a establecer un nivel de loggeo, para monitorizar sus actividades.

Para ello simplemente debemos añadir las siguientes líneas.

Código (python) [Seleccionar]
import telebot
from telebot import types
import logging #Importamos loggin

#Establecemos el logeo
logging.basicConfig(filename='log.log',filemode='a',format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO) #Seteado nivel a Informativo, hay varios niveles
logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG) # Debug Mensajes en Consola


bot = telebot.TeleBot("XXXXXXXXXXXXXXXXXXXXXX")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Hello World Underc0de!")

bot.polling()


Con esto, cada vez que el bot recibe un mensaje, lo logueará tanto en el fichero como por consola:

(https://i.imgur.com/BvGxszU.png)

Como se puede ver en la imagen anterior, nos devuelve campos muy interesantes, tales como la persona que ha escrito al bot, el comando enviado, y la respuesta enviada por el bot.

python-telegram-bot
De manera similar a la anterior libreria configuramos el bot.

Código (python) [Seleccionar]

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import logging
import telegram

#Establecemos el logeo
logging.basicConfig(filename='log.log',filemode='a',format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO)
logger = logging.getLogger(__name__)

#Funcion start
def start(bot, update):
    update.message.reply_text('Hi! Underc0de')
    logger.info("Msg de %s - %s",bot,update) #Loggeamos la informacion


#Funcion main
def main():
    updater = Updater("XXXXXXXXXXXXXXXXXXXXXXXX") #NUESTRO TOKEN

    dp = updater.dispatcher

    #Comandos contemplados
    dp.add_handler(CommandHandler("start", start))

    #Si no tenemos el comando contemplado, lo devolvemos por pantalla
    dp.add_handler(MessageHandler(Filters.text, echo))

    #Loggeamos errores
    dp.add_error_handler(error)

    #Inciamos el bot
    updater.start_polling()

    #Ejecuta el bot hasta que presionemos Ctrl + C o el proceso reciba SIGINT,  SIGTERM o SIGABRT
    updater.idle()


if __name__ == '__main__':
    main()


Como se puede observar, el bot es parecido y la forma de funcionar es la misma.

Ejemplo de funcionamiento:
(https://i.imgur.com/VdjIdXI.png)

Ejemplo de loggeo:
(https://i.imgur.com/jpEkstd.png)

¿Y lo bueno de todo esto?

Es que realmente todo corre bajo python, por lo que podemos hacer todo lo que queramos y simplemente que el bot nos devuelva el resultado de la operación vía telegram. Un ejemplo es el siguiente, consulta del buscador del blog a través del bot :)

(https://i.imgur.com/XRyIGyv.png)

Un saludo y nos vemos en la próxima :D
Título: Re:Desarrollando BOTs para Telegram - Parte 2
Publicado por: Drezan en Junio 07, 2018, 05:28:02 PM
Hola, blackdrake. Gracias por los tutoriales, están geniales.

Una pregunta, si quisiera hacer un bot tipo "Simsimi" para Telegram, qué librería o funciones debo acudir?