tutorial python

Hace años intenté hacer un bot de telegram con python en mi raspberry pi, instalé algunas librerías, pero para lo que necesitaba no cubria algunas necesidades o simplemente era demasiado complejo.

Así fue como comencé a estudiar un poco sobre la api rest de telegram, decido que podría hacer un core lite y flexible par todo proyecto.

Estaa publicación están relacionadas a una serie de post sobre hacer un bot con telegram les dejo el listado de publicaciones:

Core Bot de telegram con python

Antes que nada, este bot esta pensado para correr en python en cualquier parte, donde mas lo he usado es para bots que estan alojado en unas raspberry pi 3

Descargalo desde Gitlap: botTelegramCorePythonHttp

Todo esta corriento con python3 aunque no estan declaradas en el inicio es importante que lo sepan, ya que si lo corren con una version abajo les dara un error.

Para que sirve cada archivo

core para bot de telegram en python
estructura del proyecto

action.py

Action contiene la clase Acciones (disculpen el esplanglish del proyecto), este documento es de los mas importantes ya que pondrán acá que acciones quieren que haga el bot.

Desde acá vamos a procesar las llamadas del bot de telegram con python y veremos si mandamos un mensaje, leemos informacion, tomamos fotos, etc.

yo deje 3 ejemplos y códigos comentados en español de cómo o se usa.

Para el ultimo proyecto que use y que mejore mucho este core, uso mongodb para guardar informacion, antes creaba archivos de texto para guardar info, pero este core esta pensado para usarlo de forma masiva.

Si guardamos con mongo, les recomiendo crear una cuenta en mongodb.com ya que para proyectos chicos nos dan gratis el uso desde sus servidores y si usan raspbian (raspberry pi os) no nos deja instalar la última version de mongo ya que necesita ser de 64 bits.

if command == '/micomando':
            x.chatAction(chat_priv)
            if params == '':
                if(usuario['idtg'] == chat_priv):
                    posts.find_one_and_update({"idtg": chat_priv},{"$set": {"esperando": "/micomando"} })
                    x.message('Pon tu nombre, te recuerdo que es la forma como te vamos a identificar',chat_priv)
            else:
                posts.find_one_and_update({"idtg": chat_priv},{"$set": {"name": params} })
                posts.find_one_and_update({"idtg": chat_priv},{"$set": {"esperando": ""} })
                x.message('💾 guardado',chat_priv)

Parte importante, cuándo vamos a esperar una respuesta en nuestro bot de telegram, siempre tendremos un params revisando si esta vacío o no.

botandchat.py

Este es objeto dónde simplemente colocamos el token del bot de telegram y nuestro id de telegram para que nos anuncie si ocurrió un error.

checkmessage.py

El código estrella, Este Código es el principal y el que vamos a iniciar siempre.

¿Cómo lo corremos?

python3 /Documents/checkmessage.py &

¿como hacerlo una tarea que se inicie sola?

sudo crontab -e

agregamos al final:

@reboot sleep 60 && python3 /home/pi/Documents/ultras.py &

En este código en resumidas cuenta hace lo siguiente:

Consume la api rest de telegram, cada vuelta que hacemos enviamos el ultimo update_id para que telegram borre los mensajes anterior y siempre nos envie una lista actualizado.

if path.exists("/home/pi/Documents/ucdate.txt"):
                f = open("/home/pi/Documents/ucdate.txt", "r")
                ts = int(f.read())
                f.close()

lo que si hacemos siempre es crear/sobreescribir y leer este archivo, que sera donde guardamos siempre el update_id

Usamos un for para recorrer todos los objetos que tiene nuestra llamada api rest de nuestro bot de telegram con python.

commands.py

La magia detrás del código.

Aquí encontramos las llamadas necesarias que necesitamos para la llamadas de api de telegram.

la ventaja de esto es que al llamar la clase solo hay que pasarle algunos valores, todo lo hace por api rest asi que estas funciones realizan de forma inmediata las llamadas.

def animaion(self, chat_id, nameGif = '', idAnimation = ''):
        if nameGif != '':
            try:
                files = {'animation': open(nameGif,'rb')}
                tlgurl = url+"{}/sendAnimation?chat_id={}".format(self.botapi,str(chat_id))
                requests.post(tlgurl, files= files)
            except:
                pass
        if idAnimation != '':
            tlgurl = url+"{}/sendAnimation?chat_id={}&animation={}".format(self.botapi,str(chat_id),idAnimation)
            response = requests.post(tlgurl)

idAnimation puedes enviar el url del gif o el id de animación , recomiendo url absolita.

internetok.py

Este ya lo he tocado en otros post, es una pequeña función que se cicla si no hay internet, esto para nuestro código no falle al enviar un archivo.

Actualizaciones

Se que no están TODAS las llamadas de api rest de telegram, pero son las que usado en varios bots, asi que si quieren aportar sera bienvenido y poco a poco seguire actualizando otros comandos.

Estare construyendo un bot con este core para que sea interactivo y vean como funciona.

Si quieres enterarte de todos las actualizaciones te recomiendo suscribirte en nuestro canal de telegram.

por Cesar Flores

Programador de tiempo completo, Gamer de medio tiempo y fotógrafo ocasionalmente, me gusta el front-end y mi framework favorito es angular aunque no por eso le hago el feo a un nuevo lenguaje.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.