You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyrogram中media_group消息加载异常,用户Bot无法转发相册求助

解决Telegram Bot媒体组重复触发转发问题

问题核心:Telegram会将媒体组中的每张图片/文件作为独立消息推送,但同一组内所有消息共享同一个media_group.id,这导致你的处理逻辑会被触发N次(N为媒体组内文件数量),进而重复执行转发操作。

以下是直接可行的解决方案:

1. 通过媒体组ID去重

用一个缓存集合记录已处理过的media_group.id,确保同一媒体组只被处理一次:

# 全局集合存储已处理的媒体组ID,避免重复触发
processed_media_groups = set()

@app.on_message(filters.media_group)
async def handle_media_group(client, message):
    media_group_id = message.media_group.id
    
    # 跳过已处理的媒体组
    if media_group_id in processed_media_groups:
        return
    
    # 标记该媒体组为已处理
    processed_media_groups.add(media_group_id)
    
    # 获取整个媒体组的所有消息
    media_group = await client.get_media_group(message.chat.id, message.id)
    
    # 构造转发所需的媒体对象列表(以图片为例)
    media_to_send = []
    for msg in media_group:
        if msg.photo:
            # 取分辨率最高的图片
            photo = msg.photo[-1]
            media_to_send.append({"type": "photo", "media": photo.file_id})
    
    # 一次性转发整个媒体组到目标聊天
    await client.send_media_group(
        chat_id="你的目标聊天ID",
        media=media_to_send
    )

2. 缓存清理优化(可选)

如果Bot长期运行,全局集合会不断占用内存,可以改用带超时的缓存(比如用字典存储media_group.id和处理时间,定期清理过期条目):

import time

processed_media_groups = {}
CACHE_EXPIRE_SECONDS = 3600  # 1小时过期

@app.on_message(filters.media_group)
async def handle_media_group(client, message):
    media_group_id = message.media_group.id
    current_time = time.time()
    
    # 清理过期缓存
    expired_ids = [mid for mid, timestamp in processed_media_groups.items() if current_time - timestamp > CACHE_EXPIRE_SECONDS]
    for mid in expired_ids:
        del processed_media_groups[mid]
    
    # 跳过已处理的媒体组
    if media_group_id in processed_media_groups:
        return
    
    # 记录处理时间
    processed_media_groups[media_group_id] = current_time
    
    # 后续获取媒体组、转发逻辑同上述代码
    ...

关键说明:

  • 同一媒体组的所有消息media_group.id完全一致,通过这个标识去重是最可靠的方式
  • 必须用send_media_group一次性发送整个媒体组,而不是单条转发,这样才能在目标聊天中显示为相册

内容的提问来源于stack exchange,提问作者Proger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:42:47