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

Обновлено: 07.07.2024

Обычные кнопки¶

Кнопки как шаблоны¶

Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметр resize_keyboard=True .
Но как заменить вертикальные кнопки на горизонтальные? С точки зрения Bot API, клавиатура — это массив массивов кнопок, а если говорить проще, массив строк. Метод add() при каждом вызове создаёт новую строку (ряд) и принимает произвольное число аргументов по количеству желаемых кнопок в строке. Перепишем наш код, чтобы было красиво:

Обратите внимание на конструкцию *buttons . Здесь вам не C++ и звёздочка используется для распаковки списка. Подробнее об операторах * и ** можно прочитать здесь.

Смотрим — действительно красиво:

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

У объекта обычной клавиатуры есть ещё две полезных опции: one_time_keyboard для скрытия кнопок после нажатия и selective для показа клавиатуры лишь некоторым участникам группы. Их использование остаётся для самостоятельного изучения.

Помимо стандартных опций, описанных выше, aiogram немного расширяет функциональность клавиатур параметром row_width . При его использовании, фреймворк автоматически разобьёт массив кнопок на строки по N элементов в каждой, где N — значение row_width , например, row_width=2 . Попробуйте!

Специальные обычные кнопки¶

По состоянию на конец ужасного 2020 года в Telegram существует три специальных вида обычных кнопок, не являющихся шаблонами: для отправки текущей геолокации, для отправки своего номера телефона и ярлык для создания опроса/викторины. Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.

Впрочем, проще один раз увидеть код:

Инлайн-кнопки¶

URL-кнопки и колбэки¶

Login- и Pay-кнопки в книге рассматриваться не будут вообще. Если у кого-то есть желание помочь хотя бы с рабочим кодом для авторизации или оплаты, пожалуйста, создайте Pull Request на GitHub. Спасибо!

А если хотите обе кнопки в ряд, то уберите row_width=1 (тогда будет использоваться значение по умолчанию 3).

С URL-кнопками больше обсуждать, по сути, нечего, поэтому перейдём к гвоздю сегодняшней программы — Callback-кнопкам. Это очень мощная штука, которую вы можете встретить практически везде. Кнопки-реакции у постов (лайки), меню у @BotFather и т.д. Суть в чём: у колбэк-кнопок есть специальное значение (data), по которому ваше приложение опознаёт, что нажато и что надо сделать. И выбор правильного data очень важен! Стоит также отметить, что, в отличие от обычных кнопок, нажатие на колбэк-кнопку позволяет сделать практически что угодно, от заказа пиццы до перезагрузки сервера.

Несмотря на то, что параметр кнопки callback_data , а значение data лежит в одноимённом поле data объекта CallbackQuery, собственный фильтр aiogram называется text .

Ой, а что это за часики? Оказывается, сервер Telegram ждёт от нас подтверждения о доставке колбэка, иначе в течение 30 секунд будет показывать специальную иконку. Чтобы скрыть часики, нужно вызвать метод answer() у колбэка (или использовать метод API answer_callback_query() ). В общем случае, в метод answer() можно ничего не передавать, но можно вызвать специальное окошко (всплывающее сверху или поверх экрана):

Когда вызывать answer() ?

В общем случае, главное — просто не забыть сообщить Telegram о получении колбэк-запроса, но я рекомендую ставить вызов answer() в самом конце, и вот почему: если вдруг в процессе обработки колбэка случится какая-то ошибка и бот нарвётся на необработанное исключение, пользователь увидит неубирающиеся полминуты часики и поймёт, что что-то не так. В противном случае, часики исчезнут, а пользователь останется в неведении, выполнился его запрос успешно или нет.

И, казалось бы, всё работает:

Если теперь вы попробуете повторить пример выше, то указанное исключение в этом блоке кода бот просто-напросто проигнорирует.

Фабрика колбэков¶

В aiogram существует т.н. фабрика колбэков. Вы создаёте объект CallbackData , указываете ему префикс и произвольное количество доп. аргументов, которые в дальнейшем указываете при создании колбэка для кнопки.
Например, рассмотрим следующий объект:

Тогда при создании кнопки вам надо указать её параметры так:

В примере выше в кнопку запишется callback_data , равный post:5:like , а хэндлер на префикс post будет выглядеть так:

В предыдущем примере с числами мы грамотно выбрали callback_data , поэтому смогли легко запихнуть все обработчики в один хэндлер. Но можно логически разнести обработку инкремента и декремента от обработки нажатия на кнопку "Подтвердить". Для этого в фильтре фабрики можно указать желаемые значения какого-либо параметра. Давайте перепишем наш пример с использоваанием фабрики:

На этом глава про кнопки окончена, но про некоторые других их виды мы поговорим в следующих главах.


Клавиатуру для телефона нужно правильно настроить, чтобы ей было удобно пользоваться

Первое правило удобного набора текста на сенсорном экране – удобная клавиатура для Android. Несмотря на то что в Google Play просто куча сторонних клавиатур, самая лучшая всё равно у Google. Она называется Gboard. Попробуйте, если ещё не пробовали. Она очень умная и функциональная. С ней вы будете допускать намного меньше ошибок, потому что она сама исправляет опечатки, а предиктивный ввод ускоряет ввод. Но это не самое главное.

Как изменить клавиатуру по умолчанию на Android

Но мало просто скачать стороннюю клавиатуру. Нужно ещё и установить её в качестве системной. Сделать это можно в настройках:

Клавиатура по умолчанию

Для начала нужно установить новую клавиатуру как клавиатуру по умолчанию

  • Включите Gboard в качестве системной клавиатуры;
  • Подтвердите изменение и выйдите из настроек.

Теперь, когда вы будете вызывать клавиатуру, на экране будет появляться Gboard. При этом та клавиатура, которая была установлена по умолчанию, отключится. При желании вы можете вообще удалить её либо «Остановить» в настройках, чтобы она не вылезала с предложениями вернуть её назад.

Как включить непрерывный ввод на Андроид

После установки Gboard включите функцию непрерывного ввода. Она позволяет набирать текст свайпами по клавиатуре, не отрывая палец от экрана. Просто водишь им по клавишам, а алгоритмы сами определяют, что это должно быть за слово, и расставляют за тебя пробелы. Скорость печати увеличивается многократно:

  • Откройте любой чат и вызовите клавиатуру;
  • Нажмите на иконку настроек над клавишами;

Непрерывный ввод

  • Здесь откройте вкладку «Непрерывный ввод»;
  • Включите все параметры, которые есть в окне.

Теперь попробуйте ввести слово, просто водя пальцем по экрану от одной буквы к другой. Если получилось не то слово, клавиатура скорее всего предложит заменить его другим, которое появится над блоком клавиш. Ну, а если не предложит, просто перепишите его – клавиатура это запомнит и впредь не будет ошибаться.

Настроить длительное нажатие клавиш

Я предлагаю уменьшить задержку в три раза:

Долгое удерживание

Длительность удерживания должна быть как можно ниже. Это сэкономит ваше время

  • Откройте «Длительность долгого нажатия»;
  • Установите ползунок на градации 100-150 мс.

Я рекомендую начать со 150 мс. Возможно, для вас это будет слишком быстро, а, может быть, наоборот, слишком медленно. Мне, например, нравится, когда удерживание срабатывает быстрее. Поэтому я выбрал минимальную отметку в 100 мс. После этой настройки активация скрытых символов на клавиатуре стала проходить намного быстрее, а я стал тратить меньше времени.

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

Свободное общение и обсуждение материалов


Культура общения в социальных сетях имеет свои особенности по сравнению с реальной жизнью. То, что является абсолютной нормой на письме, в интернете может восприниматься, как что-то странное и непонятное. И с каждым новым поколением пользователей нормы и правила меняются. Когда-то мы писали СМС в строго укороченном варианте, потому что так было дешевле, а сейчас можно слогать целые поэмы в сети, но большинство этим не занимается. Попробуем разобраться, что же изменилось в культуре общения в ближайшее время.


Android, в отличие от iOS, - система более открытая и свободная. Здесь нет тех ограничений, которые Apple устанавливает для владельцев iPhone. Поэтому среди пользователей Android считается нормой скачивать приложения не только из Google Play, но и из-за его пределов. Иногда это обусловлено нежеланием платить за софт деньги, а иногда – банальным отсутствием нужного приложения в официальном каталоге. Однако в Google считают, что при всех допущениях Android существует только один правильный способ загрузки софта.


Клава — самое важное приложение. Без него КПК превращается в микротелек.

Вот уже десять лет пишу свайпом пером на свайп-клаве. Что позволяет мне легко, быстро и просто писать 20-30 страниц в сутки (>50 000 символов).

Для пущего удобства юзаю мод SwiftKey — Vitmod (да, мод изготовлен согласно моему описанию), его можно найти на 4pda. Это единственная известная мне клава, позволяющая писать с соблюдением почти всех правил типографики. То есть она уникальная.

Читайте также: