У меня есть бот, в которого я скидываю много фотографий с текстом, бот мне в ответ скидывает ссылки на telegra.ph этих фоток, но он скидывает отдельное сообщение на каждую фотку, мне нужно, чтобы он скомпоновал все ссылки в одно единственное сообщение, помогите, пожалуйста
Код:
@dp.message_handler(content_types=types.ContentType.PHOTO)
async def handle_photo(message: types.Message):
cur.execute('SELECT expiry_date FROM users WHERE user_id = ?', (message.from_user.id,))
rows = cur.fetchall()
if not rows or rows[0][0] is None:
await bot.send_message(message.from_user.id, 'У вас нет подписки, купите её нажав на кнопку ❌',
reply_markup=buy2)
return
expiry_date_str = rows[0][0]
expiry_date = datetime.datetime.strptime(expiry_date_str, '%Y-%m-%d').date()
current_date = datetime.datetime.now().date()
if current_date > expiry_date:
await bot.send_message(message.from_user.id, 'Ваша подписка истекла ❌')
return
await message.reply("Подождите, пока бот загрузит фото!")
# Получаем список фото и текст
photos = message.photo
caption = message.caption or ''
# Выбираем фото с наибольшими размерами
largest_photo = max(photos, key=lambda p: (p.width, p.height))
photo_id = largest_photo.file_id
file = await bot.get_file(photo_id)
file_path = file.file_path
photo_urls = []
# Скачиваем фото
async with aiohttp.ClientSession() as session:
async with session.get(f'https://api.telegram.org/file/bot{TOKEN}/{file_path}') as response:
photo_data = await response.read()
photo_url = await upload_to_telegraph(photo_data)
photo_urls.append(photo_url)
print(photo_urls)
# Проверка наличия текста для Telegraph
if caption:
try:
# Формируем сообщение
if photo_urls:
links = '\n'.join(photo_urls)
await message.reply(f'{caption}\nСсылки на фото:\n{links}')
else:
await message.reply(f'Ваш текст опубликован:{caption}\n{caption}')
except TelegraphException as e:
await message.reply(f'Ошибка при создании страницы на Telegraph: {str(e)}')
else:
# Если текста нет, отправляем только ссылки на фото
if photo_urls:
links = '\n'.join(photo_urls)
await message.reply(f'Ссылки на фото:\n{links}\n{caption}')
else:
await message.reply('Ошибка при загрузке фото на Telegraph.')
async def upload_to_telegraph(photo: bytes):
# Загрузка фото на Telegraph
async with aiohttp.ClientSession() as session:
async with session.post(
'https://telegra.ph/upload',
data={'file': photo}
) as response:
result = await response.json()
if 'error' in result:
return None
# Получаем URL изображения
photo_url = 'https://telegra.ph' + result[0]['src']
return photo_url