如何使用WTelegram包下载单条消息中的全部图片与视频?
下载WTelegramClient中单条消息的所有媒体内容
当Telegram消息包含多张图片/多个视频时,消息的Media属性实际是TL.MessageMediaAlbum类型(而非单个媒体对象),该类型承载了整个媒体组的所有项。以下是具体实现步骤和代码:
核心逻辑
- 判断消息的
Media是否为MessageMediaAlbum类型 - 若是,遍历
MessageMediaAlbum.album数组中的每一个媒体项 - 针对不同媒体类型(照片、视频),提取对应文件信息并调用
DownloadFileAsync完成下载
代码实现
首先处理消息的媒体类型判断与遍历:
// 假设已获取目标TL.Message对象message和WTelegram.Client实例client if (message.Media is TL.MessageMediaAlbum albumMedia) { // 遍历媒体组内的所有媒体项 foreach (var mediaItem in albumMedia.album) { await DownloadSingleMedia(mediaItem, client); } } else if (message.Media != null) { // 处理单媒体消息的情况 await DownloadSingleMedia(message.Media, client); }
然后实现单个媒体项的下载方法:
private static async Task DownloadSingleMedia(TL.MessageMedia media, WTelegram.Client client) { string savePath = null; switch (media) { case TL.MessageMediaPhoto photoMedia: // 获取照片的最高分辨率版本 var largestPhoto = photoMedia.photo.GetBiggest(); savePath = $"downloaded_photo_{largestPhoto.id}.jpg"; await client.DownloadFileAsync(largestPhoto, savePath); break; case TL.MessageMediaDocument docMedia: var document = docMedia.document as TL.Document; if (document == null) break; // 判断是否为视频文件 if (document.mime_type.StartsWith("video/")) { var largestVideo = document.GetBiggest(); savePath = $"downloaded_video_{largestVideo.id}.mp4"; await client.DownloadFileAsync(largestVideo, savePath); } // 如需支持其他文档类型,可在此扩展判断逻辑 break; } if (!string.IsNullOrEmpty(savePath)) Console.WriteLine($"媒体已保存至:{savePath}"); }
关键说明
MessageMediaAlbum.album:该数组存储了媒体组内的所有媒体对象(照片、视频等)GetBiggest():WTelegramClient提供的扩展方法,自动筛选出媒体的最高分辨率/最大尺寸的文件版本- 类型区分:通过
switch-case区分照片(MessageMediaPhoto)和视频(MessageMediaDocument,需结合MIME类型判断),确保正确处理不同媒体格式
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

