Почему выдает ошибку RuntimeError?

Рейтинг: 0Ответов: 1Опубликовано: 06.05.2023

Разрабатываю бота для Discord. Создал команду для вывода рейтинга участника, ввожу в первый раз - всё работает, но при повторном вводе данной команды в консоли выдается ошибка в строчке profile_picture = await load_image_async(str(member.avatar)):

RuntimeError: cannot reuse already awaited coroutine

Функция load_image_async импортируется из библиотеки easy-pil для работы с изображениями

Код:

from easy-pil import *

@bot.slash_command(name = "rank", description = "Показывает рейтинг упомянутого пользователя")
async def rank(ctx, member: discord.Member = None):
    if member == None:
        member = ctx.author
    async with bot.db.cursor() as cursor:
        await cursor.execute("SELECT level FROM levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        level = await cursor.fetchone()
        await cursor.execute("SELECT xp FROM levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        xp = await cursor.fetchone()

        if not level or not xp:
            await cursor.execute("INSERT INTO levels (level, xp, user, guild) VALUES (?, ?, ?, ?)", (0, 0, member.id, ctx.guild.id,))
        
        try:
            xp = xp[0]
            level = level[0]
        except TypeError:
            xp = 0
            level = 0

    user_data = {
        "name": f"{member.name}#{member.discriminator}",
        "xp": xp,
        "level": level,
        "next_level_xp": 100,
        "percentage": xp,
    }

    background = Editor(Canvas((900,300), color = "#141414"))
    profile_picture = await load_image_async(str(member.avatar))
    profile = Editor(profile_picture).resize((150, 150)).circle_image()

    poppins = Font.poppins(size=40)
    small_poppins = Font.poppins(size=30)

    card_right_shape = [(600,0), (900,300), (900,0)]
    background.polygon(card_right_shape, color = "#FFFFFF")
    background.paste(profile, (30,30))
    background.rectangle((30,220), width=650, height=40, color="#FFFFFF", radius=20)
    background.bar((30,220), max_width=650, height=40, percentage=user_data['percentage'], color="#282828", radius=20,)

    background.text((200,40), user_data['name'], font=poppins, color="#FFFFFF")
    background.rectangle((200,100), width=350, height=2, fill="#FFFFFF")
    background.text(
        (200,130),
        f"Level: {user_data['level']}  |  XP: {user_data['xp']}/{user_data['next_level_xp']}",
        font=small_poppins,
        color = "#FFFFFF",
    )
    file = discord.File(fp = background.image_bytes, filename="rank.png")
    await ctx.respond(file=file)

Пробовал вводить команду через префикс - аналогично. Что в таком случае делать?

Ответы

▲ 0

Решение данной проблемы: измените profile_picture = await load_image_async(str(member.avatar)) на profile_picture = load_image(str(member.avatar))