En este artículo vamos a ver cómo crear un bot de Telegram usando Python.
En los últimos tiempos, Telegram se ha convertido en una de las plataformas de mensajería e intercambio de contenido más utilizadas, no tiene límite para compartir archivos como Whatsapp y viene con algunos bots preinstalados que se pueden usar en cualquier canal (grupos en el caso de WhatsApp) para controlar el comportamiento o filtrar los mensajes de spam enviados por los usuarios.
Requisitos
- Una cuenta de Telegram: si no tiene instalada la aplicación Telegram, simplemente descárguela de Play Store. Después de descargar, cree una cuenta usando su número de teléfono móvil como WhatsApp.
- . Módulo python-telegram-bot: aquí necesitaremos un módulo llamado python-telegram-bot . Esta biblioteca proporciona una interfaz Python pura para la API de Telegram Bot. Es compatible con las versiones de Python 3.6.8+. Además de la implementación de API pura, esta biblioteca presenta una serie de clases de alto nivel para que el desarrollo de bots sea fácil y directo. Estas clases están contenidas en el submódulo «telegram.ext». Para obtener más información, puede consultar su repositorio oficial de GitHub.
Instalación del módulo
Podemos instalar este módulo a través de pip y conda con el siguiente comando.
# installing via pip pip install python-telegram-bot # installing via conda conda install -c conda-forge python-telegram-bot
Pasos para crear tu primer bot
Paso 1: después de abrir una cuenta en Telegram, en la barra de búsqueda en la parte superior, busque «BotFather»
Paso 2: Haga clic en ‘BotFather’ (primer resultado) y escriba /newbot
Paso 3: Asigne un nombre único a su bot. Después de nombrarlo, Botfather le pedirá su nombre de usuario. Luego, también proporcione un nombre único, PERO recuerde que el nombre de usuario de su bot debe terminar con el bot, como my_bot, hellobot, etc.
Paso 4: después de dar un nombre único y si se acepta, recibirá un mensaje como este:
Aquí el valor del token será diferente para usted, usaremos este token en nuestro código python para hacer cambios en nuestro bot y hacerlo como queremos, y agregarle algunos comandos.
Implementar paso a paso
Paso 1: Importación de las bibliotecas necesarias
Python3
from telegram.ext.updater import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext.commandhandler import CommandHandler from telegram.ext.messagehandler import MessageHandler from telegram.ext.filters import Filters
Breve uso de las funciones que estamos importando:
- Actualizador: Contendrá la clave API que obtuvimos de BotFather para especificar en qué bot estamos agregando funcionalidades para usar nuestro código python.
- Actualización: esto se invocará cada vez que un bot reciba una actualización, es decir . mensaje o comando y enviará al usuario un mensaje.
- CallbackContext: no usaremos su funcionalidad directamente en nuestro código, pero cuando agreguemos el despachador, es necesario (y funcionará internamente)
- CommandHandler: esta clase de controlador se usa para manejar cualquier comando enviado por el usuario al bot, un comando siempre comienza con «/», es decir, «/ iniciar», «/ ayuda», etc.
- MessageHandler: esta clase de controlador se usa para manejar cualquier mensaje normal enviado por el usuario al bot,
- Filtros: esto filtrará texto normal, comandos, imágenes, etc. de un mensaje enviado.
Paso 2: Definir funciones para la operación
Función de inicio: mostrará la primera conversación, puede nombrarla de otra manera, pero el mensaje que contiene se enviará al usuario cada vez que presione ‘iniciar’ al principio.
Python3
updater = Updater("your_own_API_Token got from BotFather", use_context=True) def start(update: Update, context: CallbackContext): update.message.reply_text( "Enter the text you want to show to the user whenever they start the bot")
Básicamente, en el mensaje de inicio, debe agregar algo como «Hola, bienvenido al bot», etc.
Función de ayuda: es básicamente en esta función que debe agregar cualquier tipo de ayuda que el usuario pueda necesitar, es decir, todos los comandos que entiende su bot, la información relacionada con el bot, etc.)
Python3
def help(update: Update, context: CallbackContext): update.message.reply_text("Your Message")
Agregando algunas funcionalidades más al Bot.
Python3
def gmail_url(update: Update, context: CallbackContext): update.message.reply_text("gmail link here") def youtube_url(update: Update, context: CallbackContext): update.message.reply_text("youtube link") def linkedIn_url(update: Update, context: CallbackContext): update.message.reply_text("Your linkedin profile url") def geeks_url(update: Update, context: CallbackContext): update.message.reply_text("GeeksforGeeks url here") def unknown_text(update: Update, context: CallbackContext): update.message.reply_text( "Sorry I can't recognize you , you said '%s'" % update.message.text) def unknown(update: Update, context: CallbackContext): update.message.reply_text( "Sorry '%s' is not a valid command" % update.message.text)
Aquí hemos agregado 4 funciones, una para abrir Gmail, una para youtube, una para LinkedIn y la última para GeeksforGeeks. Estas no son funciones OBLIGATORIAS , puede agregar cualquier tipo de función y su texto de respuesta como desee, son solo para demostración. Aquí, la función unknown_text enviará el mensaje escrito en su interior cada vez que reciba algunos mensajes desconocidos y la función unknown filtrará todos los comandos desconocidos enviados por el usuario y responderá al mensaje escrito en su interior.
Paso 3: agregar los controladores para manejar nuestros mensajes y comandos
Python3
updater.dispatcher.add_handler(CommandHandler('start', start)) updater.dispatcher.add_handler(CommandHandler('youtube', youtube_url)) updater.dispatcher.add_handler(CommandHandler('help', help)) updater.dispatcher.add_handler(CommandHandler('linkedin', linkedIn_url)) updater.dispatcher.add_handler(CommandHandler('gmail', gmail_url)) updater.dispatcher.add_handler(CommandHandler('geeks', geeks_url)) updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown)) updater.dispatcher.add_handler(MessageHandler( # Filters out unknown commands Filters.command, unknown)) # Filters out unknown messages. updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown_text))
Aquí, cada línea sugiere que cada vez que un usuario escribe un comando, es decir, el primer parámetro de CommandHandler en respuesta, el usuario recibe el mensaje escrito dentro de la función mencionada en el siguiente parámetro.
Paso 4: ejecutar el bot
Python3
updater.start_polling()
Aquí, cada vez que comencemos a sondear, el bot estará activo y buscará cualquier mensaje nuevo enviado por cualquiera de los usuarios y, si coincide con el comando especificado allí, responderá en consecuencia.
A continuación se muestra la implementación completa:
Python3
from telegram.ext.updater import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext.commandhandler import CommandHandler from telegram.ext.messagehandler import MessageHandler from telegram.ext.filters import Filters updater = Updater("your_own_API_Token got from BotFather", use_context=True) def start(update: Update, context: CallbackContext): update.message.reply_text( "Hello sir, Welcome to the Bot.Please write\ /help to see the commands available.") def help(update: Update, context: CallbackContext): update.message.reply_text("""Available Commands :- /youtube - To get the youtube URL /linkedin - To get the LinkedIn profile URL /gmail - To get gmail URL /geeks - To get the GeeksforGeeks URL""") def gmail_url(update: Update, context: CallbackContext): update.message.reply_text( "Your gmail link here (I am not\ giving mine one for security reasons)") def youtube_url(update: Update, context: CallbackContext): update.message.reply_text("Youtube Link =>\ https://www.youtube.com/") def linkedIn_url(update: Update, context: CallbackContext): update.message.reply_text( "LinkedIn URL => \ https://www.linkedin.com/in/dwaipayan-bandyopadhyay-007a/") def geeks_url(update: Update, context: CallbackContext): update.message.reply_text( "GeeksforGeeks URL => https://www.geeksforgeeks.org/") def unknown(update: Update, context: CallbackContext): update.message.reply_text( "Sorry '%s' is not a valid command" % update.message.text) def unknown_text(update: Update, context: CallbackContext): update.message.reply_text( "Sorry I can't recognize you , you said '%s'" % update.message.text) updater.dispatcher.add_handler(CommandHandler('start', start)) updater.dispatcher.add_handler(CommandHandler('youtube', youtube_url)) updater.dispatcher.add_handler(CommandHandler('help', help)) updater.dispatcher.add_handler(CommandHandler('linkedin', linkedIn_url)) updater.dispatcher.add_handler(CommandHandler('gmail', gmail_url)) updater.dispatcher.add_handler(CommandHandler('geeks', geeks_url)) updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown)) updater.dispatcher.add_handler(MessageHandler( Filters.command, unknown)) # Filters out unknown commands # Filters out unknown messages. updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown_text)) updater.start_polling()
Producción:
Publicación traducida automáticamente
Artículo escrito por dwaipayan_bandyopadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA