Метод setMyCommands

Этот метод позволяет установить или изменить список команд меню бота для пользователей.

Описание

Используйте этот метод для изменения списка команд бота. Подробнее о командах бота смотрите в этом руководстве. Возвращает True при успешном выполнении.

Параметр Тип Обязательный Описание
commands Массив BotCommand Да Сериализованный в JSON список команд бота, который будет установлен как список команд бота. Можно указать не более 100 команд.
scope BotCommandScope Необязательный Сериализованный в JSON объект, описывающий область пользователей, для которых команды актуальны. По умолчанию используется BotCommandScopeDefault.
language_code String Необязательный Двухбуквенный код языка ISO 639-1. Если пусто, команды будут применяться ко всем пользователям из указанной области, для языка которых нет специальных команд.

Примеры

php

<?php

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

// Создаем массив команд
$commands = [
    [
        'command' => 'start',
        'description' => 'Запустить бота'
    ],
    [
        'command' => 'help',
        'description' => 'Показать справку'
    ],
    [
        'command' => 'settings',
        'description' => 'Настройки бота'
    ]
];

// Вариант 1: Установка команд для всех пользователей (по умолчанию)
$data1 = [
    'commands' => json_encode($commands)
];

// Вариант 2: Установка команд с указанием scope
$scope = [
    'type' => 'default'
];

$data2 = [
    'commands' => json_encode($commands),
    'scope' => json_encode($scope)
];

// Вариант 3: Установка команд для конкретного языка
$data3 = [
    'commands' => json_encode($commands),
    'language_code' => 'ru'
];

// Вариант 4: Установка команд для приватных чатов
$privateScope = [
    'type' => 'all_private_chats'
];

$data4 = [
    'commands' => json_encode($commands),
    'scope' => json_encode($privateScope),
    'language_code' => 'en'
];

// Отправка запроса (пример с вариантом 1)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'setMyCommands');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded'
]);

$response = curl_exec($ch);
curl_close($ch);

// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
    echo "Команды успешно установлены!\n";
} else {
    echo "Ошибка: " . $result['description'] . "\n";
}

// Альтернативный вариант с использованием file_get_contents
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query($data1)
    ]
]);

$response = file_get_contents($apiUrl . 'setMyCommands', false, $context);
$result = json_decode($response, true);

if ($result['ok']) {
    echo "Команды успешно установлены через file_get_contents!\n";
}

?>

python

import requests

# Токен вашего бота
BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"

# URL для API запроса
url = f"https://api.telegram.org/bot{BOT_TOKEN}/setMyCommands"

# Команды для установки
commands = [
    {
        "command": "start",
        "description": "Запустить бота"
    },
    {
        "command": "help",
        "description": "Показать справку"
    },
    {
        "command": "settings",
        "description": "Настройки бота"
    }
]

# Параметры запроса
params = {
    "commands": commands
}

# Отправка запроса
response = requests.post(url, json=params)

# Проверка результата
if response.status_code == 200:
    result = response.json()
    if result.get("ok"):
        print("Команды успешно установлены!")
    else:
        print(f"Ошибка: {result.get('description')}")
else:
    print(f"HTTP ошибка: {response.status_code}")

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

  • API 4.7. Добавлен метод setMyCommands
  • API 5.3. Обновлен метод setMyCommands: Добавлены параметры scope и language_code

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

  • BotCommand - Объект, представляющий команду бота с её текстом и описанием.
  • BotCommandScope - Объект определяет область применения команд бота, включая семь различных вариантов охвата пользователей и чатов.
  • BotCommandScopeDefault - Область действия команд бота по умолчанию, которая применяется при отсутствии более специфичных команд для пользователя.
Комментарии