@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) 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) Мне надо что бы при нажатии запрашивался массив ссылок у сервиса, если массив ссылок не пустой тогда формируется блок подписок как в коде и по идее выполнение на этом должно закончится, но оно почему то продолжает и выводит сам профиль хотя этого происходить не должно, в чем проблема Надо что бы если массив ссылок был не пустой формировался только блок подписок и ничего не происходило, если массив ссылок пустой тогда блок подписок не выводится и появляется сам профиль
await bot.answer_callback_query(callback_query.id) воткни перед return, также залогируй то что лежит в векторе links, проверь точно ли отсюда вызывается show_profile, тож можешь логнуть ну или принтами обложить хотяб
output этого можно? status, code, links = await request_op( user_id, chat_id, first_name=first_name, language_code=language_code, premium=premium )
Попробовал логировать массив ссылок полученный [] в нём должны быть links то есть ссылки, но там нихуя нету, а блок подписок формируется, массив пустой но ссылки есть тут вообще хуй знает что куда
beta, используй лучше более человеческий вид возвращения ответа от функции, а не tuple, и обращаться к объекту будет куда проще, и лучше использоваться if len(links) async def request_op(user_id, chat_id, gender=None, first_name=None, language_code=None, premium=None): try: headers = { 'Content-Type': 'application/json', 'Auth': API_KEY, 'Accept': 'application/json', } data = { 'UserId': user_id, 'ChatId': chat_id, 'first_name': first_name, 'language_code': language_code, 'Premium': premium } if gender: data['Gender'] = gender async with aiohttp.ClientSession() as session: async with session.post('https://api.subgram.ru/request-op/', headers=headers, json=data) as response: if not response.ok: logging.error('SubGram: %s' % str(await response.json())) return 'ok', 400, [] response_json = await response.json() links = response_json.get("links") or [] return { "status": response_json.get("status"), "code": response_json.get("code"), "links": links } except Exception as e: logging.error('SubGram: %s' % str(e)) return { "status": 'ok', "code": 400, "links": [] } Python async def request_op(user_id, chat_id, gender=None, first_name=None, language_code=None, premium=None): try: headers = { 'Content-Type': 'application/json', 'Auth': API_KEY, 'Accept': 'application/json', } data = { 'UserId': user_id, 'ChatId': chat_id, 'first_name': first_name, 'language_code': language_code, 'Premium': premium } if gender: data['Gender'] = gender async with aiohttp.ClientSession() as session: async with session.post('https://api.subgram.ru/request-op/', headers=headers, json=data) as response: if not response.ok: logging.error('SubGram: %s' % str(await response.json())) return 'ok', 400, [] response_json = await response.json() links = response_json.get("links") or [] return { "status": response_json.get("status"), "code": response_json.get("code"), "links": links } except Exception as e: logging.error('SubGram: %s' % str(e)) return { "status": 'ok', "code": 400, "links": [] }
Попробуй. Поправил. @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) 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)
n1s_01, ай брад спасибо но там проблема была в том что эта часть кода вообще не использовалась а блок подписок выводил subgram сервис а не мой код