@fakechitor

Как реализовать выход в меню в телеграм боте?

Пишу телеграм бота. Когда выбираю калькулятор (/calc), он решает примеры, но после того, как был дан ответ никак не могу сделать выход из него. Пытался придумать какие то варианты, но код будто застревает после ответа. Подскажите пожалуйста можно ли и если можно, то как реализовать выход из калькулятора.

@bot.message_handler(commands=['start']) #Главное меню бота
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    butt1 = types.KeyboardButton('/go')
    butt2 = types.KeyboardButton('/about')
    markup.add(butt1, butt2)
    bot.send_message(message.chat.id, f'Привет, {message.from_user.first_name}!', reply_markup=markup)

@bot.message_handler(commands=['go']) #Меню с выбором действий
def func(message): 
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2) 
    butt1 = types.KeyboardButton('/calc')
    butt2 = types.KeyboardButton('/graph')
    butt3 = types.KeyboardButton('/back')
    butt4 = types.KeyboardButton('but3')
    markup.add(butt1, butt2, butt3, butt4)
    bot.send_message(message.chat.id, 'Выберите действие, которое хотите выполнить', reply_markup=markup) 
    markup = types.ReplyKeyboardRemove(selective=False)      
    
@bot.message_handler(commands=['calc'])    #Код калькулятора
def calc_start(message):
    bot.send_message(message.from_user.id, 'Введите первое число')
    bot.register_next_step_handler(message, get_num)

def get_num(message):
    global num
    num = message.text
    bot.send_message(message.from_user.id, 'Введите второе число')
    bot.register_next_step_handler(message, get_num2)

def get_num2(message): 
    global num2
    num2 = message.text
    sign_keyboard = types.InlineKeyboardMarkup()
    calc_but_p = types.InlineKeyboardButton(text='+', callback_data='plus')
    calc_but_m = types.InlineKeyboardButton(text='-', callback_data= 'minus')
    calc_but_d = types.InlineKeyboardButton(text='/', callback_data='div')
    calc_but_mp = types.InlineKeyboardButton(text='*', callback_data='mult')
    sign_keyboard.add(calc_but_d, calc_but_p, calc_but_m, calc_but_mp)
    bot.send_message(message.from_user.id, text = 'Выберите действие', reply_markup=sign_keyboard)
    bot.register_next_step_handler(message, reg_sign)

@bot.callback_query_handler(func=lambda call:True) #Ответ
def reg_sign(call):
    if call.data == "plus":
        answer = (int(num) + int(num2))
        bot.send_message(call.message.chat.id, answer)
    elif call.data == "minus":
        answer = (int(num) - int(num2))
        bot.send_message(call.message.chat.id, answer)    
    elif call.data == "mult":
        answer = (int(num) * int(num2))
        bot.send_message(call.message.chat.id, answer)      
    elif call.data == "div":
        answer = (int(num)  / int(num2))
        bot.send_message(call.message.chat.id, answer)
        
@bot.message_handler(commands=['back'])  #Возврат в меню
def back(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    butt1 = types.KeyboardButton('/go')
    butt2 = types.KeyboardButton('/about')
    markup.add(butt1, butt2)
    bot.send_message(message.chat.id, 'Вы вернулись в главное меню', reply_markup=markup)
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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