Backend & DevOps

Mi Bot de Telegram que Hace de Todo

Porque me jodía tener que usar 20 apps diferentes para hacer cosas básicas. Así que me hice un asistente que las hace todas.

¿Por qué otro bot más?

La cosa es simple: me harté de tener que abrir OCR apps cutres para leer texto de imágenes, buscar webs sketchy para descargar vídeos de YouTube, y en general depender de servicios que funcionan cuando les da la gana.

Así que pensé: "¿y si me hago un bot que haga todo esto pero bien?". Y aquí estamos. Lo construí modular porque sabía que iba a querer añadir más mierdas con el tiempo, y porque odio el código spaguetti tanto como el resto del mundo.

El Lector de Imágenes

Le mandas una foto con texto y te devuelve el texto. Punto. Pero no es tan fácil como parece: tuve que cacharrear con Pytesseract y Pillow para que no me devolviera jeroglíficos cuando la imagen estaba mal iluminada o era una captura de mierda.

Añadí preprocesamiento automático (escala de grises, ajuste de contraste) porque la vida es demasiado corta para fotos que no se leen bien.

El Descargador Universal

Este fue el que más dolores de cabeza me dio. yt-dlp es genial, pero el límite de 50MB de Telegram es un coñazo. No puedes simplemente descargar y enviar: tienes que ser listo.

La solución que me inventé: analizo la duración del vídeo y calculo exactamente qué bitrate necesito para que quepa en los 50MB. Ni más, ni menos. ffmpeg hace la magia de compresión y el bot envía el archivo sin problemas.

Funciona con cientos de sitios porque yt-dlp es una bestia, no solo YouTube.

Las herramientas que no me fallaron

Python 3.11+ Porque es rápido de escribir y tiene librerías para todo. Y porque no me apetecía sufrir con C++.
Aiogram Framework asíncrono para Telegram que no me hace querer tirar el ordenador por la ventana. Mucho mejor que las alternativas.
Pytesseract & Pillow Para que el OCR no sea una mierda. Pillow para arreglar las imágenes, Tesseract para leerlas.
yt-dlp & ffmpeg La dupla perfecta: uno descarga, el otro comprime. Sin ellos esto no funcionaría.
Docker Porque instalar Tesseract y ffmpeg en cada servidor es un infierno. Mejor meterlo todo en un container y olvidarse.
GitHub Actions Para no tener que construir las imágenes de Docker a mano cada vez que cambio algo. La automatización es vida.

No es solo un script, es una aplicación de verdad

Aquí es donde me puse serio. Cualquiera puede hacer un bot que funcione en su ordenador, pero hacer que funcione en producción es otra historia completamente.

El Dockerfile no es solo "pip install requirements.txt" y ya está. Tiene que instalar dependencias del sistema operativo (Tesseract, ffmpeg), configurar locales para que el OCR funcione en español, y asegurarse de que todo esté donde tiene que estar.

GitHub Actions se encarga de que cada vez que hago push, se construya automáticamente una nueva imagen de Docker lista para desplegar. Nada de "funciona en mi máquina" - si pasa los tests, funciona en cualquier lado.

Lo que aprendí (y lo que me jodió)

Este proyecto me enseñó que hacer algo que funcione para ti es fácil, pero hacer algo que funcione para otros es jodidamente difícil. El manejo de errores, la gestión de memoria cuando procesas vídeos grandes, asegurarte de que Docker no se coma toda la RAM...

También me di cuenta de lo importante que es la arquitectura modular. Cuando quise añadir el segundo módulo, no tuve que tocar ni una línea del primero. Eso es diseño que funciona.

Y Docker... Docker me salvó la vida. Sin él, desplegar esto hubiera sido un calvario de dependencias rotas y versiones incompatibles.