如何在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
相关产品推荐
相关产品推荐

