Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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")
Advertisement