Метод replaceStickerInSet

Метод заменяет существующий стикер в наборе стикеров на новый.

Описание

Используйте этот метод для замены существующего стикера в наборе стикеров на новый. Метод эквивалентен вызову 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 - Объект, описывающий стикер для добавления в набор стикеров, включая его файл, формат, связанные эмодзи и дополнительные параметры.
Комментарии