{"id":25811461,"url":"https://github.com/techatlasdev/blind","last_synced_at":"2025-08-02T04:36:05.614Z","repository":{"id":263077594,"uuid":"883226675","full_name":"TechAtlasDev/blind","owner":"TechAtlasDev","description":"🤖 Un bot de telegram modular especializado en LLMs.","archived":false,"fork":false,"pushed_at":"2025-05-21T18:37:04.000Z","size":438,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-21T19:26:24.085Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TechAtlasDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-04T15:40:03.000Z","updated_at":"2025-05-21T18:37:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"f1367dbb-15e2-46b8-aedd-aad72e85f554","html_url":"https://github.com/TechAtlasDev/blind","commit_stats":null,"previous_names":["techatlasdev/blind"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/TechAtlasDev/blind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechAtlasDev%2Fblind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechAtlasDev%2Fblind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechAtlasDev%2Fblind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechAtlasDev%2Fblind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TechAtlasDev","download_url":"https://codeload.github.com/TechAtlasDev/blind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechAtlasDev%2Fblind/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268334642,"owners_count":24233795,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-28T00:52:42.089Z","updated_at":"2025-08-02T04:36:05.598Z","avatar_url":"https://github.com/TechAtlasDev.png","language":"Python","readme":"![Banner telegram](image.png)\n\n---\n\n# BlindAI 🤖 \n\n**BlindAI** es un bot de telegram desarrollado con el objetivo de explotar el potencial de la IA generativa y la disponibilidad de Telegram con el objetivo de crear un asistente cuyas capacidades sean altamente innovadoras gracias a la arquitectura del proyecto.\n\n## 🎯 Objetivo\n\nDesarrollar un bot de Telegram fácil de acceder, **gratuito**, escalable y con un enfoque de integración de herramientas cómodo y fácil, lo que permite enfocar la mayor parte del proyecto en la implementación y búsqueda de **innovación en el LLM** sin preocuparse por el apartado técnico del proyecto.\n\n## 🛠️ Herramientas\n\nEl sistema cuenta con varias herramientas creadas de manera predefinida.\n\n\u003e [!NOTE]  \n\u003e Puede variar su disponibilidad en la demo oficial.\n\n* 🧮 Calculadora de sumas\n* 🔎 Buscador de direcciones IP\n* 📈 Gráfica de funciones\n* 💌 Enviador de mensajes por privado\n* 🕵️‍♀️ Buscador de datos de un usuario en específico\n* 🌎 Buscador de Google\n* ⏰ Creador de alarmas\n* 🌐 Visitador de URLs\n* 🗣️ Transcriptor de videos de Youtube\n* 🖨️ Creador de PDFs usando HTML\n\n## 🖥️ Stack\n\n* **Pyrogram:** Una librería de python que permite conectarse con la API de Telegram.\n* **Google Generative AI:** Un SDK que permite interactuar con el LLM usando python.\n* **Watchdogs:** Permite esperar cambios en archivos específicos.\n* **Matplotlib:** Permite crear gráficos estadísticos.\n* **Requests:** Interactuar con APIs externas.\n\n## 🏁 Instalación\n\n1. Clona este repositorio con:\n\n```bash\ngit clone https://github.com/TechAtlasDev/blind\n```\n\n2. Entra al proyecto e instala las dependencias con:\n\n```bash\ncd blind\npoetry install\n```\n\n3. Establece las variables de entorno en la ruta `blind/.env`, y establece las variables:\n\n```conf\nNAME=\"Nombre de la aplicación de telegram\"\nAPI_ID=id_del_bot_de_telegram_\nAPI_HASH=\"Hash de la API de telegram\"\nBOT_TOKEN=\"Token del bot de telegram\"\nADMIN_ID=id_del_administrador_del_bot\nAI_TOKEN=\"Token de uso de la API de Google Generative AI, lo puedes encontrar en https://aistudio.google.com/apikey\"\nGOOGLE_KEY_SEARCH_ENGINE_CUSTOM=\"API KEY de credenciales de aplicación de Google Cloud Platform (Para realizar busquedas en Google)\"\nGOOGLE_KEY_CX=\"KEY CX de la aplicación de Google Cloud Platform\"\n```\n\n4. Inicia el proyecto con:\n\n```bash\npoetry run dev\n```\n\n## 🧱 Estructura del proyecto\n\nComo anteriormente se estableció, el bot cuenta con una arquitectura definida con el objetivo de priorizar la escalabilidad, fácil modificación e integración de herramientas.\n\n### 1. Carpetas principales \n\n```\n|- Apps: Las apps son carpetas que contienen un conjunto de herramientas específicas.\n|- Downloads: La ruta en donde el bot de telegram hace descargas temporales de contenido, desde imágenes, documentos y cualquier otro contenido que el usuario se lo envíe.\n|- Notifiers (En construcción): Sistemas especializados que se encargan de notificar al usuario por diferentes medios (como correos, mensajes de telegram, etc) cosas que el usuario le pidió al asistente.\n|- Utils: Conjunto de herramientas auxiliares.\n```\n\n### 2. Aplicaciones\n\n```\n|- Basics: Comandos básicos como /start o /help\n|- Group: Comandos especiales para realizar operaciones en grupos. \n|- LLM: Comandos especiales que se centran en el asistente (Aplicación principal).\n|- Programmer (experimental): Un asistente especializado que tiene la capacidad de ejecutar comandos remotodos y programar.\n|- postdata_controller.py: Permite controlar todo tipo de callback_querys que el sistema reciba.\n```\n\n### 3. Añadir funcionalidades al asistente:\n\nDentro de la aplicación \"LLM\", en la ruta `lib/functions` puedes crear un archivo nuevo, con la siguiente estructura inicial:\n\n```python\n# Para tipado de variables\nfrom pyrogram import Client\nfrom pyrogram.types.messages_and_media.message import Message\n\nasync def nombre_funcion(value:str, **kwargs):\n  \"\"\"\n  Función que el LLM ejecutará.\n\n  Params:\n    * value: Parámetro que el LLM establecerá\n  \"\"\"\n\n  message:Message = kwargs.get(\"message\", None)\n  client:Client = kwargs.get(\"client\", None)\n\n  await message.reply_text(f\"\u003cb\u003eCuVo\u003c/b\u003e ejecutó esta función nueva \u003ccode\u003e{value}\u003c/code\u003e.\")\n\n  return \"La función se ejecutó!\" # Este dato se retornará al LLM, no al usuario.\n```\n\n#### Cosas a tomar en cuenta:\n* `nombre_funcion:` Este nombre de función ejecutará el LLM, asi que tiene que ser explicativo.\n* `value`: Este parámetro el LLM retornará (recomiendo que sea explicativa).\n* **Documentación de la función:** Si quieres que el LLM comprenda mejor el uso de la función, modifica su documentación dandole indicaciones\n* `message` y `client`: Variables que contienen datos del bot de telegram y el usuario, te pueden servir para obtener sus datos y realizar operaciones avanzadas en el chat.\n* `await message.reply_text(f\"\u003cb\u003eCuVo\u003c/b\u003e ejecutó esta función nueva \u003ccode\u003e{value}\u003c/code\u003e.\")`: Mensaje que notificará al usuario que se está ejecutando una función.\n* **Retorno:** El resultado de la función que será enviado al LLM, es necesario que el tipo del valor sea primitivo.\n\n\u003e [!WARNING]  \n\u003e No olvides tipar los parámetros de la función, para que el asistente sepa cómo responder.\n\n### Función de ejemplo:\n\nUna función que le permite al LLM realizar una resta con 2 digitos:\n\n```python\n# Para tipado de variables\nfrom pyrogram import Client\nfrom pyrogram.types.messages_and_media.message import Message\n\nasync def restar(x:int, y:int, **kwargs):\n  \"\"\"\n  Función que permite al asistente restar dos valores.\n\n  Parámetros:\n    x (int): Primer número\n    y (int): Segundo número\n  \"\"\"\n\n  message:Message = kwargs.get(\"message\", None)\n  client:Client = kwargs.get(\"client\", None)\n\n  await message.reply_text(f\"[🧠] \u003cb\u003eCuVo\u003c/b\u003e está usando la calculadora.\")\n\n  # Realizando la operación\n  resultado = x - y\n\n  return resultado\n```\n\n### 4. Añadir funcionalidad a la lista de funcionalidades\n\nDentro de la aplicación \"LLM\", en la ruta `lib/path.py` vas a encontrar un diccionario, importa tu integración y añadela a la lista.\n\n\u003e [!WARNING]  \n\u003e La key tiene que tener el mismo nombre de la función que acabas de crear.\n\n---\n\n## ⚖️ Licencia\n\nEl proyecto cuenta con la licencia MIT.\n\n## 📙 Soporte\n\nSi tienes dudas, necesitas ayuda o tienes una sugerencia puedes contactarme en `gjimenezdeza@gmail.com`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechatlasdev%2Fblind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechatlasdev%2Fblind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechatlasdev%2Fblind/lists"}