在热图中加载 media_group 消息时出错

问题描述 投票:0回答:1

我正在创建应该复制消息并将其转发到另一个聊天的用户机器人,但是一旦我获得照片相册(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)
,但效果相同 - 多次。问题是我无法转发,因为它多次工作并且它只是多次向我发送同一张图片。我也尝试过列表、元组 - 也无法得到它。有人可以帮忙吗?

python python-3.x parsing telegram pyrogram
1个回答
0
投票

在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()

希望有用

© www.soinside.com 2019 - 2024. All rights reserved.