Почему обработчик сообщений в telebot для состояния не срабатывает, несмотря на то что в другой функции все работает отлично?
У меня есть обработчик сообщений, который должен срабатывать, когда состояние пользователя в переменной user_data равно 'settings_'. Вот его код:
@bot.message_handler(func=lambda message: user_data.get(message.chat.id) == 'settings_')
def settings_(message):
print(1)
markup = types.InlineKeyboardMarkup(row_width=1)
item1 = types.InlineKeyboardButton("?Создать событие", callback_data='create_event')
item2 = types.InlineKeyboardButton("?Создать команду", callback_data='create_command')
markup.add(item1, item2)
bot.send_message(message.chat.id, "Создайте события а также команды для изменения данных в таблице", reply_markup=markup)
Другие обработчики сообщений и обработчики callback-запросов работают корректно, но этот конкретный обработчик для состояния 'settings_' не срабатывает.
Убедился, что состояние правильно устанавливается:
user_data[call.message.chat.id] = 'settings_'
При вызове callback-запроса данные сохраняются в user_data, и это видно из отладочных сообщений.
Проверил порядок определения обработчиков — универсальный обработчик сообщений стоит последним. Вот весь код, связанный с настройкой состояния и обработчиками сообщений и callback-запросов:
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.message:
if call.data == "create":
user_data[call.message.chat.id] = "create_start"
#Тут бот отправляет сообщение
elif call.data == "settings":
user_data[call.message.chat.id] = 'settings_'
bot.send_message(call.message.chat.id, "Настройки открыты")
@bot.message_handler(func=lambda message: user_data.get(message.chat.id) == 'settings_')
def settings_(message):
print(1)
markup = types.InlineKeyboardMarkup(row_width=1)
item1 = types.InlineKeyboardButton("?Создать событие", callback_data='create_event')
item2 = types.InlineKeyboardButton("?Создать команду", callback_data='create_command')
markup.add(item1, item2)
bot.send_message(message.chat.id, "Создайте события а также команды для изменения данных в таблице", reply_markup=markup)
# Универсальный обработчик
@bot.message_handler(func=lambda message: True)
def messages(message):
# обработка сообщений
Вот фрагмент рабочего обработчика.
@bot.message_handler(func=lambda message: user_data.get(message.chat.id) == 'create_start')
def create(message):
# …
При нажатии на in-line кнопку «создать» в телеграмм боте вызывается callback_inline отправляет сообщение и дальше выполняет функцию create,а что касаемо in-line кнопки “Настройки” отправляется смс про то что настройки открыты,а дальше по какой-то причине обработчик @bot.message_handler(func=lambda message: user_data.get(message.chat.id) == 'settings_')
не срабатывает функция settings_ не выполняется