Описание
Используйте этот метод для замены существующего стикера в наборе стикеров на новый. Метод эквивалентен вызову deleteStickerFromSet, затем addStickerToSet, затем setStickerPositionInSet. Возвращает True при успешном выполнении.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| user_id | Integer | Да | Идентификатор пользователя, владельца набора стикеров |
| name | String | Да | Название набора стикеров |
| old_sticker | String | Да | Идентификатор файла заменяемого стикера |
| sticker | InputSticker | Да | Объект в формате JSON с информацией о добавляемом стикере. Если точно такой же стикер уже был добавлен в набор, то набор остаётся неизменным. |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";
// Параметры для замены стикера
$params = [
'user_id' => 123456789, // ID владельца набора стикеров
'name' => 'my_sticker_set_by_mybot', // Название набора стикеров
'old_sticker' => 'CAACAgIAAxkBAAIB...', // File ID заменяемого стикера
'sticker' => json_encode([
'sticker' => new CURLFile('path/to/new_sticker.webp'), // Новый файл стикера
'emoji_list' => ['😊'], // Список эмодзи
'format' => 'static', // Формат: static, animated, video
'mask_position' => null // Позиция маски (для масок)
])
];
// Отправка запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'replaceStickerInSet');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: multipart/form-data'
]);
$response = curl_exec($ch);
curl_close($ch);
// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
echo "Стикер успешно заменен!";
} else {
echo "Ошибка: " . $result['description'];
}
// Альтернативный вариант с использованием библиотеки (например, TelegramBotPHP)
class StickerReplacer {
private $botToken;
public function __construct($token) {
$this->botToken = $token;
}
public function replaceSticker($userId, $setName, $oldStickerId, $newStickerData) {
$data = [
'user_id' => $userId,
'name' => $setName,
'old_sticker' => $oldStickerId,
'sticker' => json_encode($newStickerData)
];
return $this->sendRequest('replaceStickerInSet', $data);
}
private function sendRequest($method, $data) {
$url = "https://api.telegram.org/bot{$this->botToken}/{$method}";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: multipart/form-data']
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Пример использования класса
$replacer = new StickerReplacer('YOUR_BOT_TOKEN');
$result = $replacer->replaceSticker(
123456789,
'my_sticker_set',
'CAACAgIAAxkBAAIB...',
[
'sticker' => new CURLFile('new_sticker.webp'),
'emoji_list' => ['🎉'],
'format' => 'static'
]
);
if ($result['ok']) {
// Действия при успешной замене
file_put_contents('log.txt', date('Y-m-d H:i:s') . " Стикер заменен\n", FILE_APPEND);
}
?>
python
import asyncio
from telegram import Bot, InputSticker
from telegram.constants import StickerFormat
async def replace_sticker_in_set_example():
bot = Bot("YOUR_BOT_TOKEN")
user_id = 123456789 # ID владельца стикерпака
sticker_set_name = "my_sticker_set_by_my_bot"
old_sticker_file_id = "CAACAgIAAxkBAAIB..." # ID заменяемого стикера
# Создаем новый стикер
new_sticker = InputSticker(
sticker=open("new_sticker.webp", "rb"), # или file_id строкой
emoji_list=["😊"],
format=StickerFormat.STATIC # или .ANIMATED, .VIDEO
)
try:
result = await bot.replace_sticker_in_set(
user_id=user_id,
name=sticker_set_name,
old_sticker=old_sticker_file_id,
sticker=new_sticker
)
print(f"Стикер заменен: {result}")
except Exception as e:
print(f"Ошибка: {e}")
# Для синхронного использования
def replace_sticker_sync():
import asyncio
asyncio.run(replace_sticker_in_set_example())
# Пример с file_id вместо файла
async def replace_with_file_id():
bot = Bot("YOUR_BOT_TOKEN")
await bot.replace_sticker_in_set(
user_id=123456789,
name="my_sticker_set_by_my_bot",
old_sticker="CAACAgIAAxkBAAIB...old",
sticker=InputSticker(
sticker="CAACAgIAAxkBAAIB...new", # file_id нового стикера
emoji_list=["🎉"],
format=StickerFormat.STATIC
)
)
История изменений
- API 7.2. Добавлен метод replaceStickerInSet
Дополнительно
- deleteStickerFromSet - Метод удаляет стикер из набора, созданного ботом, и возвращает True при успешном выполнении.
- addStickerToSet - Метод добавляет новый стикер в набор стикеров, созданный ботом, с ограничениями на количество стикеров в зависимости от типа набора.
- setStickerPositionInSet - Перемещает стикер в наборе бота на указанную позицию.
- InputSticker - Объект, описывающий стикер для добавления в набор стикеров, включая его файл, формат, связанные эмодзи и дополнительные параметры.