引言:为什么用Bot管理贴纸包
Telegram贴纸包是用户表达个性的重要方式,而通过Bot API创建和上传贴纸,可以自动化整个流程,极大提升效率。无论是个人制作个性化贴纸包,还是面向社群运营批量发布主题贴纸,掌握Telegram Bot上传贴纸到贴纸包的完整流程都是开发者必备技能。本文将从零开始,详细讲解从创建贴纸包到最终发布的每一个步骤,并提供可运行的代码示例。
前置条件:准备你的机器人
开始之前,你需要满足以下条件:
- 一个由@BotFather创建的Bot Token。
- Bot已通过@BotFather成功关闭隐私模式,以便处理群组中的命令(如果需要在群内管理贴纸包)。
- 用于制作贴纸的PNG或WEBP图片(静态贴纸)或TGS/LOTTIE文件(动态贴纸),尺寸和格式必须符合Telegram要求。
官方要求:静态贴纸尺寸需为512x512像素,且为PNG(带透明背景)或WEBP格式;动态贴纸需为LOTTIE格式(TGS文件),且画布尺寸同样为512x512。
第一步:创建新贴纸包(createNewStickerSet)
上传第一张贴纸之前,你需要先创建一个贴纸包。调用createNewStickerSet方法,请求参数如下:
user_id:贴纸包所有者的Telegram用户ID(整数)。name:贴纸包名称,必须是英文、数字和下划线,以_by_<bot_username>结尾。title:贴纸包标题,将显示在贴纸面板中,长度1-64字符。sticker:包含首张贴纸的JSON对象,字段包括sticker(文件)、emoji_list(关联表情)、format(格式:static/ video/ animated)等。
以下为Python(使用requests库)示例,上传一张PNG格式的静态贴纸:
import requests
BOT_TOKEN = 'YOUR_BOT_TOKEN'
API_URL = f'https://api.telegram.org/bot/'
# 准备贴纸(multipart/form-data 上传)
files = {
'sticker': ('sticker.png', open('sticker.png', 'rb'), 'image/png')
}
data = {
'user_id': 123456789, # 替换为目标用户ID
'name': 'my_stickers_by_MyBot',
'title': 'My Stickers',
'sticker': json.dumps({
'emoji_list': ['😀'],
'format': 'static'
}),
'sticker_format': 'static',
'sticker_type': 'regular',
'needs_repainting': True
}
response = requests.post(API_URL + 'createNewStickerSet', data=data, files=files)
print(response.json())注意:user_id必须是Bot可以发消息的用户。通常你可以先让用户发送任意消息给Bot,再通过getUpdates获取其ID。
第二步:上传后续贴纸(addStickerToSet)
如果贴纸包中包含多张贴纸,通过addStickerToSet方法逐张添加。参数包括:user_id(必须与创建者一致)、name(贴纸包名称)、sticker(新贴纸的JSON对象)。示例:
import requests, json, glob
# 假设目录下有多张PNG图片
for file_path in glob.glob('stickers/*.png'):
files = {'sticker': (file_path.split('/')[-1], open(file_path, 'rb'), 'image/png')}
data = {
'user_id': 123456789,
'name': 'my_stickers_by_MyBot',
'sticker': json.dumps({'emoji_list': ['🎉'], 'format': 'static'})
}
r = requests.post(API_URL + 'addStickerToSet', data=data, files=files)
print(file_path, r.status_code, r.json())每成功添加一张,返回的JSON中ok字段为true。请控制请求频率,避免触发限流(429错误)。
第三步:设置贴纸包封面(可跳过)
默认封面是第一张贴纸。若要更换,调用setStickerSetThumb方法,参数为name和user_id,以及thumb(PNG或WEBP图片,方形,建议512x512)。
files = {'thumb': ('thumb.png', open('thumb.png', 'rb'), 'image/png')}
data = {'name': 'my_stickers_by_MyBot', 'user_id': 123456789}
requests.post(API_URL + 'setStickerSetThumb', data=data, files=files)第四步:发布与分享
创建并添加完所有贴纸后,用户可以通过以下方式访问贴纸包:
- 在Telegram中直接点击贴纸包专属链接,格式为
https://t.me/addstickers/<sticker_set_name>。 - Bot可以发送一个
StickerSet链接给用户,或通过内联键盘引导用户点击。
你可以使用sendMessage发送链接,或使用sendSticker发送其中一张贴纸,用户点击后即可看到整个贴纸包。
常见错误与排查
- 400 Bad Request: STICKER_PNG_DIMENSIONS — 图片尺寸不是512x512,请使用图像处理工具调整。
- 401 Unauthorized — Token错误或已失效,重新向@BotFather获取。
- 403 Forbidden — Bot不能向该用户发送消息,请确保用户先主动启动Bot。
- 409 Conflict — 重复调用创建同名贴纸包,检查
name唯一性。 - Sticker set name is already occupied — 换一个名称,确保以
_by_<bot_username>结尾。
另外,若上传带透明通道的PNG,建议使用sticker_format和sticker_type明确指定格式,避免默认按静态处理。
完整代码整合
以下是一个简单的Python脚本,一次性创建贴纸包并添加所有贴纸:
import requests, json, os, glob
TOKEN = 'YOUR_BOT_TOKEN'
API = f'https://api.telegram.org/bot/'
USER_ID = 123456789
SET_NAME = 'cool_stickers_by_MyBot'
SET_TITLE = 'Cool Stickers'
EMOJI = '😎' # 全部使用同一表情,也可为每张贴纸指定不同表情
# 创建贴纸包
files = {'sticker': (os.path.basename(stickers_dir_list[0]), open(stickers_dir_list[0], 'rb'), 'image/png')}
data = {
'user_id': USER_ID,
'name': SET_NAME,
'title': SET_TITLE,
'sticker': json.dumps({'emoji_list': [EMOJI]}),
'sticker_format': 'static'
}
r = requests.post(API + 'createNewStickerSet', data=data, files=files)
if r.json().get('ok'):
print('贴纸包创建成功')
else:
print('创建失败:', r.json())
# 添加后续贴纸
for i, file_path in enumerate(stickers_dir_list[1:], start=2):
with open(file_path, 'rb') as f:
files = {'sticker': (os.path.basename(file_path), f, 'image/png')}
data = {'user_id': USER_ID, 'name': SET_NAME,
'sticker': json.dumps({'emoji_list': [EMOJI]})}
r = requests.post(API + 'addStickerToSet', data=data, files=files)
print(f'第张贴纸:', r.json()['description'] if not r.json()['ok'] else '成功')请确保stickers_dir_list变量正确指向你的贴纸文件列表。
总结
通过createNewStickerSet和addStickerToSet方法,你可以轻松实现Telegram Bot上传贴纸到贴纸包的完整流程。关键在于理解API参数格式、遵守图片尺寸和命名规范,以及处理常见网络错误。掌握这些后,你还可以进一步开发自动贴纸制作、批量上传等高级功能,为用户提供更丰富的个性化体验。
如果你在开发中遇到其他问题,欢迎参考Telegram官方Bot API文档,或在本站开发者资源栏目中搜索更多API教程。