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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:52:08