Обновить

Комментарии 4

А где почитать про Меню команд и метод его задания? Не нашел в документации

Спасибо, что обратили внимание; подкорректировал публикацию. Это не самостоятельный метод, а часть недокументированного запроса PATCH /me на изменение данных бота, который был подсмотрен в официальной TypeScript-либе MAX и про который я здесь упоминал. На чистом PHP работающий код задания меню команд выглядит так:

<?php
  
/**
 * @param string $botToken токен бота
 * @param array $commands Массив команд. Каждый элемент - key-value массив с элементами:
 *
 *    name - название команды (без дроби в начале)
 *    description - описание команды.
 *
 * @return mixed Ответ от сервера
 */
function setCommandMenu(string $botToken, array $commands): mixed
{
    /** @var string $url URL запроса */
    $url = 'https://platform-api.max.ru/me';
    /** @var CurlHandle $ch handle объекта cURL */
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, false);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Host: ' . parse_url($url, PHP_URL_HOST),
        'Accept: application/json',
        'Content-Type: application/json',
        'Authorization: ' . $botToken,
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
        'commands' => $commands,
    ], JSON_UNESCAPED_UNICODE));
    return curl_exec($ch);
}

echo setCommandMenu('токен бота', [
    [
        'name' => 'command1',
        'description' => 'Описание команды 1',
    ],
    [
        'name' => 'command2',
        'description' => 'Описание команды 2',
    ],
]) . "\n";

Пока проверял код, освежил память и немного подысследовал вопрос. Результаты:

  • Работает в личке или в чате, где бот прописан админом (пользователя чата не пробовал, в чате у меня как у вызывающего меню права админа, под юзером не пробовал);

  • На клиенте Windows-десктопа не работает; работает под Android; веб-версию и огрызки не проверял;

  • Если у пользователя открыт чат с ботом (или чат, где бот-админ), а в боте в этот момент меняется меню команд, оперативного изменения не произойдёт. Нужно вылезть обратно в список чатов, снова открыть переписку с ботом или чат и вызвать меню нажатием / - тогда заработает.

  • Если в массиве в разных элементах дублируются названия команд, это будет проглочено как API, так и клиентом: будут два пункта. Не ругнётся и не сбойнёт ничего.

Спасибо, я таки решил воспользоваться maxapi с гитхаба)

В общем разумно. Единственная рекомендация - придержать копию репозитория где-то в бэкапе у себя на случай, если гитхаб внезапно заблокирует репозитории разработчиков плюшек для MAX. Ну и иметь возможность оперативно этот бэкап подключить к своему проекту, пока коллеги не перевыложат репозиторий куда-то ещё и не дадут официальные инструкции по переходу.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации