Получение сообщения об ошибке «_io.BufferedReader» объект не имеет атрибута «setswith» при загрузке локального изображения на аватар webhook - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь использовать локальное изображение в качестве аватара webhook в качестве webhook, webhooks не допускают ссылки на изображения в качестве аватара, но использование локального изображения выдает ошибку: '_io.BufferedReader' object has no attribute 'startswith', ниже приведен мой скрипт

Поскольку использование ссылки в качестве аватара недопустимо (я думаю, что это потому, что когда я использую ссылку на изображение, я получаю сообщение об ошибке: TypeError: начинается с первого аргумента должен быть str или кортеж str, а не байтов), я пыталсяиспользовать локальный файл, используя with open, но я просто получаю больше ошибок!

@bot.command()
async def whook(ctx):
    with open("image.png", 'rb') as pfp:
        await ctx.channel.create_webhook(name="Mr.W.hook",avatar=pfp)
        await ctx.send("Done")

1 Ответ

0 голосов
/ 13 апреля 2019

Вам необходимо передать данные изображения аватара как объект bytes, а не как объект файла, содержащий данные. Исключение вызвано тем, что код create_webhook() пытается использовать метод bytes.startswith() для объекта pfp, который вы передали, и файловые объекты не имеют этого метода.

Вместо самого pfp передайте результат pfp.read(). Это возвращает данные изображения в виде bytes значения:

with open("image.png", 'rb') as pfp:
    await ctx.channel.create_webhook(name="Mr.W.hook", avatar=pfp.read())
    await ctx.send("Done")

Из discord.TextChannel.create_webhook() документации :

avatar (Optional[bytes]) - Байтоподобный объект, представляющий аватар по умолчанию для веб-крючка.

...