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

如何在Pyrogram中从StickerSet获取file_id并发送随机贴纸?

如何在Pyrogram中通过贴纸包名称发送随机贴纸

你已经知道用await message.reply_sticker(sticker_file_id)发送贴纸,但通过底层client.invoke获取的types.Document对象没有直接的file_id字段,这里提供两种可行的解决方法:

方法一:使用Pyrogram高层API(推荐)

Pyrogram本身封装了更易用的get_sticker_set方法,返回的StickerSet里每个贴纸都自带可用的file_id,代码示例:

import random
from pyrogram import Client

async def send_random_sticker(client, message, sticker_set_name):
    # 获取目标贴纸包
    sticker_set = await client.get_sticker_set(sticker_set_name)
    # 随机挑选一个贴纸
    random_sticker = random.choice(sticker_set.stickers)
    # 发送贴纸
    await message.reply_sticker(random_sticker.file_id)

这种方式不需要手动调用底层API,Pyrogram会自动处理file_id的生成,代码更简洁可靠。

方法二:从底层Document对象生成file_id

如果一定要用底层client.invoke获取贴纸数据,可以通过client.get_file把原始Document对象转换成带file_id的File对象,代码示例:

import random
from pyrogram import Client
from pyrogram.raw.functions.messages import GetStickerSet
from pyrogram.raw.types import InputStickerSetShortName

async def send_random_sticker_from_raw(client, message, sticker_set_name):
    # 调用底层API获取贴纸包
    sticker_set = await client.invoke(
        GetStickerSet(
            stickerset=InputStickerSetShortName(short_name=sticker_set_name),
            hash=0
        )
    )
    # 随机选一个贴纸对应的Document
    sticker_doc = random.choice(sticker_set.documents)
    # 转换为带file_id的File对象
    sticker_file = await client.get_file(sticker_doc)
    # 发送贴纸
    await message.reply_sticker(sticker_file.file_id)

补充说明

底层types.Document没有file_id是因为这个字段是Pyrogram为了简化操作封装的,Telegram原始API返回的对象只有id、access_hash等核心标识,需要通过Pyrogram的工具方法转换才能得到可用的file_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:05:17