Метод uploadStickerFile

Метод загружает файл стикера для последующего использования в создании или изменении наборов стикеров.

Описание

Используйте этот метод для загрузки файла со стикером для последующего использования в методах createNewStickerSet, addStickerToSet или replaceStickerInSet (файл может быть использован многократно). При успехе возвращает загруженный File.

Параметр Тип Обязательный Описание
user_id Integer Да Идентификатор пользователя-владельца файла стикера
sticker InputFile Да Файл со стикером в формате .WEBP, .PNG, .TGS или .WEBM. Технические требования см. на https://core.telegram.org/stickers. Подробнее об отправке файлов »
sticker_format String Да Формат стикера, должен быть одним из: «static», «animated», «video»

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Параметры для uploadStickerFile
$userId = 123456789; // ID пользователя-владельца стикера
$stickerFilePath = '/path/to/sticker.webp'; // Путь к файлу стикера
$stickerFormat = 'static'; // Формат: static, animated или video

// Подготовка данных для multipart/form-data
$postData = [
    'user_id' => $userId,
    'sticker_format' => $stickerFormat,
    'sticker' => new CURLFile($stickerFilePath)
];

// Инициализация cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'uploadStickerFile');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
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']) {
    $fileId = $result['result']['file_id'];
    echo "Файл успешно загружен. File ID: {$fileId}\n";
    
    // Теперь file_id можно использовать в:
    // createNewStickerSet, addStickerToSet или replaceStickerInSet
    // Пример:
    // $stickerFileId = $fileId;
} else {
    echo "Ошибка: " . $result['description'] . "\n";
}

// Альтернативный вариант с использованием библиотеки (например, telegram-bot/api)
/*
use TelegramBot\Api\BotApi;

$bot = new BotApi($botToken);

try {
    $file = $bot->uploadStickerFile(
        $userId,
        new \CURLFile($stickerFilePath),
        $stickerFormat
    );
    
    echo "File ID: " . $file->getFileId() . "\n";
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage() . "\n";
}
*/
?>

python

import requests
from pathlib import Path

def upload_sticker_file(bot_token, user_id, sticker_path, sticker_format):
    """
    Загружает файл со стикером для последующего использования.
    
    :param bot_token: Токен бота
    :param user_id: ID пользователя-владельца стикера
    :param sticker_path: Путь к файлу стикера
    :param sticker_format: Формат стикера ('static', 'animated', 'video')
    :return: Ответ от Telegram API
    """
    
    url = f"https://api.telegram.org/bot{bot_token}/uploadStickerFile"
    
    # Проверяем существование файла
    sticker_file = Path(sticker_path)
    if not sticker_file.exists():
        raise FileNotFoundError(f"Файл {sticker_path} не найден")
    
    # Определяем MIME-тип в зависимости от формата
    mime_types = {
        'static': 'image/webp',
        'animated': 'application/x-tgsticker',
        'video': 'video/webm'
    }
    
    mime_type = mime_types.get(sticker_format)
    if not mime_type:
        raise ValueError(f"Неподдерживаемый формат: {sticker_format}")
    
    # Подготавливаем данные для отправки
    with open(sticker_path, 'rb') as file:
        files = {
            'sticker': (sticker_file.name, file, mime_type)
        }
        
        data = {
            'user_id': user_id,
            'sticker_format': sticker_format
        }
        
        # Отправляем запрос
        response = requests.post(url, data=data, files=files)
        
    return response.json()

# Пример использования
if __name__ == "__main__":
    # Конфигурация
    BOT_TOKEN = "ВАШ_ТОКЕН_БОТА"
    USER_ID = 123456789  # ID пользователя
    STICKER_PATH = "path/to/your/sticker.webp"  # Путь к файлу стикера
    STICKER_FORMAT = "static"  # Формат стикера
    
    try:
        result = upload_sticker_file(BOT_TOKEN, USER_ID, STICKER_PATH, STICKER_FORMAT)
        print(f"Результат: {result}")
        
        if result.get('ok'):
            file_id = result['result']['file_id']
            print(f"Файл успешно загружен. File ID: {file_id}")
        else:
            print(f"Ошибка: {result.get('description')}")
            
    except Exception as e:
        print(f"Произошла ошибка: {e}")

История изменений

  • API 3.2. Добавлен метод uploadStickerFile
  • API 6.6. Обновлен метод uploadStickerFile: Заменен параметр png_sticker на параметры sticker и sticker_format

Дополнительно

  • createNewStickerSet - Метод создает новый набор стикеров для пользователя, который бот сможет редактировать.
  • addStickerToSet - Метод добавляет новый стикер в набор стикеров, созданный ботом, с ограничениями на количество стикеров в зависимости от типа набора.
  • replaceStickerInSet - Метод заменяет существующий стикер в наборе стикеров на новый.
  • File - Объект, представляющий файл, доступный для скачивания через Telegram Bot API, с информацией о его идентификаторах, размере и пути.
  • InputFile - Объект, представляющий содержимое файла для загрузки через multipart/form-data.
Комментарии