Necesito crear un bot de telegram que haga leech y suba los archivos a Telegram con aria2
To upload files, please first save the app
import streamlit as st
import subprocess
import os
import aria2p
from telegram import Bot
import asyncio
from pathlib import Path
# Configuración inicial de Streamlit
st.title("Telegram Leech Bot")
# Configuración de credenciales
if 'bot_token' not in st.session_state:
st.session_state.bot_token = ""
if 'chat_id' not in st.session_state:
st.session_state.chat_id = ""
# Sección de configuración
with st.expander("Configuración", expanded=not st.session_state.bot_token):
bot_token = st.text_input("Token del Bot de Telegram", value=st.session_state.bot_token, type="password")
chat_id = st.text_input("Chat ID de Telegram", value=st.session_state.chat_id)
if st.button("Guardar configuración"):
st.session_state.bot_token = bot_token
st.session_state.chat_id = chat_id
st.success("Configuración guardada!")
# Inicializar aria2
try:
aria2 = aria2p.API(
aria2p.Client(
host="http://localhost",
port=6800,
secret=""
)
)
except Exception as e:
st.error(f"Error al conectar con aria2: {str(e)}")
st.info("Asegúrate de tener aria2c corriendo con: aria2c --enable-rpc")
st.stop()
# Función para subir archivo a Telegram
async def upload_to_telegram(file_path, bot_token, chat_id):
try:
bot = Bot(token=bot_token)
with open(file_path, 'rb') as f:
await bot.send_document(chat_id=chat_id, document=f)
return True
except Exception as e:
st.error(f"Error al subir a Telegram: {str(e)}")
return False
# Entrada de URL
url = st.text_input("Ingresa la URL para descargar")
if url and st.button("Iniciar descarga y subida"):
if not st.session_state.bot_token or not st.session_state.chat_id:
st.error("Por favor configura el token del bot y el chat ID primero")
st.stop()
# Mostrar estado
status = st.empty()
try:
# Iniciar descarga con aria2
status.info("Iniciando descarga...")
download = aria2.add_uris([url])
# Esperar a que termine la descarga
while not download.is_complete:
download.update()
progress = download.progress
status.progress(progress)
if download.has_failed:
raise Exception("La descarga falló")
status.success("Descarga completada!")
# Subir a Telegram
status.info("Subiendo a Telegram...")
file_path = download.files[0].path
# Crear evento asyncio para subir a Telegram
async def upload():
return await upload_to_telegram(file_path, st.session_state.bot_token, st.session_state.chat_id)
success = asyncio.run(upload())
if success:
status.success("¡Archivo subido exitosamente a Telegram!")
# Limpiar archivo
try:
os.remove(file_path)
except:
pass
else:
status.error("Error al subir el archivo a Telegram")
except Exception as e:
status.error(f"Error: {str(e)}")
# Información adicional
st.markdown("""
### Instrucciones:
1. Asegúrate de tener aria2c corriendo con el comando: `aria2c --enable-rpc`
2. Configura el token de tu bot y el chat ID de Telegram
3. Pega la URL del archivo que quieres descargar
4. El bot descargará el archivo y lo subirá automáticamente a Telegram
### Notas:
- El bot necesita tener permisos para enviar archivos en el chat
- Los archivos se eliminan automáticamente después de ser subidos
- Asegúrate de tener suficiente espacio en disco para las descargas
""")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?