如何使用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
相关产品推荐
相关产品推荐

