我正在创建应该复制消息并将其转发到另一个聊天的用户机器人,但是一旦我获得照片相册(media_group),我就无法将它们转发到另一个聊天。
if message.media_group.id
中的每个功能的触发次数与相册中的图像数量完全相同,例如:
输入:
i = message.id
print(i)
输出:
4384
4385
4386
我已经尝试过
app.get_media_group(chat_id, message_id=mess.id)
,但效果相同 - 多次。问题是我无法转发,因为它多次工作并且它只是多次向我发送同一张图片。我也尝试过列表、元组 - 也无法得到它。有人可以帮忙吗?
在Pyrogram中,需要处理消息流。
在 Telegram 中,媒体组并不是字面意义上的容器, 它更像是一种视觉分组的方式。
import pyrogram
import yaml
channels = []
lm = []
config = yaml.safe_load(open(r"MyUserBot\.config.yaml"))
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"This is the first message, id: {message.id}"
if message.id == media_group[0].id
else f"the next message, id: {message.id}"
if message.id == media_group[-1].id
else f"This is the last message in the media group, id: {message.id}"
)
print(output_line)
# Process messages in streaming mode
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)
# It is necessary to send to your channel after processing the last message
if message.id == media_group[-1].id:
await client.copy_media_group(
chat_id=config.my_channel, message.chat.id, message.id
)
print('The post is published')
# Use the accumulated result
for media in lm:
print(media)
app.run()
希望有用