@drqqv

Как сделать два message_handler для бота на python?

Изучаю pyletelegrambotapi. При написании бота столкнулся с проблемой. Я создал несколько if в message_handler и мне надо чтобы пользователь при попадании в один из них мог набирать текст с клавиатуры. Я попробовал написать это через else. То есть пользователь попадет в if через кнопки, вместо клавиатуры, затем в нужном месте кнопки пропадают и появляется клавиатура. И весь текст набранный с клавиатуры обрабатывается через else в message_handler. Сама проблема заключается в том, что пользователь может на любом этапе убрать кнопки и отправить текст и он обработается будто пользователь находится в определенном месте if. Мне же надо чтобы бот мог обработать введеный текст с клавиатуры только на определенном этапе (Когда он попадает в elif message.text == 'Хорошо':)

Бот: https://t.me/lestex_bot (Чтобы перейти в нужный if надо нажать "Оставить заявку на выполнение работы" И нажать "Хорошо")

PS. Код может быть очень колхозный, только изучаю все это

@bot.message_handler(content_types=['text'])
def otvet(message):
    if message.text == "Привет":
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        user_markup.row('Чат с работами', 'Показать новости')
        user_markup.row('Оставить заявку на выполнение работы')
        bot.send_message(message.from_user.id, "Выбери, что ты хочешь сделать.", reply_markup=user_markup)

    elif message.text == 'Чат с работами':
            markup = types.InlineKeyboardMarkup()
            btn_my_site = types.InlineKeyboardButton(text='Чат с работами', url='https://t.me/AnonChanBot?start=-1001502978392')
            markup.add(btn_my_site)
            bot.send_message(message.chat.id, "Здесь вы можете присылать работы, которые давали вам преподаватели, чтобы облегчить жизнь тем, кому их ещё не давали. Ваши сообщения АНОНИМНЫ.", reply_markup=markup)
    elif message.text == "Показать новости":
        bot.send_message(message.from_user.id, "Тут будут показываться новости")


    elif message.text == 'Оставить заявку на выполнение работы':
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        user_markup.row('Хорошо','Назад')
        bot.send_message(message.from_user.id, "Опишите какую работу вы хотите заказать, после этого с вами свяжутся. Для связи укажите ваш номер телефона в осписании работы", reply_markup=user_markup)


    elif message.text == 'Хорошо':
        markup = types.ReplyKeyboardRemove(selective=False)
        bot.send_message(message.from_user.id, " Пример: \nРеферат \nФилософия \nПреподователь \n1 курс \n+78007005060", reply_markup =  markup)


    elif message.text == 'Назад':
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        user_markup.row('Чат с работами', 'Показать новости')
        user_markup.row('Оставить заявку на выполнение работы')
        bot.send_message(message.from_user.id, "Выбери, что ты хочешь сделать.", reply_markup=user_markup)


    else:
        bot.send_message(message.from_user.id,"Мы приняли ваши заявку✅")
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        user_markup.row('Чат с работами', 'Показать новости')
        user_markup.row('Оставить заявку на выполнение работы')
        bot.send_message(message.from_user.id, "Выбери, что ты хочешь сделать.", reply_markup=user_markup)
  • Вопрос задан
  • 1773 просмотра
Решения вопроса 1
@twistfire92
Python backend developer
Если вам не нравится структура с if, можете раскидать все на отдельные хендлеры.

@bot.message_handler(func=lambda message: message.text=='Привет')
def privet(message):
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    user_markup.row('Чат с работами', 'Показать новости')
    user_markup.row('Оставить заявку на выполнение работы')
    bot.send_message(message.from_user.id, "Выбери, что ты хочешь сделать.", reply_markup=user_markup)

@bot.message_handler(func=lambda message: message.text=='Чат с работами')
def chat_with_works(message):
    markup = types.InlineKeyboardMarkup()
    btn_my_site = types.InlineKeyboardButton(text='Чат с работами', url='https://t.me/AnonChanBot?start=-1001502978392')
    markup.add(btn_my_site)
    bot.send_message(message.chat.id, "Здесь вы можете присылать работы, которые давали вам преподаватели, чтобы облегчить жизнь тем, кому их ещё не давали. Ваши сообщения АНОНИМНЫ.", reply_markup=markup)

# Ну и так далее...


Если хотите после какого-то конкретного этапа ожидать от пользователя ввода информации текстом и потом использовать этот текст, то вам необходимо использовать register_next_step_handler.
Пример можно найти тут.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект