python, disnake - Как отправить картинку по url?
Делаю Дискорд-бота с помощью библиотеки disnake. Не понимаю, как отправить изображение, имея только его URL, при этом не используя стиль Embed?
Также вылезает эта ошибка:
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: expected str, bytes or os.PathLike object, not list. Гуглил и не понял. Помогите исправить.
@bot.slash_command(name='pictures', description='Поиск картинок в Интернете.')
async def pictures(inter, request : str, count=3):
parser = YandexImage()
pictures = []
for url in parser.search(request):
cicles = 0
pictures.append(url.url)
cicles += 1
if cicles == count:
break
await inter.send(f'Результат по вашему запросу: {request}', file=disnake.File([pictures]))
Если что библиотека YandexImage просто парсит картинки по HTTP-запросу из Яндекса и заносит их URL в список pictures.
Ответы (2 шт):
Чтобы отправить изображение по URL, можно воспользоваться методом await inter.send(file=...) и передать ему объект типа io.BytesIO, полученный с помощью requests:
@bot.slash_command(name='pictures', description='Поиск картинок в Интернете.')
async def pictures(inter, request: str, count=3):
parser = YandexImage()
pictures = []
cicles = 0
for url in parser.search(request):
pictures.append(url.url)
cicles += 1
if cicles == count:
break
for picture_url in pictures:
response = requests.get(picture_url)
image_bytes = io.BytesIO(response.content)
await inter.send(file=disnake.File(image_bytes, filename='image.png')))
Если вы хотите использовать картинку в ембеде и не скачивать её, используйте эту функцию
embed.set_image(url="https://disnake.dev/assets/disnake-banner-thin.png")