Задать вопрос
@brumper

Как объединить в проверке (if call.data == '') несколько параметров?

вот фрагмент кода
elif message.text == 'produkt':



            # кнопки на название
            markup = types.InlineKeyboardMarkup(row_width=2)

            item1 = types.InlineKeyboardButton("apple", callback_data='applef')
            item2 = types.InlineKeyboardButton("melon", callback_data='melon')
            item3 = types.InlineKeyboardButton("bred", callback_data='bred')
            item4 = types.InlineKeyboardButton("meat", callback_data='meat')


            markup.add(item1, item2, item3, item4)




            bot.send_message(message.chat.id,
                                   '<b>В наличии из продуктов</b>', parse_mode='html', reply_markup=markup)


@bot.callback_query_handler(func = lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'apple' or 'melon':    #Вот в этом месте проблема


                global a
                a = call.data
                print (a)
                markup1 = types.InlineKeyboardMarkup(row_width=3)
                item1 = types.InlineKeyboardButton("1 шт", callback_data='1')
                item2 = types.InlineKeyboardButton("2 шт", callback_data='2')
                item3 = types.InlineKeyboardButton("3 шт", callback_data='3')

                markup1.add(item1, item2, item3)


                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                                      text="Выберите количество:",
                                      reply_markup=markup1)

    except Exception as e:
        print(repr(e))

при нажатии на инлайн кнопку 'apple' все работает как нужно
кликабельными становяться все кнопки, даже если нажать на кнопку 'meat' появиться сообщение с выбором количества
Как сделать чтобы кликабельными были только те кнопки которые есть в условии проверки
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
if call.data == 'apple' or 'melon':    #Вот в этом месте проблема

Ещё один ботописатель с этой проблемой. Вот откуда такое упорное желание дословно переводить с русского на питон?

Правильно:
if call.data in ('apple', 'melon'):
Ну или так:
if call.data == 'apple' or call.data == 'melon':

То, что ты написал, расшифровывается как
if (call.data == 'apple') or ('melon' != ''):
что эквивалентно
if (call.data == 'apple') or True:
А x or True всегда даст True, так же как x and False всегда даст False.
Так что получается в итоге
if True:

Учи основы языка - потом уже берись за ботов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mikhail00900
if call.data == 'apple' or call.data == 'melon'
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы