import pyrogram
import config
channels = []
lm = []
with open('channels.txt','r') as f:
for channel in f.read().split('\n'):
channels.append(channel)
app = pyrogram.Client('my_account', config.api_id, config.api_hash)
@app.on_message()
def copy_to_my_channel(app, message):
print(message)
if str(message.chat.id) in channels:
if message.media_group_id == None:
app.copy_message(from_chat_id = message.chat.id, chat_id = config.my_channel, message_id = message.id)
else:
if message.media_group_id not in lm:
app.copy_media_group(from_chat_id = message.chat.id, chat_id = config.my_channel, message_id = message.id)
lm.append(message.media_group_id)
print('Пост опубликован')
app.run()
copy_media_group()
отправляет каждый медиафайл как отдельное сообщение, что приводит к отправке нескольких сообщений вместо одного с группой медиафайлов.send_media_group()
вместо copy_media_group()
. Метод send_media_group()
отправляет все медиафайлы в одном сообщении, что дает возможность отправлять группу медиафайлов как единое сообщение.import pyrogram
import config
channels = []
lm = []
with open('channels.txt','r') as f:
for channel in f.read().split('\n'):
channels.append(channel)
app = pyrogram.Client('my_account', config.api_id, config.api_hash)
@app.on_message()
def copy_to_my_channel(app, message):
print(message)
if str(message.chat.id) in channels:
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:
if message.media_group_id not in lm:
media_group = app.get_media_group(chat_id=message.chat.id, message_id=message.message_id)
app.send_media_group(chat_id=config.my_channel, media=media_group)
lm.append(message.media_group_id)
print('Пост опубликован')
app.run()
get_media_group()
для получения группы медиафайлов из оригинального сообщения, а затем отправили ее в новый канал, используя метод send_media_group()
. 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()