miércoles, 29 de enero de 2025

Cómo Crear un Bot de Telegram para Descargar Archivos en Tu DietPi

Descarga Cualquier Archivo en Tu DietPi: Crea un Bot de Telegram Eficiente

📥 Descarga Cualquier Archivo en Tu DietPi: Crea un Bot de Telegram Eficiente 🚀

En este tutorial, aprenderás cómo crear un bot de Telegram que te permitirá descargar cualquier archivo que le envíes en tu dispositivo DietPi. ¡Vamos allá!

1. Crear un Nuevo Bot en Telegram 🤖

  1. Abre la aplicación de Telegram en tu dispositivo.
  2. Busca el bot llamado @BotFather.
  3. Inicia una conversación con @BotFather y usa el comando /newbot.
  4. Sigue las instrucciones para asignar un nombre y un usuario a tu nuevo bot.
  5. Al finalizar, @BotFather te proporcionará un token que necesitarás más adelante. ¡Guárdalo en un lugar seguro!

2. Obtener el api_id y api_hash 🔑

  1. Visita My Telegram e inicia sesión con tu número de teléfono.
  2. Crea una nueva aplicación haciendo clic en "API Development Tools" y luego en "Create new application".
  3. Completa los campos requeridos y envía el formulario.
  4. Se te proporcionará un api_id y un api_hash. ¡Guárdalos junto con tu token!

3. Configurar el Entorno en DietPi 🛠️

  1. Accede a tu dispositivo DietPi vía SSH o directamente si tienes acceso físico.
  2. Actualiza los paquetes y el sistema operativo:
    sudo apt update && sudo apt upgrade -y

4. Instalar Python y las Librerías Necesarias 🐍

  1. Instala Python y Pip:
    sudo apt install python3 python3-pip -y
  2. Instala la librería telethon:
    pip3 install telethon

5. Escribir el Código del Bot 💻

Crea un archivo llamado telegram_bot.py y pega el siguiente código. Asegúrate de reemplazar 'YOUR_API_ID', 'YOUR_API_HASH', 'YOUR_BOT_TOKEN' y 'YOUR_DIRECTORY' con tus propios valores.

import asyncio
from telethon import TelegramClient, events
import os
from telethon.tl.custom import Button

# Configura tus credenciales aquí
api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'
bot_token = 'YOUR_BOT_TOKEN'

client = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token)
download_progress = {}
download_dir = 'YOUR_DIRECTORY'  # Directorio de descargas

@client.on(events.NewMessage(pattern='/start'))
async def start(event):
    buttons = [
        Button.inline("Enviar Archivo 📤", b"send_file"),
        Button.inline("Ver Progreso 📈", b"progress"),
        Button.inline("Listar Descargas 📂", b"list_downloads")
    ]
    await event.respond('¡Hola! Elige una opción:', buttons=buttons)
    raise events.StopPropagation()

@client.on(events.CallbackQuery(pattern=b'send_file'))
async def send_file(event):
    await event.respond('Por favor, envíame un archivo.')
    raise events.StopPropagation()

@client.on(events.CallbackQuery(pattern=b'progress'))
async def progress_query(event):
    downloaded, total = download_progress.get(event.chat_id, (0, 1))
    downloaded_mb = downloaded / (1024 * 1024)
    total_mb = total / (1024 * 1024)
    progress_message = f'Progreso de descarga: {downloaded_mb:.2f} MB de {total_mb:.2f} MB ({(downloaded / total) * 100:.2f}%)'
    await event.respond(progress_message)
    raise events.StopPropagation()

@client.on(events.CallbackQuery(pattern=b'list_downloads'))
async def list_downloads(event):
    if os.path.exists(download_dir):
        download_list = os.listdir(download_dir)
        if download_list:
            files = '\n'.join(download_list)
            await event.respond(f'Archivos en el directorio de descargas:\n{files}')
        else:
            await event.respond('El directorio de descargas está vacío.')
    else:
        await event.respond('El directorio de descargas no existe.')
    raise events.StopPropagation()

@client.on(events.NewMessage)
async def download(event):
    if event.message.media:
        await event.respond('Iniciando la descarga del archivo... Usa el comando /progress para ver el progreso.')
        download_progress[event.chat_id] = (0, event.message.file.size)
        file_path = await event.message.download_media(
            file=download_dir,
            progress_callback=lambda d, t: download_progress.update({event.chat_id: (d, t)}))
        file_name = os.path.basename(file_path)
        await event.respond(f'Archivo {file_name} descargado en: {file_path}')
        del download_progress[event.chat_id]
    else:
        await event.respond('Ponte cómodo mientras se descarga o envíame otro archivo. Para otros comandos escribe /ayuda.')

client.start()
client.run_until_disconnected()

6. Ejecutar el Bot ▶️

  1. Abre una terminal y navega hasta el directorio donde guardaste telegram_bot.py.
  2. Ejecuta el bot con el siguiente comando:
    python3 telegram_bot.py
  3. Ahora, en Telegram, inicia una conversación con tu bot y prueba las funciones.

Funcionalidades del Bot 🎉

  • Enviar Archivo 📤: Permite al usuario enviar un archivo para que el bot lo descargue.
  • Ver Progreso 📈: Muestra el progreso de la descarga en MB y porcentaje.
  • Listar Descargas 📂: Lista los archivos presentes en el directorio de descargas.

Nota: Asegúrate de que el directorio que especificaste en download_dir existe y que el bot tiene permisos