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

如何在Python中为Telegram Bot添加自定义表情包中的表情?

解决方案:Telegram机器人发送自定义表情(TeleBot/aiogram)

核心逻辑

Telegram的自定义表情(贴纸类)无法通过复制文本符号直接发送,必须依赖其专属的file_id或贴纸包set_name调用——这是因为自定义表情本质是存储在Telegram服务器上的文件,而非普通字符。你通过@stickers创建的贴纸包,每个表情都有唯一的标识,这才是机器人调用的关键。

TeleBot框架实现方式

虽然TeleBot文档未明确提及,但可以通过调用Telegram Bot API的原生方法实现:

  • 方法1:通过file_id单表情发送
    先获取目标表情的file_id:给机器人发送一次你要使用的自定义表情,然后在代码中通过telebot.types.Message.sticker.file_id提取该ID,之后即可用以下代码发送:
    import telebot
    
    bot = telebot.TeleBot("你的机器人Token")
    
    @bot.message_handler(commands=['send_sticker'])
    def send_custom_sticker(message):
        # 替换为你获取到的自定义表情file_id
        sticker_id = "CAACAgIAAxkBAAIBXmY..."
        bot.send_sticker(message.chat.id, sticker_id)
    
    bot.polling()
    
  • 方法2:通过贴纸包set_name批量调用
    若要调用整个贴纸包的表情,先在@stickers中找到贴纸包的链接,链接末尾的字符串即为set_name。然后通过get_sticker_set方法获取包内所有表情的file_id,再选择发送:
    sticker_set = bot.get_sticker_set("你的贴纸包set_name")
    # 发送贴纸包内第一个表情
    bot.send_sticker(chat_id, sticker_set.stickers[0].file_id)
    

aiogram框架的支持情况

aiogram完全支持自定义表情发送,写法更贴合异步逻辑:

  • 同样需要先获取file_id或set_name,示例代码如下:
    from aiogram import Bot, Dispatcher, types
    from aiogram.utils import executor
    
    bot = Bot(token="你的机器人Token")
    dp = Dispatcher(bot)
    
    @dp.message_handler(commands=['send_sticker'])
    async def send_custom_sticker(message: types.Message):
        sticker_id = "CAACAgIAAxkBAAIBXmY..."
        await bot.send_sticker(message.chat.id, sticker_id)
    
    if __name__ == '__main__':
        executor.start_polling(dp)
    
  • aiogram也支持通过set_name批量获取贴纸包内容,逻辑与TeleBot一致,仅需适配异步语法。

注意事项

  • 自定义表情需先发送给机器人一次,确保机器人能获取到其file_id权限
  • 禁止直接复制表情的文本符号发送,必须使用file_id或set_name调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:25:07