Как переводить пользователя на следующий шаг без ожидания ввода текста?
Как в пошаговой функции работы бота переводить пользователя напрямую к следующему шагу? У меня один пошаговый цикл в находится в одном файле, а меню Reply клавиатурой в другом. Хочется, чтобы при нажатии клавиши, бот сразу же переходил к выполнению цикла, а не ждал пользовательского ввода через register_next_step_handler.
Приведу пример:
Main.py
def menu_step(message):
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
markup.add('Анкета 1', 'Анкета 2')
markup.add('Обратная связь')
bot.send_message(message.chat.id, 'Выбери ниже', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def statistics_step(message):
if message.text.lower() == 'анкета 1':
msg = bot.send_message(message.chat.id, 'КАК УБРАТЬ ЭТОТ ТЕКСТ И СРАЗУ ПЕРЕЙТИ К СЛЕДУЮЩЕМУ ШАГУ?')
bot.register_next_step_handler(msg, Cycle.null_step)
Cycle.py
def null_step(message):
msg = bot.send_message(message.chat.id, "Введите данные 1")
bot.register_next_step_handler(msg, one_step)
# Ну и далее
Можно, конечно, сместить анкету на один шаг и просить ввести данные сразу в Main.py, но не очень красиво. Хотелось бы другой вариант решения. Хотелось бы именно Reply клавиатуру.
Ответы (1 шт):
Не нужно использовать bot.register_next_step_handler(msg, Cycle.null_step) (получение, собственно, 'пользовательского ввода'), а необходимо сразу вызвать необходимую вам функцию:
@bot.message_handler(content_types=['text'])
def statistics_step(message):
if message.text.lower() == 'анкета 1':
Cycle.null_step(message)