Telegram bot как скрыть inline keyboard?
Есть inline клавиатуры:
Нужно сделать так, чтобы при выводе следующей/следующих, предыдущие скрывались. Как это возможно сделать?
- Вопрос задан более трёх лет назад
- 8236 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1

Для правильного вопроса надо знать половину ответа
Послать сообщение editMessageReplyMarkup, указав в параметрах chat_id и message_id, и не указывая reply_markup.
Ответ написан более трёх лет назад
Нравится 7 2 комментария
XenK @XenK Автор вопроса
Rsa97: пытаюсь выполнить такое действие:
https://api.telegram.org/bot/editMessageReplyMarku. , но получаю Bad Request: message not found.

XenK: chat_id должен содержать идентификатор чата, message_id — идентификатор того сообщения, у которого надо убрать клавиатуру.
Идентификатор сообщения можно получить из ответа при отправке сообщения.
Telegram Bot Api: Как скрыть клавиатуру правильно?
Как отловить баг не пойму, сам прохожусь по меню бота — все ок, а пользователи такое ощущение, что у них не исчезает клавиатура (кнопки меню) и они по ним торкают вместо того чтобы вводить что их просят, данные не валидируемые, произвольный текст, поэтому соотв-но в базу пишутся значения из кнопок.
Предполагаю, что не скрывается клавиатура у них.
Использую флаги для клавиатуры:
one_time_keyboard : true, resize_keyboard:true
Но, если в следующем сообщении пользователю клавиатуры небыло то в свернутом виде последняя клавиатура присутствует.
Что-то еще есть, что нужно делать, чтобы ее окончательно убить?
- Вопрос задан более трёх лет назад
- 7902 просмотра
Telegram Bot- размер inline_keyboard
Подскажите как можно изменить размер inline_keyboard например 100% ширины экрана? Если слово длинное telegram добавляет троеточие и не очень презентабельно получается.
Отслеживать
5,960 3 3 золотых знака 22 22 серебряных знака 44 44 бронзовых знака
задан 27 янв 2017 в 16:08
11 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
никак, единственный вариант — это сделать одну кнопку в ряду, тогда у неё будет максимально возможная ширина
31 янв 2017 в 5:30
@Anatol, не факт. Даже если кнопка будет одна, то она подстраивается под содержимое. Чем более длинный текст, тем длиннее клавиатура. Но у неё есть предел отображения, на телефонах он меньше, а на компьютерах больше (в виду особенности размера экрана каждого из устройств).
6 мар в 9:59
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Приветствую. Размер кнопки меняется в зависимости от значения параметра row_width Вашей Inline-клавиатуры. Минимальное значение 1 (соответствует растяжению кнопки по длине текстового сообщения над оной), среднее значение 2 (делит место под текстовым сообщением пополам между двумя Inline-кнопками) и минимальное значение 3 (делит место под текстовым сообщением поровну между тремя Inline-кнопками). Примеры:
from telebot import types kb1 = Types.InlineKeyboardMarkup(row_width=1) # самая длинная кнопка kb2 = Types.InlineKeyboardMarkup(row_width=2) # деление пополам kb3 = Types.InlineKeyboardMarkup(row_width=3) # деление на три равных кнопки
Отслеживать
ответ дан 23 авг 2017 в 21:10
46 4 4 бронзовых знака
Если Вы используете инлайн клавиатуру(независимо от библиотеки) — ширина кнопок будет подстраиваться под текст отправленного сообщения с учетом row_width
Отслеживать
ответ дан 7 фев 2021 в 23:56
стоило опубликовать это как комментарий, а не ответ. чтобы вам стали доступны комментарии к чужим сообщениям, надо набрать пятьдесят баллов репутации — это всего пять голосов «за» любой ваш ответ или вопрос
8 фев 2021 в 0:00
@aleksandrbarakin, вроде на ответ похоже?
8 фев 2021 в 11:37
@Qwertiy, вопрос вроде как про ширину клавиатуры, а в «ответе» вижу лишь доп. информацию про поведение ширины кнопок. по-моему, это очень похоже на уточняющий комментарий к ответу N.L0rem
8 фев 2021 в 11:54
@aleksandrbarakin, но ведь многоточие как раз добавляется на кнопку? Я никогда не видел, чтоб многоточие стояло вместо кнопок.
8 фев 2021 в 12:06
Откуда вы все вытягиваете магическое значение row_width!? Я может слепой но в оф. документации даже нет такого параметра.
6 мар в 9:53
Есть один способ, не совсем корректный, но рабочий.
Краткое описание: Суть метода в создании N-го количества символов в одной из кнопок. Минус метода в том что вычислить автоматически ширину невозможно. Пользователю необходимо будет это сделать вручную. Потом на основании одного размера сделать функцию адаптивной клавиатуры. То есть, она будет высчитывать разницу в символах (основной текст) и корректировать количество пробелов для достижения наилучшего результата.
- Создаем файл config_user.json
$config_user = json_decode( file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/botID/source/config_user.json'), true);
if ((!$config_user[$chat_id]) or ($input_key == 'message' and $config_user[$chat_id]['editing'] === true)) < $config_user[$chat_id] = [ 'keyboard_width' =>0, 'keyboard_caption' => NULL, 'remember' => false, 'editing' => true ]; file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/botID/source/config_user.json', json_encode($config_user, JSON_UNESCAPED_UNICODE)); >
- Отправляем сообщение:
if ($config_user[$chat_id]['editing'] === true) < $config_user[$chat_id] = [ 'keyboard_width' =>0, 'keyboard_caption' => NULL, 'remember' => false, 'editing' => true ]; file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/botID/source/config_user.json', json_encode($config_user, JSON_UNESCAPED_UNICODE)); TelegramAPI::sendMessage($text_control['message']['start']['edit_width'], TelegramKeyboard::widthEdit()); > else TelegramAPI::sendMessage($text_control['message']['start']['default'], TelegramKeyboard::mainMenu());
class TelegramAPI < /** * @var int $chat_id ID пользователя/чата * @var string $parse_mode Режим разбора сущностей в тексте сообщения * @var bool $protect_content Защищает содержимое отправленного сообщения от пересылки и сохранения */ public static int $chat_id; public static string $parse_mode = 'html'; public static bool $protect_content = false; public static int|null $message_id; private static string $url; /** * @param string $token * @return void */ public static function init(string $token): void < self::$url = "https://api.telegram.org/bot/"; > /** * --- * @param string $method Метод API * @param array $request_params Готовый запрос для отправки * @return bool|array|string */ private static function curl(string $method, array $request_params): bool|array|string < $ch = curl_init(self::$url . $method); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $request_params); $result = curl_exec($ch); curl_close($ch); return $result; >/** * --- * @param string $text Текст отправляемого сообщения * @param string|null $reply_markup Дополнительные возможности интерфейса * @return bool|array|string */ public static function sendMessage(string $text = 'Hello, World!', ?string $reply_markup = null): bool|array|string < return static::curl(__FUNCTION__, [ 'chat_id' =>self::$chat_id, 'text' => $text, 'parse_mode' => self::$parse_mode, 'protect_content' => self::$protect_content, 'reply_markup' => $reply_markup ]); > >
class TelegramKeyboard < private static string $keyboardType; private static array $keyboard = []; private static int $row = 0; public static array $text_control; public static ?string $width_caption = null; public static ?int $width_value = null; /** * @param string $keyboardType * @param bool $resize_keyboard * @param bool $oneTimeKeyboard * @return void */ private static function init( string $keyboardType = 'inline_keyboard', bool $resize_keyboard = true, bool $oneTimeKeyboard = false): void < self::$text_control = self::$text_control['keyboard']; self::$keyboardType = $keyboardType; static::$keyboard = [ $keyboardType =>[], 'resize_keyboard' => $resize_keyboard, 'one_time_keyboard' => $oneTimeKeyboard ]; static::$row = 0; > /** * @return void */ private static function nextRow(): void < static::$row++; >/** * @param string $inline_mode * @param string|null $inline_value * @param string|null $text * @param string|null $callback_action * @param string|null $callback_type * @param string|null $callback_variation * @return void */ private static function addRow( string $inline_mode = 'callback_data', string $inline_value = null, string $text = null, ?string $callback_action = null, ?string $callback_type = null, ?string $callback_variation = null): void < switch ($inline_mode) < case 'callback_data': $button = [ "text" =>$text, "callback_data" => $callback_action ? "action:$callback_action" : 'null' ]; if ($callback_type) < $button["callback_data"] .= "|type:$callback_type"; >if (!is_null($callback_variation)) < $button["callback_data"] .= "|variation:$callback_variation"; >break; default: $button = [ "text" => $text, $inline_mode => $inline_value ]; break; > static::$keyboard[self::$keyboardType][static::$row][] = $button; > /** * @param string $text Текст для отображения * @return string */ private static function adaptedKeyboard(string $text): string < if (($count = iconv_strlen($text)) >14) < self::$width_caption = substr(self::$width_caption, 0, -($count - 13)); >return "ㅤ" . self::$width_caption . $text . self::$width_caption . "ㅤ"; > /** * @return bool|string */ public static function widthEdit(): bool|string < self::init(); self::addRow( text: self::adaptedKeyboard('Save Button'), callback_action: "keyboard_width", callback_type: "save_width", callback_variation: self::$width_value); self::nextRow(); self::addRow( text: self::$text_control['width']['decrease'], callback_action: 'keyboard_width', callback_variation: 'decrease'); self::addRow( text: self::$text_control['width']['increase'], callback_action: 'keyboard_width', callback_variation: 'increase'); return json_encode(self::$keyboard); >public static function mainMenu(): bool|string < self::init(); self::addRow( text: self::adaptedKeyboard(self::$text_control['main_menu']['search']), callback_action: 'searchMainMenu'); self::nextRow(); self::addRow(text: 'Button 1'); self::addRow(text: 'Button 2'); return json_encode(self::$keyboard); >>
- Обработка нажатой кнопки:
/* Если отправлено продолжить */ if ($callback['type'] == 'save_width') < $callback['variation']-- >is_integer($callback['variation']); $config_user[$chat_id] = [ 'keyboard_width' => $callback['variation'] + 1, 'keyboard_caption' => str_repeat(" ", $callback['variation'] + 1), 'remember' => false, 'editing' => false ]; file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/botID/source/config_user.json', json_encode($config_user, JSON_UNESCAPED_UNICODE)); TelegramAPI::editMessageText( $text_control['start']['complete'], TelegramKeyboard::mainMenu()); > else < /* Проверка типа нажатой кнопки */ $callback['variation'] = match ($callback['variation']) < 'decrease' =>$config_user[$chat_id]['keyboard_width'] - 1, #Добавляем 1 символ к ширине 'increase' => $config_user[$chat_id]['keyboard_width'] + 1, #Убираем 1 символ к ширине >; if ($callback['variation'] > 42) #Если $callback вышел больше 42, то устанавливаем значение 42 $callback['variation'] = 42; elseif ($callback['variation'] < 0) #Если $callback вышел меньше 0, то устанавливаем значение 0 $callback['variation'] = 0; /* Передаём значения в массив */ #Генерируем N-количество пустых символов $config_user[$chat_id]['keyboard_caption'] = str_repeat(" ", $callback['variation']); $config_user[$chat_id]['keyboard_width'] = $callback['variation']; /* Сохраняем полученные данные в config_user.json */ file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/botID/source/config_user.json', json_encode($config_user, JSON_UNESCAPED_UNICODE)); /* Передача значений */ TelegramKeyboard::$width_caption = $config_user[$chat_id]['keyboard_caption']; TelegramKeyboard::$width_value = $config_user[$chat_id]['keyboard_width']; /* Редактировать ранее отправленное сообщение */ TelegramAPI::editMessageText( $text_control['start']['edit_width'], TelegramKeyboard::widthEdit()); >

Минимальный размер:

+/- средний размер:

Максимальный размер:
PS. Не обращайте внимание на то что в коде кнопок меньше чем на скриншотах. Работоспособность от этого не меняется.
Как скрыть встроенную клавиатуру в Telegram
Telegram — популярный мессенджер, который предоставляет пользователям широкие возможности для общения и удобную интерфейсную платформу. Один из самых востребованных инструментов в Telegram – inline клавиатура, которая обеспечивает быстрый доступ к функциям и командам, не требуя дополнительных действий от пользователя.
Однако, иногда возникают ситуации, когда необходимо скрыть inline клавиатуру для того, чтобы дать пользователю возможность сосредоточиться на чтении сообщений или избежать случайного нажатия кнопок. В данной статье мы рассмотрим подробную инструкцию о том, как скрыть inline клавиатуру в Telegram.
Скрыть inline клавиатуру в Telegram можно с помощью команды «/hidekeyboard». Для этого достаточно написать данную команду в поле ввода сообщений и отправить ее. Также можно использовать специальный символ «⌨️», который будет выводиться рядом с сообщением и убирать inline клавиатуру при нажатии на него.
Общая информация о Telegram
Одной из главных особенностей Telegram является его фокус на безопасности и конфиденциальности. Весь трафик между устройствами пользователей и серверами Telegram шифруется, что предотвращает доступ к сообщениям и файлам третьих лиц. Кроме того, Telegram предлагает функцию «секретного чата», где сообщения могут быть автоматически удалены через определенное время.
Telegram также отличается высокой производительностью и быстрым передачей сообщений. Используя прогрессивную систему доставки сообщений, Telegram обеспечивает доставку даже при нестабильном соединении или низкой скорости интернета.
В Telegram есть множество функций, таких как создание групповых чатов, рассылка сообщений, возможность отправлять файлы, изображения, аудиозаписи, видео и другие типы мультимедиа. Кроме того, пользователи могут создавать и использовать ботов для автоматизации определенных задач.
Telegram также поддерживает различные платформы, включая iOS, Android, Windows, macOS и Linux, что позволяет пользователям общаться с любого устройства.
В целом, Telegram является популярным мессенджером с мощными функциями, высокой безопасностью и широкой поддержкой платформ. Он предлагает множество возможностей для общения и обмена информацией, делая его идеальным выбором для множества пользователей по всему миру.
Как использовать inline клавиатуру в Telegram
Inline клавиатура в Telegram предоставляет возможность добавить интерактивность в сообщения. Она позволяет пользователям взаимодействовать с ботом, не вводя текстовые команды, а выбирая пункты меню с помощью кнопок.
Для использования inline клавиатуры в Telegram, вам понадобится знание языка программирования и использование таких технологий, как Bot API и Webhooks. Вот несколько шагов, которые помогут вам начать использовать inline клавиатуру:
- Создайте своего бота в Telegram с помощью BotFather.
- Получите токен вашего бота и сохраните его для дальнейшего использования.
- Напишите код для вашего бота, используя Telegram Bot API и язык программирования, который вы выбрали.
- Включите inline режим для вашего бота, чтобы он мог отвечать на inline запросы.
- Создайте inline клавиатуру с помощью JSON-объектов и отправьте ее как часть сообщения вашему пользователю.
- Обработайте выбранные пользователем кнопки и выполните соответствующее действие.
Inline клавиатура может быть полезна для различных сценариев использования, таких как выбор категории товаров, отправка местоположения или выбор ответа на опрос. Она помогает повысить удобство использования и взаимодействия с вашим ботом.
Начать использовать inline клавиатуру в Telegram можно прямо сейчас, следуя описанным выше шагам. Используйте ее для создания более интерактивного и привлекательного опыта взаимодействия с вашими пользователями!
Подробная инструкция по скрытию inline клавиатуры в Telegram
Скрытие inline клавиатуры в Telegram можно осуществить с помощью специального метода editMessageReplyMarkup. Этот метод позволяет изменять клавиатуру в уже отправленном сообщении.
Для скрытия inline клавиатуры необходимо выполнить следующие шаги:
- Получите chat_id и message_id сообщения, в котором расположена inline клавиатура.
- Используя метод editMessageReplyMarkup, отправьте запрос на изменение клавиатуры.
- Установите параметр reply_markup в значении , то есть передайте пустой массив кнопок.
Ниже приведен пример кода на языке Python, демонстрирующий, как скрыть inline клавиатуру в Telegram:
import requests def hide_inline_keyboard(chat_id, message_id): url = f"https://api.telegram.org/bot[TOKEN]/editMessageReplyMarkup" payload = < "chat_id": chat_id, "message_id": message_id, "reply_markup": > response = requests.post(url, json=payload) return response.json() # Замените [TOKEN] на ваш токен бота # Укажите chat_id и message_id сообщения с inline клавиатурой chat_id = 123456789 message_id = 123 hide_inline_keyboard(chat_id, message_id)
В этом примере мы используем библиотеку Requests для отправки POST-запроса к Telegram API. Вам также потребуется заменить [TOKEN] на актуальный токен вашего бота, а также указать chat_id и message_id сообщения, где нужно скрыть inline клавиатуру.
После выполнения запроса клавиатура в указанном сообщении будет скрыта. Теперь вы знаете, как скрыть inline клавиатуру в Telegram с помощью метода editMessageReplyMarkup.
