Как осуществлять запуск функций обработчиков текстовых сообщений в определенном порядке? Пользователь должен последовательно ответить на ряд вопросов, нажимая кнопки представленных вариантов ответов. Можно было бы конечно всю цепочку в одну функцию затолкать, но это будет громоздко, до и pep8 мозги вынесет из-за нестандартной длины кода. Да и трудно читаемым тогда станет... в общем, хочется, чтоб красиво было поэтапно по функциям все разложено - каждый вопрос и обработка ответа на него - отдельная функция. Проблема в том, что либо запускаются сразу все функции, либо никакие из них. А нужно, чтобы первая функция отработала, передала результаты ответа пользователя и запустила следующую функцию. и так до конца. register next step handler пробовал, что-то не вышло. Лямбду с переменными индикаторами в ханлер тоже засовывал, не сработало.
Код:
import constants
import telebot
import datetime
from variables import *
from telebot import types
bot = telebot.TeleBot(constants.token)
@bot.message_handler(commands=['start'])
def handle_start(message):
msg = message.text
sender = message.from_user.first_name + ' ' + message.from_user.last_name
date = message.date
date = datetime.datetime.fromtimestamp(date)
date = date.strftime('%d/%m/%Y %H:%M:%S')
print('{} {}: {}'.format(date, sender, msg))
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True,
resize_keyboard=True)
markup.add(start_input, get_info)
bot.send_message(message.chat.id, greeting, reply_markup=markup)
print(response, greeting[0:18], '...')
return
@bot.message_handler(content_types=['text'])
def handle_ask_sex(message):
msg = message.text
sender = message.from_user.first_name + ' ' + message.from_user.last_name
date = message.date
date = datetime.datetime.fromtimestamp(date)
date = date.strftime('%d/%m/%Y %H:%M:%S')
if msg == start_input or msg == start_input2:
print('{} {}: {}'.format(date, sender, msg))
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True,
resize_keyboard=True)
markup.row(male, female)
bot.send_message(message.chat.id, ask_sex, reply_markup=markup)
print(response, ask_sex)
elif msg == get_info:
print('{} {}: {}'.format(date, sender, msg))
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True,
resize_keyboard=True)
markup.row('Ясно. ' + start_input)
bot.send_message(message.chat.id, info, reply_markup=markup)
print(response, info)
elif msg == male or msg == female:
print('{} {}: {}'.format(date, sender, msg))
sex = msg
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True,
resize_keyboard=True)
markup.row(pos_answer, neg_answer)
bot.send_message(message.chat.id, ask_marital_status,
reply_markup=markup)
print(response, ask_marital_status)
bot.register_next_step_handler(
message, handle_ask_marital_status(msg, sender, date, message))
return sex, first_func_completed
@bot.message_handler(content_types=['text'])
def handle_ask_marital_status(msg, sender, date, message):
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True,
resize_keyboard=True)
markup.row(pos_answer, neg_answer)
if msg == pos_answer:
marital_status = True
if msg == pos_answer or msg == neg_answer:
print('{} {}: {}'.format(date, sender, msg))
bot.send_message(message.chat.id, ask_sons, reply_markup=markup)
print(response, ask_sons)
bot.register_next_step_handler(
message, handle_ask_sons(msg, sender, date, message))
return marital_status, second_func_started
def handle_ask_sons(msg, sender, date, message):
if msg == 'pos_answer':
sons = True
print('{} {}: {}'.format(date, sender, msg))
bot.send_message(message.chat.id, ask_quantity,
reply_markup=hide_markup)
print(response, ask_quantity)
while int(msg) is int:
if int(msg) is int:
sons = int(msg)
else:
bot.send_message(message.chat.id, repeat_quantity)
if msg is not None:
pass
bot.polling(none_stop=True)