@subhe

Почему после нажатия inline кнопки бот не запускает ее обработчик?

Бот парсит страницу и получает список эпизодов в ep_list. Далее он раскрывает этот список в inline клавиатуре с сообщением 'Выберите эпизод:'.
Когда я нажимаю на кнопку под этим сообщением бот должен меня перекинуть в обработчик episode_callback(call), но вместо этого начинает выполнять функцию season_callback(call) заново, принимая в season_selected call.back только что нажатой кнопки и отправляет сообщение 'Выберите эпизод:' заново.

@bot.callback_query_handler(func=lambda call: 'season')
def season_callback(call):
    season_selected = call.data
    message_text_1 = season_selected[-1]

    se = []
    link = series_page_responce.find(id='soap').find_all('a')
    for i in link:
        se.append(i.get('href'))

    index_season = None
    for i in range(len(se)):
        if message_text_1 in se[i]:
            index_season = i
            break
    if index_season is not None:
        season_page = main_link + se[index_season]
        season_page_responce = session2.get(season_page, headers=headers)
        season_page_responce = BeautifulSoup(season_page_responce.text, 'html.parser')

        ep_list = []
        episodes = season_page_responce.find_all('li', {'data:quality': '2', 'data:translate': "rus"})
        for episode in episodes:
            ep_list.append(episode['data:episode']

        markup = types.InlineKeyboardMarkup(row_width=1)
        for episode in ep_list:
            markup.add(types.InlineKeyboardButton(episode, callback_data=episode))
        bot.send_message(chat_id=call.message.chat.id, text='Выберите эпизод:', reply_markup=markup)


@bot.callback_query_handler(func=lambda call: 'episode')
def episode_callback(call):
    bot.send_message(chat_id=call.message.chat.id, text='Вы успешно выбрали эпизод!')
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
lambda call: 'season'
Это работает не так. Читай документацию.
Лямбда должна вернуть истинное булево значение, если обработчик может обработать этот запрос, и ложное - если нет.
Внезапно, любая непустая строка интерпретируется как истина. А значит, первый обработчик получает все запросы.
Сравнивай call.data с искомой строкой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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