Загрузка...

Как заблокировать выполнение функции кнопки при каком то условии?

Тема в разделе Python создана пользователем beta 29 мар 2025. 235 просмотров

  1. beta
    beta Автор темы 29 мар 2025 475 6 янв 2019
    Python
    @dp.callback_query_handler(lambda c: c.data == 'profile')
    async def process_profile(callback_query: types.CallbackQuery):
    user_id = callback_query.from_user.id
    chat_id = callback_query.message.chat.id
    first_name = callback_query.from_user.first_name
    language_code = callback_query.from_user.language_code
    premium = callback_query.from_user.is_premium

    # тут запрашиваем массив ссылок
    status, code, links = await request_op(
    user_id, chat_id,
    first_name=first_name,
    language_code=language_code,
    premium=premium
    )

    if links:
    # тут формируется блок подписок если ссылки есть
    subscription_text = "<b>Для доступа к профилю подпишитесь на следующие ресурсы:</b>\n"
    for link in links:
    subscription_text += f"• {link}\n"
    keyboard = InlineKeyboardMarkup(row_width=1)
    keyboard.add(InlineKeyboardButton("Главное меню", callback_data="no_action"))
    await bot.edit_message_text(
    subscription_text,
    chat_id,
    callback_query.message.message_id,
    parse_mode="HTML",
    reply_markup=keyboard
    )
    # если массив ссылок не пустой формируется блок подписок и останавливается дальнейшее выполнение
    return

    # тут если при запросе массив ссылок пустой мы выводим сам профиль
    await bot.delete_message(chat_id, callback_query.message.message_id)
    await show_profile(callback_query)
    Мне надо что бы при нажатии запрашивался массив ссылок у сервиса, если массив ссылок не пустой тогда формируется блок подписок как в коде и по идее выполнение на этом должно закончится, но оно почему то продолжает и выводит сам профиль хотя этого происходить не должно, в чем проблема
    Надо что бы если массив ссылок был не пустой формировался только блок подписок и ничего не происходило, если массив ссылок пустой тогда блок подписок не выводится и появляется сам профиль
     
  2. Нинтендо
    Нинтендо 29 мар 2025 I was tryna beat a case 5956 12 сен 2021
    в питоне после return ноль не ставится?
     
    1. beta Автор темы
  3. doublepurpose
    doublepurpose 29 мар 2025 120 27 мар 2025
    await bot.answer_callback_query(callback_query.id) воткни перед return, также залогируй то что лежит в векторе links, проверь точно ли отсюда вызывается show_profile, тож можешь логнуть ну или принтами обложить хотяб
     
  4. gcc_machine
    output этого можно?
    status, code, links = await request_op( user_id, chat_id, first_name=first_name, language_code=language_code, premium=premium )
     
  5. beta
    beta Автор темы 29 мар 2025 475 6 янв 2019
    Попробовал логировать массив ссылок полученный
    [IMG]
    [] в нём должны быть links то есть ссылки, но там нихуя нету, а блок подписок формируется, массив пустой но ссылки есть
    тут вообще хуй знает что куда
     
    1. doublepurpose
      beta, есть сурс функции что возвращает массив?
    2. Посмотреть следующие комментарии (7)
  6. APT29388
    У тебя `return` стоит, должно работать. Проверь `request_op` и данные, которые он возвращает
     
  7. n1s_01
    Попробуй. Поправил.

    Python
    @dp.callback_query_handler(lambda c: c.data == 'profile')
    async def process_profile(callback_query: types.CallbackQuery):
    user_id = callback_query.from_user.id
    chat_id = callback_query.message.chat.id
    first_name = callback_query.from_user.first_name
    language_code = callback_query.from_user.language_code
    premium = callback_query.from_user.is_premium

    status, code, links = await request_op(
    user_id, chat_id,
    first_name=first_name,
    language_code=language_code,
    premium=premium
    )

    if links and isinstance(links, (list, tuple)) and len(links) > 0:
    subscription_text = "<b>Для доступа к профилю подпишитесь на следующие ресурсы:</b>\n"
    for link in links:
    subscription_text += f"• {link}\n"
    keyboard = InlineKeyboardMarkup(row_width=1)
    keyboard.add(InlineKeyboardButton("Главное меню", callback_data="no_action"))
    await bot.edit_message_text(
    subscription_text,
    chat_id,
    callback_query.message.message_id,
    parse_mode="HTML",
    reply_markup=keyboard
    )
    return

    await bot.delete_message(chat_id, callback_query.message.message_id)
    await show_profile(callback_query)
     
    1. beta Автор темы
      n1s_01, ай брад спасибо но там проблема была в том что эта часть кода вообще не использовалась а блок подписок выводил subgram сервис а не мой код
Top
Загрузка...