[Tech]Creando un bot para Telegram

Hace unos días en un grupo de Telegram salió la idea de crear un bot a raíz de un pequeño fallo que tiene la aplicación. La administración de grupos de Telegram no es del todo buena ya que solo puede haber un admnistrador pero este admin no puede, al menos por ahora, nombrar a otra persona mas como administrador como para que haya 2 y si es un grupo grande haya un poco de moderación para que no se desbande todo. Esto en Whatsapp es totalmente funcional y común cosa que en Telegram no pasa y por esto tuvimos que mudar un grupo completo a otro porque cuando admin que estaba se fue, el que quedó asignado (por decisión de Telegram al azar, según tengo entendido) no era para nada activo, por ende, alrededor de 45 personas tuvimos que mudarnos.

NOTA DE ACTUALIZACION #1: Esto ya no pasa ya que Telegram se ha actualizado y ya se puede tener mas de un administrador seleccionado en el grupo. Como esto lo escribi hace tiempo tengo que hacer esta aclaracion.

Por esto empezó el tema de la creación de bot, para ver si podíamos de alguna manera u otra darle permisos de administrador a alguien mas por medio de este bot. Como estaba con un poco de tiempo me puse a investigar y al cabo de un rato concluímos que ese bot no puede crearse ya que la API de Telegram no permite hacer eso.

A todo esto yo ya había armado el bot y lo estaba preparando para tirarle código y empezar. De esta manera me encontré con un bot que no hacía nada y sobretodo que no hacía lo que habíamos pensado que haría, asi que aproveché y empecé a investigar un poco mas la API de bots de Telegram y decidí darle un uso al bot por lo menos para hacer algunas bromas en el grupo como crear el comando /windowsero y que salga una imagen de Linus Torvalds haciendo el famoso “fuck you nvidia”.

fuckyounvidia

NOTA DE ACTUALIZACION #2: Me habia olvidado un paso super importante, instalar la API de Telegram en nuestro VPS o PC o donde vamos a ejecutar el bot. Tenemos 2 formas de hacerlo (Las comillas dobles omitirlas al igual que el signo $, solo esta para indicar que se tiene que hacer desde la terminal):

  1. A traves del repositorio de Github:
    ” $ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
    ” $ cd pyTelegramBotAPI
    ” $ python setup.py install
  2. O utilizando la herramienta de instalacion de Python:
    ” $ pip install pyTelegramBotAPI

Buscando por la web encontré un ejemplo de bot que me vino de maravilla pero eso lo dejo para mas adelante. Primero les explico los pasos que hay que seguir:

  1. Crear el bot desde Telegram: En nuestro Telegram vamos a crear el bot con su nombre, su nick, una descripcion del mismo y algunas configuraciones opcionales. Para esto tenemos que entablar una conversacion con @BotFather, un bot el cual con una serie de comandos vamos a lograr esto. Para ver todos los comandos disponibles escribimos /help.
    BotFather nos respondera con el siguiente mensaje:
    They call me the Botfather, I can help you create and set up Telegram bots. Please read this manual before we begin:
    https://core.telegram.org/botsYou can control me by sending these commands:/newbot – create a new bot
    /token – generate authorization token
    /revoke – revoke bot access token
    /setname – change a bot’s name
    /setdescription – change bot description
    /setabouttext – change bot about info
    /setuserpic – change bot profile photo
    /setcommands – change bot commands list
    /setjoingroups – can your bot be added to groups?
    /setprivacy – what messages does your bot see in groups?
    /deletebot – delete a bot
    /cancel – cancel the current operation
    Entonces con el comando /newbot empezaremos a crearlo. La creacion es totalmente interactiva, en ingles, pero no es problema porque las cosas que pide el BotFather para la creacion son totalmente entendibles.
  2. Una vez que tengamos nuestro bot creado (creado en el sentido de creacion por parte de Telegram, es decir, en ese momento es un bot que no hace absolutamente nada), BotFather nos dara un Token el cual es el que usaremos para poder vincular nuestro codigo fuente de programacion con el bot en cuestion creado. Este token puede tanto revocarse como crear uno nuevo en el caso que lo hayamos perdido o nos hayan querido controlar el bot porque accedieron a nuestro token de alguna forma.
  3. Ahora solo resta programar el bot. El lenguaje a utilizar es Python pero tengo entendido que en PHP tambien se puede hacer (es lo que escuche, no tengo la certeza). Claro, pero ustedes querran saber que puede hacer o no el bot, o como se tiene que programar, bueno, en la pagina de Telegram, mas precisamente en el apartado de su API, nos muestran todas las funciones que puede hacer el bot.

Les dejo un pequeño ejemplo de codigo en Python con algunas funciones que puede hacer el bot (para ver el codigo completo podes ir a mi GitHub):

# -*- coding: utf-8 -*-
import telebot # Librería de la API del bot.
from telebot import types # Tipos para la API del bot.
import time # Librería para hacer que el programa que controla el bot no se acabe.
import random
import datetime

TOKEN = ‘ACA VA EL TOKEN’ # Nuestro token del bot (el que @BotFather nos dió).

bot = telebot.TeleBot(TOKEN) # Creamos el objeto de nuestro bot.
#############################################
#Listener
def listener(messages): # Con esto, estamos definiendo una función llamada ‘listener’, que recibe como parámetro un dato llamado ‘messages’.
for m in messages: # Por cada dato ‘m’ en el dato ‘messages’
cid = m.chat.id # Almacenaremos el ID de la conversación.
if m.content_type == ‘text’:
print “[” + str(cid) + “]: ” + m.text # Y haremos que imprima algo parecido a esto -> [52033876]: /start

bot.set_update_listener(listener) # Así, le decimos al bot que utilice como función escuchadora nuestra función ‘listener’ declarada arriba.
#############################################
#Funciones
@bot.message_handler(commands=[‘kick’]) # Indicamos que lo siguiente va a controlar el comando.
def command_kick(m): # Definimos una función que resuelva lo que necesitemos.
cid = m.chat.id # Guardamos el ID de la conversación para poder responder.
bot.send_photo( cid, open( ‘kick.jpg’, ‘rb’)) # Con la función ‘send_photo()’ del bot, enviamos al ID de la conversación que hemos almacenado previamente la foto

@bot.message_handler(commands=[‘help’])
def command_ayuda(m):
cid = m.chat.id # Guardamos el ID de la conversación para poder responder.
bot.send_message( cid, “Comandos Disponibles: /hola /hello /kick /uppercut /hadouken /windowsero /nsa /attack /gentoo /flame /vicman /deletethat /roll /time /blogroll /tuxamigos /acerca /help”)

@bot.message_handler(commands=[‘roll’])
def command_roll(m):
cid = m.chat.id
bot.send_message( cid, random.randint(1,6) )

#############################################
#Peticiones
bot.polling(none_stop=True) # Con esto, le decimos al bot que siga funcionando incluso si encuentra algun fallo.

El ejemplo que estoy mostrando basicamente hace 3 cosas, el primer ejemplo (comando /kick) manda una imagen (en este caso de alguien pateando), el segundo ejemplo es la respuesta al comando /help en el que nos indicara los comandos disponibles que tiene el bot (estos se van agregando a mano) y el tercer ejemplo es haciendo uso de la instruccion random.randint de Python la cual (previamente configurada) con el comando /roll nos dara el resultado de la tirada de un dado de 6 caras (en este caso pero pueden ser mas).

Si queres que tu bot mande cualquier otro mensaje u otra imagen, solo es cuestion de copiar y pegar el comando, modificarle el nombre de la funcion, el nombre del comando (obviamente no puede haber dos iguales) y el nombre de la imagen, en el caso del ejemplo, a enviar. Acordate que en el apartado oficial de la API de Telegram que te deje mas arriba, tenes todas las funciones que podes hacer con el bot creado. Desde un juego hasta un servicio social.

kick

Seguramente te preguntaras donde esta alojado el bot para que funcione. Bueno, yo te puedo dar 2 ejemplos para poder utilizar el bot:

  1. Podes tenerlo alojado en tu propia PC, ordenado en una carpeta con el codigo, las imagenes que mandas dependiendo el comando del bot, etc. Teniendo en cuenta que deberias tener una terminal abierta constantemente ejecutando el archivo.py que contiene el comando del bot.
  2. O podes, como es mi caso, tenerlo alojado en un VPS ejecutandose constantemente sin que se caiga nunca ya que podes usar el comando “screen” para tenerlo corriendo en background.

La segunda opcion es sugerida si y solo si, ya tenes un VPS desde hace tiempo, porque no creo que quieras pagar un VPS solo para tener un Bot de Telegram que manda imagenes, estamos de acuerdo que eso es una locura no?
Lo que podes hacer para probarlo fuera de tu PC es usar el sitio https://c9.io el cual te da un VPS de manera gratuita para que puedas deployar cualquier proyecto que quieras (eso si, si el VPS no tiene actividad se apaga automaticamente, es la contra que tiene por ser gratuito, pero funciona perfecto).

Ejemplos de comandos:
comandos

Si queres probar mi Bot para ver como es el tema de la interaccion podes agregarlo a un chat de Telegram por su nombre de usuario @RootAdminBot (el nombre fue pensado por lo que comentaba al principio del post, asi que quedo ese nombre, me da fiaca cambiarlo).

Espero que te haya gustado y si te animas a crear tu propio bot esperamos tus comentarios. Si hay algo que no entendiste o necesitas que te lo explique mas detalladamente podes escribirme a neoranger@openmailbox.org

14 thoughts on “[Tech]Creando un bot para Telegram

  1. Ricardo Espinosa 2 diciembre, 2015 / 8:03 PM

    En lo que invierten su tiempo los frikis… Jejeje

    Me gusta

    • NeoRanger 2 diciembre, 2015 / 8:22 PM

      Jajajajajaj!!! Y eso que tarde en escribirlo!!
      Saludos y gracias por pasar!

      Me gusta

  2. Daniel 7 enero, 2016 / 10:19 AM

    ImportError: No module named telebot

    Me da ese error al iniciar mi bot.py. Que hago?

    Me gusta

    • NeoRanger 7 enero, 2016 / 10:34 AM

      Hola, por favor chequea la Nota de Actualizacion #2 en el mismo post. Me habia olvidado completamente el paso de instalar la API de Telegram la cual sirve para importar los modulos mas tarde, por eso te da error al importar el modulo Telebot, porque no esta instalado.

      Mil perdones y gracias por pasar!!

      Me gusta

  3. Mauricio 5 febrero, 2016 / 10:37 PM

    Hola, estoy haciendo un bot para que cuando haya un articulo nuevo en un blog me lo notifique. Estoy programando en python y usando esa library. Lo que no se es como hacer para que el bot me mande cuando haya un articulo nuevo un mensaje sin que yo se lo pida. A la informacion de la pagina la puedo obtener pero no se como programar el bot para que haga eso. Gracias.

    Me gusta

    • NeoRanger 12 febrero, 2016 / 1:00 PM

      Hola Mauricio, te comento que lo que estás pidiendo puede ser que no se haga ya que deberías crear un listener que escuche siempre a tu blog y ahí te mande un mensaje. La verdad yo tengo muy poca programación en Python, recién ando aprendiendo pero si contactás a gente especializada seguramente te sacará la duda. Habrá que ver si la API de Telegram permite “escuchar” una URL cuando el bot está ejecutándose.
      Saludos y gracias por pasar.

      Me gusta

      • mauricio 12 febrero, 2016 / 8:34 PM

        Gracias por la respuesta! Si, intente buscar por todos lados para ver si existia alguna manera de hacer eso y todavia no tuve exito. Tambien quisiera saber como hacen algunos bot, por ejemplo, existe uno que lo podes programar para que todos los dias a las 7 de la mañana por ejemplo te notifique el pronostico del tiempo en tu ciudad. Si algun dia sabes como hacerlo y te acordas escribime por aca! Gracias!

        Me gusta

  4. mauricio 12 febrero, 2016 / 8:35 PM

    Aclaracion: lo del pronostico del tiempo lo que me interesa es saber como programar el bot para que a tal hora te mande un mensaje todos los dias.

    Me gusta

  5. Yarlosilva 29 diciembre, 2016 / 2:28 AM

    Hola, gran trabajo, gracias a la info he logrado prender leds con el bot y la gpio, pero no logro leer un sensor de movimiento para que cada vez que se active Mande una notificación. Agradecería cualquier ayuda

    Me gusta

    • NeoRanger 30 diciembre, 2016 / 12:31 PM

      Gracias por el comentario! Lamentablemente no tengo la info que me estás pidiendo. Te sugiero buscar en comunidades de G+ o en foros de RaspberryPi. Saludos!

      Me gusta

Dejame un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s