@ArtemMik
Python

Как вывести все ссылки одним сообщением?

У меня есть бот, в которого я скидываю много фотографий с текстом, бот мне в ответ скидывает ссылки на 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
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы