Создание персональной роли при покупке
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)