@azama2t

Как ожидать нажатие кнопки в кнопке?

Привет, делал бота, столкнулся с проблемой.

import telebot
from telebot import types
import config

bot = telebot.TeleBot(config.token)
ADMINS = [1111111]

doska = []



@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Доска Почета")
    btn2 = types.KeyboardButton("❓ Задать вопрос")
    markup.add(btn1, btn2)
    bot.send_message(message.chat.id, text="Привет, {0.first_name}! Я бот инженерной школы".format(message.from_user), reply_markup=markup)

@bot.message_handler(content_types=['text'])
def doska(message):
     if message.text == 'Доска Почета':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            btn1 = types.KeyboardButton("Назад")
            btn2 = types.KeyboardButton("Редактировать")
            markup.add(btn1)
            if message.chat.id in ADMINS:
                 markup.add(btn2)
            bot.send_message(message.chat.id, text="test text",reply_markup=markup)

            d = message.text
            
            if d == "Назад":
                    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
                    button1 = types.KeyboardButton("Доска Почета")
                    button2 = types.KeyboardButton("❓ Задать вопрос")
                    markup.add(button1, button2)
                    bot.send_message(message.chat.id, text="Вы вернулись в главное меню", reply_markup=markup)
            else:
                bot.send_message(message.chat.id,text='почти')

if __name__ == '__main__':
     print("bor start work")
     bot.infinity_polling()

вопрос таков : как перед "d = message.text" ожидать нажатие кнопки, чтобы текст обновился ? Может лучше вообще код переписать , если да, то как ? Спасибо заранее !)
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 2
TMProject
@TMProject
Frontend developer React/Redux
Для того, чтобы ожидать нажатие кнопки, можно использовать функционал InlineKeyboardMarkup вместо ReplyKeyboardMarkup.

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

Вот как можно изменить ваш код, чтобы использовать InlineKeyboardMarkup:
import telebot
from telebot import types
import config

bot = telebot.TeleBot(config.token)
ADMINS = [1111111]

doska = []

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton("Доска Почета", callback_data="doska")
    btn2 = types.InlineKeyboardButton("❓ Задать вопрос", callback_data="question")
    markup.add(btn1, btn2)
    bot.send_message(message.chat.id, text="Привет, {0.first_name}! Я бот инженерной школы".format(message.from_user), reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data == "doska":
        markup = types.InlineKeyboardMarkup()
        btn1 = types.InlineKeyboardButton("Назад", callback_data="back")
        btn2 = types.InlineKeyboardButton("Редактировать", callback_data="edit")
        markup.add(btn1)
        if call.message.chat.id in ADMINS:
            markup.add(btn2)
        bot.send_message(call.message.chat.id, text="test text",reply_markup=markup)
    elif call.data == "back":
        markup = types.InlineKeyboardMarkup()
        btn1 = types.InlineKeyboardButton("Доска Почета", callback_data="doska")
        btn2 = types.InlineKeyboardButton("❓ Задать вопрос", callback_data="question")
        markup.add(btn1, btn2)
        bot.send_message(call.message.chat.id, text="Вы вернулись в главное меню", reply_markup=markup)

if __name__ == '__main__':
     print("bot start work")
     bot.infinity_polling()
Ответ написан
@SidVisceos
Сохраните в базу или файл пометку что чего то ожидаете от пользователя
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы