from telethon import TelegramClient, events import asyncio import logging # Configuración de logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # ===================== CONFIGURACIÓN ===================== # Obtén estos valores de https://my.telegram.org API_ID = 'TU_API_ID' API_HASH = 'TU_API_HASH' BOT_TOKEN = 'TU_BOT_TOKEN' # Obtén esto de @BotFather # IDs de los canales (pueden ser username o ID numérico) SOURCE_CHANNEL = '@canal_origen' # O -1001234567890 TARGET_CHANNEL = '@canal_destino' # O -1001234567890 # Extensiones de archivo a repostear ALLOWED_EXTENSIONS = ('.zip', '.rar', '.7z', '.tar', '.gz', '.3mf', '.stl') # ========================================================= # Crear el cliente del bot bot = TelegramClient('bot_session', API_ID, API_HASH) @bot.on(events.NewMessage(chats=SOURCE_CHANNEL)) async def repost_handler(event): """ Maneja los nuevos mensajes del canal origen y los repostea al destino """ try: message = event.message # Verificar si el mensaje tiene un archivo if message.media and message.document: # Obtener el nombre del archivo file_name = None for attribute in message.document.attributes: if hasattr(attribute, 'file_name'): file_name = attribute.file_name break # Verificar si es una extensión permitida if file_name and any(file_name.lower().endswith(ext) for ext in ALLOWED_EXTENSIONS): logger.info(f"📥 Reposteando archivo: {file_name}") # Repostear el mensaje completo (archivo + caption si existe) await bot.forward_messages( entity=TARGET_CHANNEL, messages=message.id, from_peer=SOURCE_CHANNEL ) logger.info(f"✅ Archivo reposteado exitosamente: {file_name}") else: logger.debug(f"⏭️ Archivo ignorado (extensión no permitida): {file_name}") else: logger.debug("⏭️ Mensaje sin archivo, ignorado") except Exception as e: logger.error(f"❌ Error al repostear mensaje: {e}") async def main(): """ Función principal para iniciar el bot """ logger.info("🤖 Iniciando bot...") # Conectar con el token del bot await bot.start(bot_token=BOT_TOKEN) # Obtener información del bot me = await bot.get_me() logger.info(f"✅ Bot conectado: @{me.username}") logger.info(f"📡 Escuchando mensajes en: {SOURCE_CHANNEL}") logger.info(f"📤 Reposteando a: {TARGET_CHANNEL}") logger.info(f"📁 Extensiones permitidas: {', '.join(ALLOWED_EXTENSIONS)}") logger.info("🟢 Bot funcionando. Presiona Ctrl+C para detener.") # Mantener el bot corriendo await bot.run_until_disconnected() if __name__ == '__main__': try: asyncio.run(main()) except KeyboardInterrupt: logger.info("🛑 Bot detenido por el usuario")