Пишу телеграм бота. Когда выбираю калькулятор (/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)