Binary Coffee

C贸mo hacer un Bot de Telegram desde cero con Python

bot python telegram

Telegram se ha convertido sin dudas en uno de los l铆deres de las aplicaciones de mensajer铆a m贸vil y una de sus m谩s curiosas caracter铆sticas son los bots. Un bot telegram no es m谩s que un programa comunic谩ndose con los usuarios a trav茅s de la API de Telegram.

En este art铆culo te ense帽aremos como hacer un bot para Telegram desde cero con Python, asumiendo que posees conocimientos b谩sicos de programaci贸n. Este bot se encargar谩 de buscar noticias en internet en consecuencia de lo que el usuario desee, haciendo uso de los servicios que brinda NewsApi.

Paso 1: Crear Bot en Telegram y obtener Token

Lo primero que necesitamos es ir a Telegram y buscar @BotFather. Este bot permite crear otros bots en Telegram, modificar sus datos y lo mas importante obtener el Token de acceso a la API que nos va a permitir crear toda la funcionalidad. Una vez iniciado podemos ver las opciones.

  • /newbot 鈥 para crear un nuevo bot
  • /token 鈥 para generar el token
  • /revoke 鈥 revocar acceso al token
  • /setname 鈥 cambiar el nombre del bot
  • /setdescription 鈥 cambiar la descripci贸n del bot
  • /setabouttext 鈥 cambiar el texto 鈥渁bout me鈥
  • /setuserpic 鈥 cambiar la foto de perfil
  • /setcommands 鈥 establece los comandos del bot
  • /deletebot 鈥 eliminar un bot

Seleccionamos /newbot y nos pedir谩 el nombre y el usuario y luego nos dar谩 el Token. Decir que este no se lo debes ense帽ar a nadie.

Una vez obtenido el token podemos verificar que se ha creado exitosamente accediendo a https://api.telegram.org/bot**Token**/getme. Recuerda este link es solo para verificar, mantenlo seguro.

Paso 2: Obtener API_Key de NewsAPI

NewsAPI es un servicio de noticias que integra m谩s de 30 000 medios de prensa de una gran variedad de idiomas, permite buscar noticias por t铆tulo, fecha, medio, idioma, tema, etc. Es totalmente gratis para desarrolladores solo tenemos que ir a la p谩gina y dar en obtener Get API key.

Paso 3: Crear base del bot

Para este paso necesitamos tener python 3.7 instalado en nuestra PC, el cual se puede descargar desde su p谩gina oficial o seguir nuestro tuto sobre C贸mo instalar Python. Una vez lo tengamos instalado agregamos las siguientes dependencias.

Python-Telegram-Bot es una interfaz para la API de bots de Telegram, lo que nos permitir谩 consumir los servicios de una manera m谩s sencilla.

  • pip install python-telegram-bot

NewsAPI-Python es una interfaz para consumir los servicios de NewsAPI desde python.

  • pip install newsapi-python

Copiamos el siguiente c贸digo a un archivo bot.py.

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from newsapi import NewsApiClient

#Creamos un archivo env.py para guardar nuestras credenciales
from env import NEWS_API_KEY, BOT_KEY

#Creamos la intefaz con la API de Noticas.
newsapi = NewsApiClient(api_key=NEWS_API_KEY)


def start(update, context):
    # Configuramos el comando start para enviar un mensaje de bienvenida
    update.message.reply_text('Bienvenido, escribe algo para comenzar a buscar noticias.')


def help(update, context):
    # Configuramos el comando help para enviar un mensaje con instrucciones
    update.message.reply_text('Hola escriba algunas palabras clave para empezar a buscar noticias en la web.')


def echo(update, context):
    # Configuramos para enviar un mensaje con el texto que envi贸 el usuario, aqu铆 es donde va a ir toda la l贸gica de nuestro bot
    update.message.reply_text(update.message.text)


def main():
    # Creamos el Updater y le pasamos el token de nuestro bot. Este se encargar谩 de manejar las peticiones de los usuarios.
    updater = Updater(BOT_TOKEN, use_context=True)

    # Obtenemos el Dispatcher para crear los comandos
    dp = updater.dispatcher

    # Creamos el comando /start y definimos que se ejecute este mismo m茅todo
    dp.add_handler(CommandHandler("start", start))
    # Creamos el comando /help y definimos que se ejecute el m茅todo help
    dp.add_handler(CommandHandler("help", help))

    # De no ejecutarse ninguno de los anteriores asumimos que el usuario escribi贸 algo y ejecutamos el m茅todo echo que nos va a permitir obtener los campos de las b煤squedas del usuario
    dp.add_handler(MessageHandler(Filters.text, echo))

    updater.start_polling()

    updater.idle()


if __name__ == '__main__':
    main()

Ahora abrimos la consola, ejecutamos python3 bot.py y vamos a Telegram y buscamos nuestro bot, al ejecutar alguna de las acciones que definimos anteriormente recibiremos una respuesta del mismo.

Paso 4: Buscar las noticias

Como hab铆amos dicho anteriormente el m茅todo echo se encargar铆a de buscar las noticias, pues ahora lo que toca es programarlo, puedes encontrar la documentaci贸n y cientos de ejemplos en NewsAPI.

def echo(update, context):
    all_articles = newsapi.get_everything(
        #q va a ser el texto que queremos buscar, en este caso lo que introdujo el usuario
        q=update.message.text,
        #sources son los medios en los que queremos buscar, en la documentaci贸n aparecen todos
        sources='bbc-news,the-verge,abc-news-au,bbc-sport,bloomberg,crypto-coins-news,engadget,espn,national-geographic',
        #definimos tambi茅n el lenguaje y ordenamos por relevancia
        language='en',
        sort_by='relevancy'
        )
    # Puede darse el caso de que obtengamos cientos de resultados, y seria inc贸modo para el usuario tener tantas noticias as铆 que nos quedamos con las 煤ltimas 3 y las mandamos
    for i in all_articles['articles'][:3]:
        update.message.reply_text("%s\n\n%s" % (i['source']['name'], i['url']))
    # En caso de que no se encuentren resultados le avisamos al usuario
    if len(all_articles['articles']) == 0:
        update.message.reply_text('No se han encontrado noticias relacionadas. Intente simplificar lo que desea con palabras clave.')

Ahora volvemos a correr el bot en la consola y ya podemos buscar. El bot estar谩 online siempre y cuando lo est茅 tu PC por lo que te recomiendo que busques servicios como PythonAnyWhere y Heroku en los que pueden montarlo de forma gratuita para que siempre est茅 online.

Si no sabes programar no importa existen otras buenas opciones para crear tu bot, un ejemplo de ellas son @ManyBot y @ChatFuel.

Puedes decargar el c贸digo entero desde GitHub si茅ntete libre de hacer fork y experimentar, incluso puedes contribuir si as铆 lo deseas.

Keep calm and drink a Binary Coffee!

Opiniones
noavatar
@noMoreMona Claro nosotros desarrollamos uno para mandar las actualizaciones a nuestro canal. Puedes revisar en https://github.com/dcs-community/binarycoffee_bot y https://gist.github.com/raulcr98/393c843ef9baef36b474124021823082. Debes tener el nombre usuario claro, si es un grupo o canal debes agregar al bot como administrador del mismo. Si en cambio es un usuario debe haber iniciado el bot anteriormente. Saludos espero te ayude.
noavatar
Muy buen art铆culo, me ayud贸 mucho. Sabes como podr铆a hacer un bot para enviar mensajes a un canal, grupo o usuario?