如何通过Telethon 1.40.0下载自定义表情的.tgs文件?
解决Telethon下载自定义表情时获取.tgs文件的问题
问题原因
你遇到的情况是因为当前Telegram的自定义动画表情大多采用WebM(VP9编码)格式存储,替代了旧版的.tgs格式。你通过GetCustomEmojiDocumentsRequest获取到的Document对象本身就是WebM格式(从输出的mime_type='video/webm'和DocumentAttributeFilename(file_name='sticker.webm')可以确认),所以下载后自然是WebM文件,而非.tgs。
解决方案
只有当自定义表情本身是.tgs格式时,才能下载到.tgs文件。你需要先判断表情的MIME类型,再针对性处理:
修改后的代码示例:
@client.on(events.NewMessage(chats=accepted_chats)) async def handler(event): # 校验消息是否包含自定义表情实体 if not event.message.entities or not isinstance(event.message.entities[0], MessageEntityCustomEmoji): return emoji_doc_id = event.message.entities[0].document_id # 请求获取自定义表情的文档信息 doc_result = await client(functions.messages.GetCustomEmojiDocumentsRequest( document_id=[emoji_doc_id] )) target_doc = doc_result.documents[0] print(target_doc) # 判断是否为.tgs格式 if target_doc.mime_type == 'application/x-tgsticker': await client.download_media(target_doc, file=f'{emoji_doc_id}.tgs') print(f"已成功下载.tgs文件:{emoji_doc_id}.tgs") else: print(f"该自定义表情为{target_doc.mime_type}格式,无法获取.tgs文件")
补充说明
Telegram逐步用WebM替代.tgs作为动画表情的存储格式,原因是WebM体积更小、播放兼容性更强。只有较早期发布的自定义表情才可能保留.tgs格式,大部分新表情都是WebM格式。
内容的提问来源于stack exchange,提问作者Owlzy
相关产品推荐
相关产品推荐

