Как после нажатии другой кнопки завершить выполнения других (Python telebot)
Этот бот при команде старт на клавиатуре выводит 3 кнопки. После нажатии например 'калькулятор' далее он работает, но потом если я нажму 'калькулятор систем счисления' пишется текст относящийся к этой кнопке, но действия выполняются как у кнопки 'калькулятор'. Я уже пробовал и bot.register_next_step_handler(), и bot.clear_step_handler_by_chat_id() (возможно я делал что-то не так), но у меня ничего не вышло. Чтобы выйти в меню где кнопки нужно прописать команду /start
Вот сам код:
import telebot
from telebot import types
bot = telebot.TeleBot('(токен)')
@bot.message_handler(commands=['start'])
def start(message):
start_markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
calculator = types.KeyboardButton('Калькулятор?')
num_sys = types.KeyboardButton('Калькулятор систем счисления?')
my_games = types.KeyboardButton('Скачать мои игры на питоне')
start_markup.row(calculator, num_sys, my_games)
bot.send_message(message.chat.id, f'Приветствую тебя, {message.from_user.first_name}!', reply_markup=start_markup)
bot.register_next_step_handler(message, next)
markup = types.InlineKeyboardMarkup()
btn_bin = types.InlineKeyboardButton('Перевести в 2-ную систему счисления',
callback_data='binary')
btn_oct = types.InlineKeyboardButton('Перевести в 8-ную систему счисления',
callback_data='octal')
btn_hex = types.InlineKeyboardButton('Перевести в 16-ную систему счисления',
callback_data='hex')
markup.add(btn_bin)
markup.add(btn_oct)
markup.add(btn_hex)
markup3 = types.InlineKeyboardMarkup()
markup3.add(types.InlineKeyboardButton('В 2-ную систему счисления', callback_data='binary3'))
markup3.add(types.InlineKeyboardButton('В 8-ную систему счисления', callback_data='octal3'))
markup3.add(types.InlineKeyboardButton('В 16-ную систему счисления', callback_data='hex3'))
def next(message):
if message.text == 'Калькулятор?':
bot.send_message(message.chat.id, '''Введите ("число" "знак" "число")
Например: 5+5 или 5 + 5
(можно вводить даже (9 * 8 - 98) / 9 * 23)''')
@bot.message_handler()
def send_mes(message):
print(f'{message.from_user.first_name}: {message.text}')
n = str(message.text)
n = n.lstrip('0')
try:
eval(n)
bot.reply_to(message, f'Ответ: {round((eval(n)), 10)}', reply_markup=markup)
except ZeroDivisionError:
bot.send_message(message.chat.id, 'На 0 делить нельзя!')
except:
bot.send_message(message.chat.id, '''Неккоректный ввод
Введите ("число" "знак" "число")
Например: 5+5 или 5 + 5
(можно вводить даже (9 * 8 - 98) / 9 * 23)''')
@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
txt = callback.message.text
txt = txt[txt.find(':') + 1:]
if callback.data == 'binary':
try:
bin_txt = bin(int(txt))
if bin_txt[0] == '-':
bot.send_message(callback.message.chat.id, f'Ваше число в 2-ной системе: -{bin_txt[3:]}')
else:
bot.send_message(callback.message.chat.id, f'Ваше число в 2-ной системе: {bin_txt[2:]}')
except:
bot.send_message(callback.message.chat.id, 'Дробные числа нельзя(')
elif callback.data == 'octal':
try:
oct_txt = oct(int(txt))
if oct_txt[0] == '-':
bot.send_message(callback.message.chat.id, f'Ваше число в 8-ной системе: -{oct_txt[3:]}')
else:
bot.send_message(callback.message.chat.id, f'Ваше число в 8-ной системе: {oct_txt[2:]}')
except:
bot.send_message(callback.message.chat.id, 'Дробные числа нельзя(')
elif callback.data == 'hex':
try:
hex_txt = hex(int(txt)).upper()
if hex_txt[0] == '-':
bot.send_message(callback.message.chat.id, f'Ваше число в 16-ной системе: -{hex_txt[3:]}')
else:
bot.send_message(callback.message.chat.id, f'Ваше число в 16-ной системе: {hex_txt[2:]}')
except:
bot.send_message(callback.message.chat.id, 'Дробные числа нельзя(')
elif message.text == 'Калькулятор систем счисления?':
bot.send_message(message.chat.id, '(Пока только из 10-ной системы счисления)')
bot.send_message(message.chat.id, 'Введите целое число в 10-ной системе счисления:')
@bot.message_handler()
def get_num(num):
try:
n = int(num.text)
print(n)
bot.send_message(message.chat.id, 'В какую систему счисления', reply_markup=markup3)
@bot.callback_query_handler(func=lambda callback2: True)
def callback_mes(callback2):
if callback2.data == 'binary3':
if n < 0:
bot.send_message(message.chat.id, f'Ваше число в двоичной системе счисления: -{bin(n)[3:]}')
else:
bot.send_message(message.chat.id, f'Ваше число в двоичной системе счисления: {bin(n)[2:]}')
if callback2.data == 'octal3':
if n < 0:
bot.send_message(message.chat.id, f'Ваше число в восьмеричной системе счисления: -{oct(n)[3:]}')
else:
bot.send_message(message.chat.id, f'Ваше число в восьмеричной системе счисления: {oct(n)[2:]}')
if callback2.data == 'hex3':
if n < 0:
bot.send_message(message.chat.id, f'Ваше число в шестнадцатиричной системе счисления: -{hex(n)[3:].upper()}')
else:
bot.send_message(message.chat.id, f'Ваше число в шестнадцатиричной системе счисления: {hex(n)[2:].upper()}')
except ValueError:
bot.send_message(message.chat.id, 'Введите целое число')
elif message.text == 'Скачать мои игры на питоне':
file1 = open('for_tg_bot\Кальк С С.py', 'rb')
file2 = open('for_tg_bot\Лови кнопку.py', 'rb')
file3 = open('for_tg_bot\Хомячок.py', 'rb')
file4 = open('for_tg_bot\Развивалка.py', 'rb')
bot.send_document(message.chat.id, file1)
bot.send_document(message.chat.id, file2)
bot.send_document(message.chat.id, file3)
bot.send_document(message.chat.id, file4)
bot.infinity_polling()