Сложное условие в message_handler

Рейтинг: 0Ответов: 2Опубликовано: 19.02.2023

хочу сделать сложное условие в декораторе message_handler для бота тг библиотека pyTelegramBotAPI, подскажите, пожалуйста, как можно это реализовать. Нужно, чтобы функция рекомендации срабатывала при нажатии любой из 4 предложенных ранее кнопок

@bot.message_handler(chat_types=["private"], func=lambda msg: msg.text == 'Читал, классная'| 'Читал, не очень'| 'Не читал, но хочу'| 'Не читал, не хочу'| 'Подробнее о книге')
def if_sp(message: types.Message):

    markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
    markup.row('Читал, классная', 'Читал, не очень', 'Не читал, но хочу', 'Не читал, не хочу', 'Подробнее о книге')

    sarkup = types.InlineKeyboardMarkup()
    sarkup.add(types.InlineKeyboardButton("796,00₽",url="ссылка"))

    china = open('492fbb33-82d6-45b3-a1aa-0e1351962523_9cf6529d-66e9-4c67-849b-a1b2a641c60b.webp', 'rb')
    bot.send_photo(message.chat.id, china, caption=f'Китай и окрестности. Мифология, фольклор, литература')
    bot.send_message(message.chat.id, 'Купить', reply_markup=sarkup)
    bot.send_message(message.chat.id, 'Оцените книгу', reply_markup=markup)

Ответы

▲ 1Принят

Можно попробовать решить таким способом

@bot.message_handler(chat_types=["private"], func=lambda msg: any([
    msg.text == 'Читал, классная',
    msg.text == 'Читал, не очень',
    msg.text == 'Не читал, но хочу',
    msg.text == 'Не читал, не хочу',
    msg.text == 'Подробнее о книге'
]))
def if_sp(message: types.Message):
    # Ваш код здесь
▲ 1

Можно добавить проверку сообщения в множестве.

@bot.message_handler(chat_types=["private"], func=lambda msg: msg.text in {
    'Читал, классная',
    'Читал, не очень',
    'Не читал, но хочу',
    'Не читал, не хочу',
    'Подробнее о книге'
})
def if_sp(message: types.Message):
    ...