Задать вопрос
  • Pyrogram пересылает группу медиафайлов несколько раз?

    @SVBazuev
    В Pyrogram надо обрабатывать поток сообщений.
    Медиа группа не является контейнером в прямом смысле,
    это скорее средство визуальной группировки.

    import pyrogram
    import config
    
    channels = []
    lm = []
    
    with open('channels.txt','r') as f:
      for channel in f.read().split('\n'):
        channels.append(int(channel))
    
    app = pyrogram.Client('my_account', config.api_id, config.api_hash)
    
    @app.on_message(filters.chat(channels))
    async def copy_to_my_channel(app, message):
    
      if message.media_group_id is None:
        app.copy_message(from_chat_id=message.chat.id,
                         chat_id=config.my_channel,
                         message_id=message.message_id
                         )
      else:
        media_group = await client.get_media_group(
            message.chat.id, message.id)
    
        output_line = (
          f"Это первое сообщение, id: {message.id}"
          if message.id == media_group[0].id
          else f"Следующее сообщение, id: {message.id}"
          if message.id != media_group[-1].id
          else f"Это последнее сообщение в медиа-группе, id: {message.id}"
          )
        print(output_line)
    
        # Обрабатывать сообщения в потоковом режиме
        if message.video:
          _media = await client.download_media(
          message.video.file_id, in_memory=True,
          file_name=message.video.file_name
          )
    
        elif message.audio:
          _media = await client.download_media(
            message.audio.file_id, in_memory=True
            )
    
        elif message.photo:
          _media = await client.download_media(
            message.photo.file_id, in_memory=True
            )
    
        elif message.document:
          _media = await client.download_media(
            message.document.file_id, in_memory=True,
            file_name=message.document.file_name
            )
    
        lm.append(_media)
    
        # Отправлять к себе в канал надо после обработки последнего сообщения
        if message.id == media_group[-1].id:
          await client.copy_media_group(
            chat_id=config.my_channel, message.chat.id, message.id
            )
          print('Пост опубликован')
    
    app.run()


    Успехов!
    Ответ написан
    Комментировать