Bots de Telegram mediante Python

Hace un tiempo en este post explicaba cómo se podía registrar y desarrollar un bot básico para Telegram. El problema que me he encontrado recientemente es que la librería que utilizaba tenía varios problemas, así que he estado revisando y he encontrado algo mas decente y relativamente actualizado. Se trata de la librería python-telegram-bot.

Para su instalación utilizaremos pip:

$ pip install python-telegram-bot
$ python bot.py

Vamos a por el código!!!. El tema cambia un poco respecto al de Telebot, pero es bastante sencillo de adaptar e implementar. Vamos a ver un ejemplo sencillo.

Vamos a necesitar importar los siguientes componentes:
telegram es obvio y luego vamos a utilizar las extensiones de la clase principal para utilizar Updater y CommandHandler que nos van a permitir poder gestionar las peticiones de comandos cuando actualicemos el chat

import telegram
from telegram.ext import Updater
from telegram.ext import CommandHandler

Ahora declaramos nuestro bot mi_bot y nuestro gestor de actualizaciones mi_bot_updater, ambos a partir del TOKEN de autenticación

TOKEN = '<AQUI_TU_TOKEN_BOT_GENERADO_CON_@BOTFATHER'

#Creamos nuestra instancia "mi_bot" a partir de ese TOKEN
mi_bot = telegram.Bot(token=TOKEN)
mi_bot_updater = Updater(mi_bot.token)

Ahora vamos a definir un par de funciones que nos van a servir para gestionar dos comandos:

  • /start: Que se ejecutará al iniciar una conversación nueva
  • /?: Que mostrará la ayuda de nuestro bot.

Cómo parámetros a estas dos funciones vamos a pasarles la instancia de nuestro bot y nuestro gestor de actualizaciones mi_bot_updater. No sería necesario en estos casos porque por defecto a utilizar la propia instancia, pero creo que así se entiende mejor:

# Handle para el incio de la conversacion /start
def start(bot=mi_bot, update=mi_bot_updater):
    print "Iniciada conversación: "
    print update.message.chat_id
    bot.sendMessage(chat_id=update.message.chat_id, text="Hola, soy tu bot!!!")

# Handle para la ayuda /?
def ayuda(bot=mi_bot, update=mi_bot_updater):
    print "Solicita ayuda"
    bot.sendMessage(chat_id=update.message.chat_id, text="No tengo mucho que ofrecerte por ahora")

Una vez definidas las funciones que van a gestionar nuestros comandos vamos a "darlas de alta" en el gestor de comandos:

#Definimos para cada comando la función que atendera la peticion
start_handler = CommandHandler('start', start)
ayuda_handler = CommandHandler('?', ayuda)

Ahora vamos "a unir" nuestro gestor de comandos, con nuestro gestor de actualizaciones, para ello utilizamos un dispatcher, al cual le vamos a definir nuestros comandos:

dispatcher = mi_bot_updater.dispatcher

dispatcher.add_handler(start_handler)
dispatcher.add_handler(ayuda_handler)

Bien, pues ya estamos casi al final, únicamente hay que lanzar nuestro gestor de actualizaciones del chat y a correr!!!

mi_bot_updater.start_polling()

while True: #Ejecutamos nuestro programa por siempre
    pass

Si vamos a Telegram y buscamos nuestro bot, con este ejemplo tendríamos algo como esto:


En la parte del bot y a título informativo, simplemente veremos información cuando se ejecute uno de los comandos ya que en las funciones hemos puesto un print

Por defecto los métodos de python-telegram-bot no muestran nada por pantalla, así que he puesto algunas salidas por consola para tener cierta traza de lo que va haciendo.