Почему выдает ошибку RuntimeError?
Разрабатываю бота для 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)
Пробовал вводить команду через префикс - аналогично. Что в таком случае делать?
Источник: Stack Overflow на русском