• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Ошибка при скачивании фотографии, которую отправил пользователь боту в телеграмм.

Ali_Pythonist

Member
21.02.2024
14
0
Привет, пытаюсь скачать фото которое отправил пользователь, но получаю такую ошибку TypeError: a bytes-like object is required, not '_io.BytesIO'. Как исправить код? Помогите пожалуйста, код ниже.

Python:
import asyncio
import os
from io import BytesIO
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message
from testBot.token_bot import token


bot = Bot(token=token)
dp = Dispatcher()
by = BytesIO()

@dp.message(Command('start'))
async def bot_start(message: Message):
    await message.answer(text='привет.')

@dp.message(F.photo)
async def bot_photo(message: Message):
    photo_id = message.photo[-1].file_id
    print(type(photo_id))
    file_photo = await bot.get_file(photo_id)
    print(type(file_photo))
    file_name, file_extension = os.path.splitext(file_photo.file_path)
    print(type(file_name), type(file_extension))
    download_file_photo = await bot.download_file(file_photo.file_path)
    print(type(download_file_photo))
    src = 'photo/' + photo_id + file_extension
    with open(src, 'wb') as new_file:
        new_file.write(download_file_photo)


async def main():
    await dp.start_polling(bot)
asyncio.run(main())
 
Попробуйте записать байты таким образом
Python:
new_file.write(download_file_photo.getbuffer())
он из _io.BytesIO сделает байтовую строку
 
Привет, пытаюсь скачать фото которое отправил пользователь, но получаю такую ошибку TypeError: a bytes-like object is required, not '_io.BytesIO'. Как исправить код? Помогите пожалуйста, код ниже.

Python:
import asyncio
import os
from io import BytesIO
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message
from testBot.token_bot import token


bot = Bot(token=token)
dp = Dispatcher()
by = BytesIO()

@dp.message(Command('start'))
async def bot_start(message: Message):
    await message.answer(text='привет.')

@dp.message(F.photo)
async def bot_photo(message: Message):
    photo_id = message.photo[-1].file_id
    print(type(photo_id))
    file_photo = await bot.get_file(photo_id)
    print(type(file_photo))
    file_name, file_extension = os.path.splitext(file_photo.file_path)
    print(type(file_name), type(file_extension))
    download_file_photo = await bot.download_file(file_photo.file_path)
    print(type(download_file_photo))
    src = 'photo/' + photo_id + file_extension
    with open(src, 'wb') as new_file:
        new_file.write(download_file_photo)


async def main():
    await dp.start_polling(bot)
asyncio.run(main())
У аиограмма для этого есть все что нужно
FSInputFile
Например так:

Код:
from aiogram.types import FSInputFile

file = FSInputFile("data/file.png")
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD