Вроде бы всё правильно написано, но не меняется баннер в дискорде и выдаёт ошибку

Рейтинг: 0Ответов: 1Опубликовано: 30.01.2023
from disnake.ext import commands
from PIL import Image, ImageDraw
import time
import disnake
import config
 

import os

bot = commands.Bot(command_prefix = config.prefix  ,help_command=None, intents = disnake.Intents.all())

@bot.event
async def on_ready():
    print("bot conekted")

@bot.command()
async def main( ctx: commands.Context) -> None:

    while True:
        
        im = Image.open('baner1.png')
        braw_text = ImageDraw.Draw(im)
        braw_text.text((200, 100), f'{ctx.guild.member_count}')

        imege = im

        await ctx.guild.edit(banner=imege)

        time.sleep(45)

    

bot.run(config.token)

это ошибка

Ignoring exception in command main:
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\ext\commands\core.py", line 173, in wrapped
    ret = await coro(*args, **kwargs)     
  File "c:\Users\Admin\Desktop\statistiks\main.py", line 27, in main
    await ctx.guild.edit(banner=imege)    
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\guild.py", line 1954, in edit        
    fields["banner"] = await utils._assetbytes_to_base64_data(banner)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\utils.py", line 564, in _assetbytes_to_base64_data
    data = await data.read()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\PIL\Image.py", line 529, in __getattr__      
    raise AttributeError(name)
AttributeError: read

The above exception was the direct cause of the following exception:

Traceback (most recent call last):        
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\ext\commands\bot_base.py", line 591, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\ext\commands\core.py", line 914, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\disnake\ext\commands\core.py", line 182, in wrapped
    raise CommandInvokeError(exc) from exc
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: read

Ответы

▲ 1Принят

Эта ошибка возникает, потому что в модуле disnake функция "edit" ожидает, что объект "banner" будет байтовым представлением изображения, а не объектом Image. Для того, чтобы исправить это, вам нужно преобразовать объект Image в байты следующим образом:

im.save('banner1.png')
with open('banner1.png', 'rb') as f:
    banner = f.read()
await ctx.guild.edit(banner=banner)