Перейти к содержимому

Как скрыть inline клавиатуру telegram

  • автор:

Telegram bot как скрыть inline keyboard?

038d74d94fe94f41bf284f442b88070a.PNG

Есть inline клавиатуры:

Нужно сделать так, чтобы при выводе следующей/следующих, предыдущие скрывались. Как это возможно сделать?

  • Вопрос задан более трёх лет назад
  • 8236 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1

Rsa97

Для правильного вопроса надо знать половину ответа

Послать сообщение editMessageReplyMarkup, указав в параметрах chat_id и message_id, и не указывая reply_markup.

Ответ написан более трёх лет назад
Нравится 7 2 комментария
XenK @XenK Автор вопроса

Rsa97: пытаюсь выполнить такое действие:
https://api.telegram.org/bot/editMessageReplyMarku. , но получаю Bad Request: message not found.

Rsa97

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-го количества символов в одной из кнопок. Минус метода в том что вычислить автоматически ширину невозможно. Пользователю необходимо будет это сделать вручную. Потом на основании одного размера сделать функцию адаптивной клавиатуры. То есть, она будет высчитывать разницу в символах (основной текст) и корректировать количество пробелов для достижения наилучшего результата.

  1. Создаем файл 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)); > 
  1. Отправляем сообщение:
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); >> 
  1. Обработка нажатой кнопки:
/* Если отправлено продолжить */ 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 клавиатуру:

  1. Создайте своего бота в Telegram с помощью BotFather.
  2. Получите токен вашего бота и сохраните его для дальнейшего использования.
  3. Напишите код для вашего бота, используя Telegram Bot API и язык программирования, который вы выбрали.
  4. Включите inline режим для вашего бота, чтобы он мог отвечать на inline запросы.
  5. Создайте inline клавиатуру с помощью JSON-объектов и отправьте ее как часть сообщения вашему пользователю.
  6. Обработайте выбранные пользователем кнопки и выполните соответствующее действие.

Inline клавиатура может быть полезна для различных сценариев использования, таких как выбор категории товаров, отправка местоположения или выбор ответа на опрос. Она помогает повысить удобство использования и взаимодействия с вашим ботом.

Начать использовать inline клавиатуру в Telegram можно прямо сейчас, следуя описанным выше шагам. Используйте ее для создания более интерактивного и привлекательного опыта взаимодействия с вашими пользователями!

Подробная инструкция по скрытию inline клавиатуры в Telegram

Скрытие inline клавиатуры в Telegram можно осуществить с помощью специального метода editMessageReplyMarkup. Этот метод позволяет изменять клавиатуру в уже отправленном сообщении.

Для скрытия inline клавиатуры необходимо выполнить следующие шаги:

  1. Получите chat_id и message_id сообщения, в котором расположена inline клавиатура.
  2. Используя метод editMessageReplyMarkup, отправьте запрос на изменение клавиатуры.
  3. Установите параметр 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *