Удалить клавиатуру python telegram bot

Python Telebot Удалить inline клавиатуру, если отправлено сообщение

Столкнулся со следующей проблемой: Телеграм бот отправляет 2 кнопки, но если пользователь отправит сообщение, то кнопки так и останутся. Мне нужно что бы после отправки кнопок, если пользователь не нажмет на них, а отправит любое сообщение, эти кнопки скрывались. Я понимаю что нужно использовать bot.edit_message_text. Но не знаю как проверить, отправил ли сообщение пользователь.

keyboard = types.InlineKeyboardMarkup() url = types.InlineKeyboardButton(text='Ссылка', url='https://') keyboard.add(url) button =types.InlineKeyboardButton(text='кнопка',callback_data='yes') keyboard.add(button); bot.send_message(message.chat.id,'Сообщение', reply_markup=keyboard) @bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == 'yes': print(call.message.text) 

Буду благодарен за любую помощь.

Ответы (3 шт):

Надо записывать id сообщения с кнопками и id пользователя Как только приходит любое сообщение с этого id пользователя — удаляем кнопки у сообщения с данным id (bot.edit_message_text) Или я как-то не так понял вопрос?

@bot.message_handler(func=lambda c:True, content_types=['text'])#этот блок выполнится если юзер отправит боту сообщение def info_message(message): bot.edit_message_reply_markup(message.chat.id, message_id = message.message_id-1, reply_markup = '')# удаляем кнопки у последнего сообщения 
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Текст нашей кнопки", reply_markup=None) 

Источник

ReplyKeyboardRemove¶

class telegram. ReplyKeyboardRemove ( selective = None , * , api_kwargs = None ) [source] ¶ Bases: telegram.TelegramObject 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 ).

Note User will not be able to summon this keyboard; if you want to hide the keyboard from sight but keep it accessible, use telegram.ReplyKeyboardMarkup.one_time_keyboard .

  • telegram.Bot.copy_message()
  • telegram.Bot.send_animation()
  • telegram.Bot.send_audio()
  • telegram.Bot.send_contact()
  • telegram.Bot.send_dice()
  • telegram.Bot.send_document()
  • telegram.Bot.send_location()
  • telegram.Bot.send_message()
  • telegram.Bot.send_photo()
  • telegram.Bot.send_poll()
  • telegram.Bot.send_sticker()
  • telegram.Bot.send_venue()
  • telegram.Bot.send_video_note()
  • telegram.Bot.send_video()
  • telegram.Bot.send_voice()
  • Example usage: 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.
  • Conversation Bot
  • Conversation Bot 2
Читайте также:  Python dict порядок элементов

Use this parameter if you want to remove the keyboard for specific users only. Targets:

  1. Users that are @mentioned in the text of the telegram.Message object.
  2. If the bot’s message is a reply (has reply_to_message_id ), sender of the original message.

Requests clients to remove the custom keyboard.

Optional. Remove the keyboard for specific users only. Targets:

  1. Users that are @mentioned in the text of the telegram.Message object.
  2. If the bot’s message is a reply (has reply_to_message_id ), sender of the original message.

Источник

Python Telebot Удалить inline клавиатуру, если отправлено сообщение

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. Пример:

@bot.callback_query_handler(func=lambda call: True) def callback_inline(call): if call.data == "option1": bot.answer_callback_query(callback_query_id=call.id, text="You chose option 1") elif call.data == "option2": bot.answer_callback_query(callback_query_id=call.id, text="You chose option 2") elif call.data == "option3": bot.answer_callback_query(callback_query_id=call.id, text="You chose option 3") elif call.data == "option4": bot.answer_callback_query(callback_query_id=call.id, text="You chose option 4")

Здесь мы создали метод callback_inline, который срабатывает при нажатии на любую кнопку. В зависимости от значения кнопки, бот отправляет сообщение с помощью метода bot.answer_callback_query.

Когда пользователь уже выбрал вариант из клавиатуры, ее можно удалить, чтобы облегчить взаимодействие с ботом. Для этого необходимо использовать метод 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, чтобы удалить клавиатуру.

После проведения всех необходимых операций, необходимо закрыть соединение с API Telegram. Для этого достаточно вызвать метод bot.polling(none_stop=True) с параметром none_stop=True:

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

В заключение, можно сказать, что Python Telebot является удобным и мощным инструментом для создания Telegram ботов. Он позволяет создавать интерактивную коммуникацию с пользователями, автоматизировать процессы и максимально удобно реализовывать задачи взаимодействия с Telegram API.

Похожие записи:

Источник

Оцените статью