Telegram является одним из самых популярных мессенджеров в мире. Telegram API позволяет программистам создавать ботов для автоматизации различных задач и взаимодействия с пользователями. Одним из самых популярных фреймворков для работы с Telegram API является Telebot – Python библиотека для создания Telegram ботов.
В данной статье мы рассмотрим, как удалить inline клавиатуру в Python Telebot, если отправлено сообщение.
Inline клавиатуры в Telegram являются удобным и наглядным способом предоставления пользователю выбора опций или действий. Однако, после того как пользователь выберет один из вариантов, к клавиатуре может не быть необходимости. В таком случае, ее необходимо удалить для более удобного взаимодействия пользователя с ботом. Давайте рассмотрим, как это сделать.
1. Создайте инлайн клавиатуру
Первым шагом необходимо создать inline клавиатуру в Python Telebot. Воспользуемся для этого классом InlineKeyboardMarkup:
keyboard = types.InlineKeyboardMarkup(row_width=2) item1 = types.InlineKeyboardButton(«Option 1», callback_data=’option1′) item2 = types.InlineKeyboardButton(«Option 2», callback_data=’option2′) item3 = types.InlineKeyboardButton(«Option 3», callback_data=’option3′) item4 = types.InlineKeyboardButton(«Option 4», callback_data=’option4′) keyboard.add(item1, item2, item3, item4)
Здесь мы создаем клавиатуру с 4 вариантами выбора. Каждый вариант представлен кнопкой типа InlineKeyboardButton, у которой есть название и значение, передаваемое при нажатии кнопки.
Скрытая Функция Твоей Клавиатуры на Телефоне
2. Отправьте сообщение с клавиатурой
Далее необходимо отправить сообщение с созданной клавиатурой пользователю. Данный шаг является необязательным, если пользователь уже общался с ботом ранее:
bot.send_message(chat_id, «Choose option:», reply_markup=keyboard)
Здесь мы отправляем сообщение с текстом «Choose option:» и добавляем inline клавиатуру с помощью параметра reply_markup.
3. Обрабатывайте нажатие кнопок
Для обработки выбора пользователя необходимо создать метод, который будет срабатывать при нажатии на кнопку. В Telebot это можно сделать с помощью декоратора callback_query_handler. Пример:
Здесь мы создали метод callback_inline, который срабатывает при нажатии на любую кнопку. В зависимости от значения кнопки, бот отправляет сообщение с помощью метода bot.answer_callback_query.
4. Удалите клавиатуру
Когда пользователь уже выбрал вариант из клавиатуры, ее можно удалить, чтобы облегчить взаимодействие с ботом. Для этого необходимо использовать метод bot.edit_message_reply_markup:
bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id, reply_markup=None)
Здесь мы вызываем метод bot.edit_message_reply_markup, который принимает параметры chat_id и message_id, соответствующие сообщению с клавиатурой, и параметр reply_markup, который должен принимать значение None, чтобы удалить клавиатуру.
Как удалить клавиатуру Facemoji Keyboard для Xiaomi. Самый простой способ.
5. Завершение работы
После проведения всех необходимых операций, необходимо закрыть соединение с API Telegram. Для этого достаточно вызвать метод bot.polling(none_stop=True) с параметром none_stop=True:
bot.polling(none_stop=True)
В результате мы получаем полноценный бот, способный обрабатывать нажатия кнопок и удалять inline клавиатуру при необходимости.
В заключение, можно сказать, что Python Telebot является удобным и мощным инструментом для создания Telegram ботов. Он позволяет создавать интерактивную коммуникацию с пользователями, автоматизировать процессы и максимально удобно реализовывать задачи взаимодействия с Telegram API.
Похожие записи:
- Как убедиться в том, что сообщение было отправлено в RabbitMQ?
- Как узнать, что сообщение было отправлено успешно в RabbitMQ?
- Как узнать, что сообщение было отправлено успешно в Kafka?
- Как исправить ошибку 400: ответ на сообщение не найден telebot на Python?
- Как задать режим отображения (inline, block, inline-block) HTML-элемента с помощью CSS?
Источник: qaa-engineer.ru
Как удалить клавиатуру telegram bot python
В этой главе мы познакомимся с такой замечательной фичей Telegram-ботов как кнопки. Прежде всего, чтобы избежать путаницы, определимся с названиями. То, что цепляется к низу экрана вашего устройства, будем называть обычными кнопками, а то, что цепляется непосредственно к сообщениям, назовём инлайн-кнопками. Ещё раз картинкой:
Обычные кнопки¶
Кнопки как шаблоны¶
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже). Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.
Напишем хэндлер, который будет при нажатии на команду /start отправлять сообщение с двумя кнопками:
Обратите внимание, что т.к. обычные кнопки суть шаблоны сообщений, то их можно создавать не только как объекты KeyboardButton , но и как обычные строки.
Что ж, запустим бота и обалдеем от громадных кнопок:
Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметр resize_keyboard=True .
Но как заменить вертикальные кнопки на горизонтальные? С точки зрения Bot API, клавиатура — это массив массивов кнопок, а если говорить проще, массив строк. Метод add() при каждом вызове создаёт новую строку (ряд) и принимает произвольное число аргументов по количеству желаемых кнопок в строке. Перепишем наш код, чтобы было красиво:
Обратите внимание на конструкцию *buttons . Здесь вам не C++ и звёздочка используется для распаковки списка. Подробнее об операторах * и ** можно прочитать здесь.
Смотрим — действительно красиво:
Осталось научить бота реагировать на нажатие таких кнопок. Как уже было сказано выше, необходимо делать проверку на полное совпадение текста. Сделаем это двумя способами: через специальный фильтр Text и обычной лямбдой:
Чтобы удалить кнопки, необходимо отправить новое сообщение со специальной «удаляющей» клавиатурой типа ReplyKeyboardRemove . Например: await message.reply(«Отличный выбор!», reply_markup=types.ReplyKeyboardRemove())
У объекта обычной клавиатуры есть ещё две полезных опции: one_time_keyboard для скрытия кнопок после нажатия и selective для показа клавиатуры лишь некоторым участникам группы. Их использование остаётся для самостоятельного изучения.
Помимо стандартных опций, описанных выше, aiogram немного расширяет функциональность клавиатур параметром row_width . При его использовании, фреймворк автоматически разобьёт массив кнопок на строки по N элементов в каждой, где N — значение row_width , например, row_width=2 . Попробуйте!
Специальные обычные кнопки¶
По состоянию на конец ужасного 2020 года в Telegram существует три специальных вида обычных кнопок, не являющихся шаблонами: для отправки текущей геолокации, для отправки своего номера телефона и ярлык для создания опроса/викторины. Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.
Впрочем, проще один раз увидеть код:
Инлайн-кнопки¶
URL-кнопки и колбэки¶
В отличие от обычных кнопок, инлайновые цепляются не к низу экрана, а к сообщению, с которым были отправлены. В этой главе мы рассмотрим два типа таких кнопок: URL и Callback. Ещё один — Switch — будет рассмотрен в главе про инлайн-режим.
Login- и Pay-кнопки в книге рассматриваться не будут вообще. Если у кого-то есть желание помочь хотя бы с рабочим кодом для авторизации или оплаты, пожалуйста, создайте Pull Request на GitHub. Спасибо!
Самые простые инлайн-кнопки относятся к типу URL, т.е. «ссылка». Поддерживаются только протоколы HTTP(S) и tg://
А если хотите обе кнопки в ряд, то уберите row_width=1 (тогда будет использоваться значение по умолчанию 3).
Напишем хэндлер, который по команде /random будет отправлять сообщение с колбэк-кнопкой:
Но как же обработать нажатие? Если раньше мы использовали message_handler для обработки входящих сообщений, то теперь будем использовать callback_query_handler для обработки колбэков. Ориентироваться будем на «значение» кнопки, т.е. на её data:
Несмотря на то, что параметр кнопки callback_data , а значение data лежит в одноимённом поле data объекта CallbackQuery, собственный фильтр aiogram называется text .
Ой, а что это за часики? Оказывается, сервер Telegram ждёт от нас подтверждения о доставке колбэка, иначе в течение 30 секунд будет показывать специальную иконку. Чтобы скрыть часики, нужно вызвать метод answer() у колбэка (или использовать метод API answer_callback_query() ). В общем случае, в метод answer() можно ничего не передавать, но можно вызвать специальное окошко (всплывающее сверху или поверх экрана):
В функции send_random_value мы вызывали метод answer() не у message , а у call.message . Это связано с тем, что колбэк-хэндлеры работают не с сообщениями (тип Message), а с колбэками (тип CallbackQuery), у которого другие поля, и само сообщение — всего лишь его часть. Учтите также, что message — это сообщение, к которому была прицеплена кнопка (т.е. отправитель такого сообщения — сам бот). Если хотите узнать, кто нажал на кнопку, смотрите поле from (в вашем коде это будет call.from_user , т.к. слово from зарезервировано в Python)
Когда вызывать answer() ?
В общем случае, главное — просто не забыть сообщить Telegram о получении колбэк-запроса, но я рекомендую ставить вызов answer() в самом конце, и вот почему: если вдруг в процессе обработки колбэка случится какая-то ошибка и бот нарвётся на необработанное исключение, пользователь увидит неубирающиеся полминуты часики и поймёт, что что-то не так. В противном случае, часики исчезнут, а пользователь останется в неведении, выполнился его запрос успешно или нет.
Перейдём к примеру посложнее. Пусть пользователю предлагается сообщение с числом 0, а внизу три кнопки: +1, -1 и Подтвердить. Первыми двумя он может редактировать число, а последняя удаляет всю клавиатуру, фиксируя изменения. Хранить значения будем в памяти в словаре (про конечные автоматы поговорим как-нибудь в другой раз).
И, казалось бы, всё работает:
Но теперь представим, что ушлый пользователь сделал следующее: вызвал команду /numbers (значение 0), увеличил значение до 1, снова вызвал /numbers (значение сбросилось до 0) и отредактировал нажал кнопку «+1» на первом сообщении. Что произойдёт? Бот по-честному отправит запрос на редактирование текста со значением 1, но т.к. на том сообщении уже стоит цифра 1, то Bot API вернёт ошибку, что старый и новый тексты совпадают, а бот словит исключение: aiogram.utils.exceptions.MessageNotModified: Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
С этой ошибкой вы, скорее всего, будете поначалу часто сталкиваться, пытаясь редактировать сообщения. Но, в действительности, решается проблема очень просто: мы проигнорируем исключение MessageNotModified . Из первой главы вы уже знаете о такой прекрасной штуке, как errors_handler , но в этот раз мы поступим чуть иначе и перепишем функцию update_num_text() следующим образом:
Если теперь вы попробуете повторить пример выше, то указанное исключение в этом блоке кода бот просто-напросто проигнорирует.
Фабрика колбэков¶
В aiogram существует т.н. фабрика колбэков. Вы создаёте объект CallbackData , указываете ему префикс и произвольное количество доп. аргументов, которые в дальнейшем указываете при создании колбэка для кнопки.
Например, рассмотрим следующий объект:
В примере выше в кнопку запишется callback_data , равный post:5:like , а хэндлер на префикс post будет выглядеть так:
В предыдущем примере с числами мы грамотно выбрали callback_data , поэтому смогли легко запихнуть все обработчики в один хэндлер. Но можно логически разнести обработку инкремента и декремента от обработки нажатия на кнопку «Подтвердить». Для этого в фильтре фабрики можно указать желаемые значения какого-либо параметра. Давайте перепишем наш пример с использоваанием фабрики:
На этом глава про кнопки окончена, но про некоторые других их виды мы поговорим в следующих главах.
telegram.ReplyKeyboardRemove¶
Upon receiving a message with this object, Telegram clients will remove the current custom keyboard and display the default letter-keyboard. By default, custom keyboards are displayed until a new keyboard is sent by a bot. An exception is made for one-time keyboards that are hidden immediately after the user presses a button (see telegram.ReplyKeyboardMarkup ).
True – Requests clients to remove the custom keyboard.
bool – Optional. Use this parameter if you want to remove the keyboard for specific users only.
A user votes in a poll, bot returns confirmation message in reply to the vote and removes the keyboard for that user, while still showing the keyboard with poll options to users who haven’t voted yet.
-
selective ( bool , optional) –
Use this parameter if you want to remove the keyboard for specific users only. Targets:
Как удалить клавиатуру?(Python telegram bot, keyboard_remove)
Когда получаете следующее сообщение, добавьте строку:
await message.answer(«Клавиатура скрыта», reply_markup=types.ReplyKeyboardRemove())
Т.к. удалить кнопки так и не вышло, нашел другой подход:
отправляем запрос контакта.
После полученного номера, отправляем другую клавиатуру
а вот такую клавиатуру уже можно и удалить
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Привет. Как удалить Inline клавиатуру при нажати на Inline кнопку?
Удаляет только клавиатуру, но не сообщение. Можно ли и сообщение тоже удалить?
Похожие вопросы
народ а для бота с аудиторией 0-5000 какой примерно сервачок брать?
максимально глуппый вопрос наверное. но почему у мя бот на админку реагирует только со 2 раза? каждый раз а на другие сообщение с 1
Всем привет Вопрос, скорее к самому Telegram bot api, но вдруг кто знает Столкнулся со следующим Средствами бота отправляю сообщение в канал await bot.send_photo( c.
а ещё что думаешь?
Вечер добрый, aiogram совместим с schedule?
здравствуйте. Подскажите пожалуйста , как эта реализовать ? Вот эта Меню синяя кнопка.
Можно ли спарсить всех подписчиков канала с помощью бота?
вопрос про прокидывание sqlalchemy сессий через мидлвари. Считаю что это не правильно. Для хайлоад проекта такой вариант не особо проходит, может есть у кого какие то другие и.
Ребят, написал бота. Запустил на сервак. Происходит постоянный рост потребления оперативной памяти. С некоторым интервалом. И причина не в пользователях, которые нагружают бот.
Related posts:
- Как скачать с диктофона телефона запись на компьютер
- Как сохранить прозрачность в png в paint
- Как создать загрузочную флешку linux
- Как сохранять данные формы после отправки
Источник: www.kak-zarabotat-v-internete.ru
Как удалить Gboard клавиатуру с Android
Это краткое и полезное руководство по удалению клавиатуры Google (Gboard) с вашего телефона или планшета Android.
Многим людям нравится Gboard за его удобный перевод и точные текстовые прогнозы. Других отпугивает политика сбора данных Google. Третьи просто имеют любимое приложение для клавиатуры и не хотят использовать Gboard. Если вы уверены, что хотите полностью удалить приложение Gboard со своего Android-устройства, есть несколько способов сделать это.
На некоторых телефонах Gboard — встроенная клавиатура по умолчанию. Вы должны убедиться, что для вас установлена другая клавиатура, прежде чем удалить Gboard. Ниже мы рассмотрим несколько способов сделать это.
Как изменить клавиатуру по умолчанию на Android
На главном экране откройте меню Настроек, перетащив его вниз от верхней части экрана и нажав на значок в форме шестеренки.
В меню «Настройки» прокрутите вниз и нажмите «Расширенные настройки».
Далее выберите Язык и ввод.
Параметр «Текущая клавиатура» позволит вам выбрать одну из клавиатур, установленных на вашем телефоне. Нажмите на него.
Вы увидите список всех приложений клавиатуры, которые установлены и активированы на вашем телефоне. Нажмите на свой новый выбор клавиатуры по умолчанию, и все готово.
Как удалить Gboard с Android-устройства
Gboard — это встроенная клавиатура по умолчанию на пикселях и других телефонах. Для управления телефоном вам нужна клавиатура , поэтому, если Gboard — это все, что есть в вашем телефоне, первым шагом в удалении Gboard является загрузка и установка его замены. Хотя есть много вариантов замены Gboard в магазине Google Play, его наиболее заметным конкурентом является Яндекс Клавиатура. В Play Store найдите Яндекс Клавиатура и установите её.
Откройте приложение, чтобы начать процесс установки.
Включите Яндекс Клавиатуру в списке установленных клавиатур.
Теперь выберите Яндекс Клавиатуру среди активированных клавиатур.
Нажмите «Завершить» и войдите в свою учетную запись Яндекс. Теперь Яндекс Клавиатура — ваша активная клавиатура, и мы можем удалить Gboard. Снова зайдите в меню настроек. Прокрутите вниз и нажмите Приложения.
Прокрутите вниз до Gboard и нажмите на него.
Нажмите на кнопку «Удалить», чтобы удалить Gboard с телефона. При появлении запроса подтвердите удаление. Теперь Gboard удален. Если вы выбрали ее в качестве клавиатуры по умолчанию, Яндекс Клавиатура заменит ее.
Если на вашем телефоне нет возможности удалить приложение Gboard, вы все равно можете удалить его через магазин Google Play. Просто откройте приложение «Магазин» и найдите Gboard. Нажмите на название приложения, а не на кнопку «Открыть».
Теперь просто нажмите кнопку «Удалить» и подтвердите при появлении запроса. Опять же, с исчезновением Gboard ранее установленная Яндекс Клавиатура будет клавиатурой по умолчанию. Процесс будет работать одинаково независимо от того, какую альтернативу Gboard вы выберете.
Часто задаваемые вопросы
Что лучше, Gboard или Swiftkey?
Ни то, ни другое категорически не лучше. Gboard получает более высокие оценки за интеллектуальный ввод текста и обширные функции смайликов. Яндекс Клавиатура более легкая в понимании и быстрый доступ к сервисам Яндекс. Поскольку их легко установить и удалить, вам следует не только изучить оба, но и загрузить и использовать их. Тогда вы поймете, что для вас лучше.
Могу ли я запретить Gboard отправлять информацию в Google?
Да. Просто откройте приложение и нажмите «Дополнительно». Затем коснитесь переключателя рядом с Поделиться статистикой использования и переключателя рядом с Улучшение голоса и набора текста для всех.
Источник: xpcom.ru