В 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()
Успехов!