@dp.callback_query_handler(text='subchanneldone') # Что будет выводиться, если человек подписан
async def subchanneldone(message: types.Message):
await bot.delete_message(message.from_user.id, message.message_id)
if sub_check_channel(await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=message.from_user.id)):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Процессоры", "Видеокарты", "Материнские платы"]
keyboard.add(*buttons)
await message.answer('Какие комплектующие вас интересуют?', reply_markup=keyboard)
else:
await message.answer(NOT_SUB_MESSAGE, reply_markup=ut.sub_menu)
# начало numbers
# начало процессоры
@dp.message_handler(Text(equals='Процессоры'))
async def get_numbers(message: types.Message):
num_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
num_buttons = ['10', '30', '50', 'все'] # сколько карточкек будет показываться
num_keyboard.add(*num_buttons)
await message.answer('Сколько карточек хочешь увидеть?', reply_markup=num_keyboard)
@dp.message_handler(Text(equals='10'))
async def result(message: types.Message):
await message.answer('Ищем лучшее для вас')
CPU()
count = 0
with open('CPU_citilink5%.json') as file:
data = json.load(file)[:10]
for index, i in enumerate(data):
card = f'{hbold(i.get("name"))}\n' \
f'{hbold(i.get("price") + " ₽")}\n' \
f'{i.get("link")}'
count += 1
if index % 20 == 0:
time.sleep(3)
await message.answer(card)
print(count)
@dp.message_handler(Text(equals='30'))
async def result(message: types.Message):
await message.answer('Ищем лучшее для вас')
CPU()
count = 0
with open('CPU_citilink5%.json') as file:
data = json.load(file)[:30]
for index, i in enumerate(data):
card = f'{hbold(i.get("name"))}\n' \
f'{hbold(i.get("price") + " ₽")}\n' \
f'{i.get("link")}'
count += 1
if index % 20 == 0:
time.sleep(3)
await message.answer(card)
print(count
Как видите эта часть повторяется очень часто
for index, i in enumerate(data):
card = f'{hbold(i.get("name"))}\n' \
f'{hbold(i.get("price") + " ₽")}\n' \
f'{i.get("link")}'
if index % 20 == 0:
time.sleep(3)
await message.answer(card)
Я вынес в отдельную функцию
def create_card(data):
for index, i in enumerate(data):
card = f'{hbold(i.get("name"))}\n' \
f'{hbold(i.get("price") + " ₽")}\n' \
f'{i.get("link")}'
if index % 20 == 0:
time.sleep(3)
return card
далее таким способом вызвал в handler
@dp.message_handler(Text(equals='10'))
async def result(message: types.Message):
await message.answer('Ищем лучшее для вас')
CPU()
count = 0
with open('CPU_citilink5%.json') as file:
data = json.load(file)[:10]
card = create_card(data)
await message.answer(card)
print(count)
Ошибок нет, но возвращается только одна карточка вместо 10 заявленных. Как сделать так чтобы возвращалось нужное кол-во карточек и сократить код?