nice-coding
@nice-coding
веб-программист

Как переключать функции обработчики текстовых сообщений в telebot python?

Как осуществлять запуск функций обработчиков текстовых сообщений в определенном порядке? Пользователь должен последовательно ответить на ряд вопросов, нажимая кнопки представленных вариантов ответов. Можно было бы конечно всю цепочку в одну функцию затолкать, но это будет громоздко, до и 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)
  • Вопрос задан
  • 4283 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы