@Kapuzev

Пишу бота в Telegram на Python для записи дз. Не понимаю, почему не возможно сделать три уровня?

Пишу бота. Его суть в том что он должен писать домашнюю работу на следующий день. И при введении пароля должна быть возможность ввести это самое дз. Помогите. Я правда не понимаю почему бот не дает вводить дз. Зарание спасибо)
mport telebot
import constants
from telebot import apihelper
proxy = constants.ip+":"+constants.port
apihelper.proxy = {'https': proxy}
bot = telebot.TeleBot(constants.token1)


@bot.message_handler(commands=['start'])
def hendle_start(message):
    user_markup = telebot.types.ReplyKeyboardMarkup(True, True)
    user_markup.row('Понедельник', 'Вторник')
    user_markup.row('Среда', 'Четверг')
    user_markup.row('Пятница', 'Суббота')
    bot.send_message(message.chat.id, "Выберите день недели", reply_markup = user_markup) #включен

    @bot.message_handler(content_types=('text'))
    def hendle_text(message):
        if message.text == constants.password:
            bot.send_message(message.chat.id, "Пароль верен")
            @bot.message_handler(content_types=('text'))
            def hendle_text(message):
                if message.text == "Алгебра":
                    bot.send_message(message.chat.id, "Предмет выбран")
                    print(message.text)



        elif message.text == "Понедельник":
            bot.send_message(message.chat.id, "Выбран понедельник")
        elif message.text == "Вторник":
            bot.send_message(message.chat.id, "Выбран вторник")
        elif message.text == "Четверг":
            bot.send_message(message.chat.id, "Выбран четверг")
        elif message.text == "Пятница":
            bot.send_message(message.chat.id, "Выбрана пятница")
        elif message.text == "Суббота":
            bot.send_message(message.chat.id, "Выбранна суббота")







bot.polling(none_stop=True, interval=4)


PS

Не понимаю, почему не возможно сделать три уровня @bot.message_hendler и не понимаю как работать с bot.register_next_step_handle. Прочел уже столько, что перестаю понимать обычный текст.

Мой код:
import telebot
import constants
from telebot import apihelper
proxy = constants.ip+":"+constants.port
apihelper.proxy = {'https': proxy}
bot = telebot.TeleBot(constants.token1)
a = 0
pred = ("")
class dz:
    def __init__(self, name):
        self.Algebra = None
        self.Geom = None
        self.Rus = None
        self.Liter = None
        self.Him = None
        self.Fiz = None
        self.Nem = None
        self.Biol = None
        self.Istor = None
        self.Obsh = None
        self.Geogr = None
        self.Inf = None
        self.AnglSA = None
        self.AnglTA = None
        self.InfSA = None
        self.InfTA = None
        self.Fizra = None
        self.OBZh = None



@bot.message_handler(commands=['start'])
def hendle_start(message):
    user_markup = telebot.types.ReplyKeyboardMarkup(True, True)
    user_markup.row('Понедельник', 'Вторник', 'Среда')
    user_markup.row('Четверг', 'Пятница', 'Суббота')
    user_markup.row('/admin')
    bot.send_message(message.chat.id, "Выберите день недели", reply_markup = user_markup) #включен

    @bot.message_handler(content_types='text')
    def hendle_text(message):
        if message.text == "Понедельник":
            bot.send_message(message.chat.id, "ПОНЕДЕЛЬНИК")
            bot.send_message(message.chat.id, "Алгебра")
        elif message.text == "Вторник":
            bot.send_message(message.chat.id, "Выбран вторник")
        elif message.text == "Среда":
            bot.send_message(message.chat.id, "Выбрана среда")
        elif message.text == "Четверг":
            bot.send_message(message.chat.id, "Выбран четверг")
        elif message.text == "Пятница":
            bot.send_message(message.chat.id, "Выбрана пятница")
        elif message.text == "Суббота":
            bot.send_message(message.chat.id, "Выбранна суббота")

@bot.message_handler(commands=['admin'])
def hendle_admin(message):
    bot.send_message(message.chat.id, "Введите пароль")
    @bot.message_handler(content_types='text')
    def hendle_text(message):
        if message.text == constants.password:
            bot.send_message(message.chat.id, "Пароль верен")
            while a == 0:
                user_markup = telebot.types.ReplyKeyboardMarkup(True, True)
                user_markup.row('Алгебра', 'Геометрия', 'Русский', 'Литература')
                user_markup.row('Химия', 'Физика', 'Немецкий', 'Биология')
                user_markup.row('История', 'Обществознание', 'География', 'Информатика')
                user_markup.row('АнглийскийСА', 'АнглийскийТА', 'Физкультура', 'Обж')
                bot.send_message(message.chat.id, "Выберите предмет", reply_markup=user_markup)

                @bot.message_handler(content_types='text')
                def hendle_text(message):
                    while a == 0:
                        if message.text == "Алгебра":
                            bot.send_message(message.chat.id, "Запишите дз")

                        elif message.text == "Геометрия":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Русский":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Литература":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Химия":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Физика":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Немецкий":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "История":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Обществознание":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "География":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Информатика":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "АнглийскийСА":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "АнглийскийТА":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Физкультура":
                            bot.send_message(message.chat.id, "Запишите дз")
                        elif message.text == "Обж":
                            bot.send_message(message.chat.id, "Запишите дз")

        else:
            bot.send_message(message.chat.id, "Повторите попытку или выйдете в меню дз /start")


bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
@anerev
В этой библиотеке так не работают декораторы, в ней есть метод bot.register_next_step_handle, при помощи него такое и делается. Ссылка на официальный пример на github - https://github.com/eternnoir/pyTelegramBotAPI/blob...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs
C++ developer
Отвечал в дубликате: Пишу бота в Telegram на Python для записи дз. Не понимаю, почему не возможно сделать три уровня?
В ответе есть пример использования register_next_step_handle
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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