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