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

如何使用Telethon获取Telegram群组/聊天中的全部媒体消息?

解决Telegram群组/聊天媒体消息获取问题

你当前的代码调用iter_profile_photos方法,这是专门用于获取聊天对象或用户头像照片的接口,所以只能拿到群组头像,无法获取聊天内的媒体消息。要获取群组/聊天里的所有媒体内容,需要使用iter_messages遍历聊天消息,并筛选出包含媒体的消息。

修改后的实现代码

from telethon import TelegramClient, types

# 替换为你的实际APP ID和HASH
APP_ID = 123456
API_HASH = "your_api_hash_here"
GROUP_LINK = "https://t.me/+g7aEU_5qw6tjMmQ9"

with TelegramClient('my_session', APP_ID, API_HASH) as client:
    # 将群组链接转换为可识别的实体对象
    group_entity = client.get_entity(GROUP_LINK)

    # 1. 单独获取所有图片消息
    for msg in client.iter_messages(group_entity, filter=types.InputMessagesFilterPhotos):
        if msg.photo:
            # 下载到指定文件夹,需提前创建好目录
            client.download_media(msg, file="./downloads/photos/")

    # 2. 单独获取所有视频消息
    for msg in client.iter_messages(group_entity, filter=types.InputMessagesFilterVideo):
        if msg.video:
            client.download_media(msg, file="./downloads/videos/")

    # 3. 获取所有类型的媒体消息(通用方式)
    for msg in client.iter_messages(group_entity):
        # 检查消息是否包含媒体内容
        if msg.media:
            # 根据媒体类型分类保存
            media_type = type(msg.media).__name__
            client.download_media(msg, file=f"./downloads/all_media/{media_type}/")

关键注意事项

  • 确保你的账号已加入目标群组(公开群组可直接访问,私密群组需要先获得进入权限)
  • iter_messages支持limit参数(如limit=100)控制单次获取的消息数量,避免因大量请求触发Telegram API限流
  • 下载路径需要提前手动创建,否则会抛出文件不存在的错误
  • 可根据需求选择对应的媒体过滤器:
    • InputMessagesFilterDocument:获取文档类媒体(PDF、压缩包等)
    • InputMessagesFilterMusic:获取音乐文件
    • InputMessagesFilterVoice:获取语音消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:52:48