Задача кода: При использовании команды бот берёт фотографию пользователя и накладывает на мою картинку и отправляет обратно

@bot.command()
async def wanted(ctx, user: discord.Member = None):
    if user == None:
        user = ctx.author
    
    wanted = Image.open('mi_image.png')
    avatar = user.avatar(size = 128)
    avt = BytesIO(await avatar.read())
    img = Image.open(avt)
    img = img.resize((310, 310))

    wanted.paste(img, (400, 260))
    wanted.save("image.jpg")
    await ctx.send(file = discord.File("image.jpg"))

выходит такая ошибка: Command raised an exception: TypeError: 'Asset' object is not callable


Ответы (1 шт):

Автор решения: eminsk
@bot.command()
async def wanted(ctx, user: discord.Member = None):
    if user is None:
        user = ctx.author

    wanted = Image.open('mi_image.png')
    avatar = user.display_avatar  # или user.avatar, если ты уверен что он есть
    avatar = avatar.with_size(128)  # НЕ avatar(128)!
    avt_bytes = BytesIO(await avatar.read())
    img = Image.open(avt_bytes)
    img = img.resize((310, 310))
    wanted.paste(img, (400, 260))
    wanted.save("image.jpg")
    await ctx.send(file=discord.File("image.jpg"))

Ошибка говорит прямо на проблему: TypeError: 'Asset' object is not callable Это значит, что вот эта строка:

avatar = user.avatar(size = 128)

пытается вызвать объект Asset как функцию. В новых версиях discord.py user.avatar — это не функция, а свойство-объект (Asset), у которого есть методы, например .read(), .with_size(), но его нельзя писать как user.avatar(...).

→ Ссылка