Primeros pasos creando un bot de Telegram con Python

Primeros pasos creando un bot de Telegram con Python

En este post os daremos una pequeña introducción sobre como crear un bot de Telegram usando Python y la lista de herramientas que necesitamos.

En este caso usaremos Python 3, el 2 no se recomienda usar debido a que está quedando obsoleto y este ya no tiene soporte. En mi caso, para mi entorno de desarrollo utilizo una Raspberry Pi, esta cuenta con el sistema operativo raspiOS de base. Vosotros podéis usar cualquier equipo/pc ya sea Windows, Linux o MacOs.

No he comentado nada de la sintaxis ni el código de Python, lo que se utilizará es muy básico (variables, funciones, etc).


Documentación


Requisitos


Instalación

El primer paso que debemos realizar después de tener instaldo Python 3 y pip3 es instalar el paquete python-telegram-bot que nos facilitará la comunicación con los servidores de telegram.

Existen diferentes librerías, podéis buscar alternativas. Además en el caso de que solo tengáis instalado Python 3 no es necesario poner el 3 detrás de pip.

sudo pip3 install python-telegram-bot

📝 Nota: Esta librería se instala de forma global, os dejamos una explicación a continuación por si queréis instalarla solo dentro del proyecto en cuestión.

Instalación manual

Si queréis instalar el paquete manualmente debéis ir al repositorio de esa librería y bajarlo a vuestra carpeta, para ello debemos tener git instalado en nuestro equipo y ejecutar los siguientes comandos en la terminal:

git clone https://github.com/python-telegram-bot/python-telegram-bot --recursive
cd python-telegram-bot
sudo python3 setup.py install

En este caso tenemos que poner nuestro bot dentro de esta carpeta para que pueda encontrar la librería

¿Como actualizo la librería?

Actualizar esta librería es tan simple como ejecutar el siguiente comando en una terminal:

sudo pip3 install -U python-telegram-bot

📝 Nota: En el caso que hiciéramos la instalación manual simplemente sería repetir ese proceso para poder tenerla actualizada


Creando el bot

Una vez tenemos todo instalado creamos un fichero donde comenzaremos a desarrollar nuestro bot. Podéis usar cualquier editor de texto o IDE, eso ya lo dejo al gusto de cada uno. Lo importante es el contenido.

A continuación os dejo un ejemplo con la configuración mínima para comenzar con el desarrollo de nuestro bot, el nombre del fichero será "tecnonucleous.py":

# -*- coding: utf-8 -*-

from telegram.ext import (Updater, CommandHandler)

def start(update, context):
	''' START '''
	# Enviar un mensaje a un ID determinado.
	context.bot.send_message(update.message.chat_id, "Bienvenido")

def main():
	TOKEN="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
	updater=Updater(TOKEN, use_context=True)
	dp=updater.dispatcher

	# Eventos que activarán nuestro bot.
	dp.add_handler(CommandHandler('start',	start))

	# Comienza el bot
	updater.start_polling()
	# Lo deja a la escucha. Evita que se detenga.
	updater.idle()

if __name__ == '__main__':
	main()


Ejecutar

Antes de ejecutar el proyecto debemos hacer una pequeña comprobación, gracias a esta pequeña comprobación evitaremos posibles problemas que os pudiera dar el código de ejemplo en el caso de tener una versión antigua de Python.

¿Comprobar que versión de Python tengo?

Para comprobar que versión tengo instala simplemente debemos ejecutar los siguientes comandos, los resultados pueden variar pero lo importante es que en el comando de Python 3 nos salga la versión 3.X.X

python -V
# Python 2.7.16

python3 -V
# Python 3.7.3 (Usaremos la versión 3)

Una vez tenemos el fichero creado, con el nombre que queramos, y sabemos la versión de Python que tenemos instalada pondremos nuestro bot en funcionamiento empleando el siguiente comando (lo nombramos como "tecnonucleous.py"):

python3 tecnonucleous.py

En el caso que nos fuera todo bien veremos por pantalla un mensaje similar al siguiente:

user@host:~ $ python3 tecnonucleous.py
[Nombre del bot] Start...
2021-04-03 21:41:39,360 - apscheduler.scheduler - INFO - Scheduler started

Ejemplo completo

Aquí os dejo un ejemplo basado en el anterior pero con un comando más añadido llamado /coin y añado el log, esto nos sirve para ver los posibles fallos que nos devuelta la API de bot de Telegram. En el caso de que el fallo lo tengáis en vuestro código en python el bot no llegará a ejecutarse.

# -*- coding: utf-8 -*-
'''
Bot para telegram
'''
import random
from telegram import (ParseMode)
from telegram.ext import (Updater, CommandHandler)

# [Opcional] Recomendable poner un log con los errores que apareceran por pantalla.
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO)
logger = logging.getLogger(__name__)
def error_callback(update, context):
    logger.warning('Update "%s" caused error "%s"', update, context.error)

def start(update, context):
	''' START '''
	# Enviar un mensaje a un ID determinado.
	context.bot.send_message(update.message.chat_id, "Bienvenido", parse_mode=ParseMode.HTML)

	# Podemos llamar a otros comandos, sin que se haya activado en el chat (/help).
	coin(update, context)
def coin(update, context):
	''' ⚪️/⚫️ Moneda 
	Genera un número elatorio entre 1 y 2.
	'''
	cid=update.message.chat_id
	msg="⚫️ Cara" if random.randint(1,2)==1 else "⚪️ Cruz"
	# Responde directametne en el canal donde se le ha hablado.
	update.message.reply_text(msg)

def main():
	TOKEN="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
	updater=Updater(TOKEN, use_context=True)
	dp=updater.dispatcher

	# Eventos que activarán nuestro bot.
	# /comandos
	dp.add_handler(CommandHandler('start',	start))
	dp.add_handler(CommandHandler('coin',	coin))

	dp.add_error_handler(error_callback)
    # Comienza el bot
	updater.start_polling()
    # Lo deja a la escucha. Evita que se detenga.
	updater.idle()

if __name__ == '__main__':
	print(('[Nombre del bot] Start...'))
	main()

Notas

Este post es un primer contacto con la librería y conforme vayas avanzando podrás descubrir un sin fin de posibilidades. Si puedes imaginarlo, puedes programarlo.