Создание персональной роли при покупке

qq all! Я хочу реализовать покупку персональной роли за внутрисерверную валюту, которую в дальнейшем покупатель может изменить как хочет (цвет и название), но не знаю как реализовать ее привязывание к конкретному пользователю (нужно чтобы каждый, кто купил мог изменять свою роль, а не чужую).

Вот код, который я имею в данный момент.

@client.command(aliases= ['купить'])
async def __buy(ctx, product_number: int = None, member: discord.Member = None):
balance = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]
customrole_successful_buy = discord.Embed(description =f"Вы успешно купили товар под номером 2 — <@&881981146588676166>. Чтобы кастомизировать свою роль — используйте команду .кастомизировать", timestamp=ctx.message.created_at)
customrole_successful_buy.colour = discord.Colour.from_rgb(r=52, g=203, b=35)
customrole_successful_buy.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
timesup = discord.Embed(description =f"@{ctx.author.name}, ваша кастомная роль истекла.", timestamp=ctx.message.created_at)
timesup.colour = discord.Colour.red()
timesup.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
if product_number is None:
    await ctx.send(embed = error)
else:
    if product_number == 2:
        if balance < 99:
            await ctx.send(embed = money)
        else:
            rolecreate = await ctx.guild.create_role(name="custom role")
            await ctx.author.add_roles(rolecreate)
            cursor.execute("UPDATE users SET cash = cash - 99 WHERE id = {}".format(ctx.author.id))
            connection.commit()
            await ctx.send(embed = customrole_successful_buy)

            await asyncio.sleep(32400)
            await ctx.author.remove_roles(rolecreate)
            await ctx.send(embed = timesup)

@client.command(aliases= ['кастом', 'кастомизировать'])
async def __custom(ctx, name, color, member: discord.Member = None): 
тут должна быть проверка на существование роли у пользователя, но ее пока нет, потому что я не знаю как сделать привязку купленной роли к пользователю

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

Автор решения: younghummerson

Рабочая версия, которая мне нужна была.

@client.command(aliases= ['купить'])
async def __buy(ctx, product_number: int = None, member: discord.Member = None):
balance = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]
    if product_number == 2:
        if balance < 99:
            await ctx.send(embed = money)
        else:
            rolecreate = await ctx.guild.create_role(name="custom role")
            await ctx.author.add_roles(rolecreate)
            cursor.execute("UPDATE users SET cash = cash - 99 WHERE id = {}".format(ctx.author.id))
            cursor.execute("INSERT INTO roles VALUES ({}, {})".format(ctx.author.id, rolecreate.id))
            connection.commit()
            await ctx.send(embed = customrole_successful_buy)

            await asyncio.sleep(10)
            if balance < 99:
                await ctx.author.remove_roles(rolecreate)
                await ctx.send(embed = timesup)
            else:
                cursor.execute("UPDATE users SET cash = cash - 99 WHERE id = {}".format(ctx.author.id))

@client.command(aliases= ['кастом', 'кастомизировать'])
async def __custom(ctx, name, color, member: discord.Member = None):
role_doesnt_exist = discord.Embed(description =f"У вас нет кастомной роли. Чтобы купить ее - используйте команду .купить 2 ", timestamp=ctx.message.created_at)
role_doesnt_exist.colour = discord.Colour.from_rgb(r=52, g=203, b=35)
role_doesnt_exist.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
roleexist = cursor.execute("SELECT roleid FROM roles WHERE id = {}".format(ctx.author.id)).fetchone()[0]
if roleexist == None:
    await ctx.send(embed = role_doesnt_exist)
else:
    roletake = discord.utils.get(ctx.guild.roles, id = (roleexist))
    await roletake.edit(colour=discord.Colour(int(color, 16)), name=name)
    roleid = roletake.id
    role_successful_changed = discord.Embed(description = f"Вы успешно изменили свою роль на <@&{roleid}>", timestamp=ctx.message.created_at)
    role_successful_changed.colour = discord.Colour.from_rgb(r=52, g=203, b=35)
    role_successful_changed.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
    await ctx.send(embed = role_successful_changed)
→ Ссылка