Суть вопроса такова - почему функция register_next_step_handler не завершается после многократного вызывания , а продолжается вызываться с последующими командами бота.
Привожу пример в виде скришотов:
Когда вызываю одну команду много раз она не завершается и начинается дублироваться со следующими командами
И так продолжается со всеми пунктами меню
Вот исходный код который у меня получился
import telebot
import user
import json
from telebot import apihelper
from telebot.types import Message
from telebot import types
bot = telebot.TeleBot(config.token)
apihelper.proxy = {'https': 'xxx'}
def keyboard_menu():
print("вызов keyboard_menu")
keyboard_menu = telebot.types.ReplyKeyboardMarkup(True)
keyboard_menu.row('Город')
keyboard_menu.row('Способы оплаты')
return keyboard_menu
def keyboard_sity():
print("вызов keyboard_sity")
keyboard_menu = telebot.types.ReplyKeyboardMarkup(True)
keyboard_menu.row('Главное меню')
return keyboard_menu
def send_text(message):
if message.text == 'Город':
bot.send_message(message.chat.id, 'Выберите город из ниже предоставленных:',reply_markup=keyboard_sity())
bot.register_next_step_handler(message, sity)
else:
bot.send_message(message.chat.id, '*Выберите один из пунктов меню*',parse_mode="Markdown",reply_markup=keyboard_menu())
bot.register_next_step_handler(message, send_text)
def sity(message):
if message.text.lower() == 'главное меню':
bot.send_message(message.chat.id, '*Выберите один из пунктов меню*' ,reply_markup=keyboard_menu() , parse_mode="Markdown")
bot.register_next_step_handler(message,send_text)
else:
bot.send_message(message.chat.id,'такого города не знаем =(')
bot.register_next_step_handler(message, sity)
@bot.message_handler(commands=['start'])
def start_message(message):
if message.text == '/start':
start_bot = f'*Приветствуем {message.chat.username}*\n\n*Выберите один из пунктов меню*'
bot.send_message(message.chat.id, start_bot ,reply_markup=keyboard_menu(),parse_mode="Markdown")
@bot.message_handler(content_types=['text'])
def text(message):
bot.send_message(message.chat.id,'*Нажмите /start*',reply_markup=telebot.types.ReplyKeyboardRemove(),parse_mode="Markdown")
bot.register_next_step_handler(message, send_text)
while True:
try:
bot.polling(none_stop=True,interval=3)
except Exception as e:
print(e)
time.sleep(15)