cursor.execute("""CREATE TABLE IF NOT EXISTS shop(
role_id INT, #Айди роли
id INT, #Айди сервера
cost BIGINT #Стоимость
)""")
cursor.execute("""CREATE TABLE IF NOT EXISTS inv(
id INT, #Айди пользователя
roles INT, #Купленные роли из магазина
idx INT #Порядковый ID
)""")
#Команда магазина
@bot.command()
async def shop(ctx):
role1=discord.utils.get(ctx.guild.roles, id=966041637618847794)
role2=discord.utils.get(ctx.guild.roles, id=966046291740217384)
emb=discord.Embed(title="Магазин ролей",colour=discord.Color.from_rgb(255, 255, 255))
counter=0
if ctx.channel.id==955186277270048808:
for row in cursor.execute("SELECT role_id, cost FROM shop WHERE id = {}".format(ctx.guild.id)):
if ctx.guild.get_role(row[0]) != None:
counter+=1
emb.add_field(
name=f"{counter}. Стоимость - {row[1]} <:servvalute:967795640425930822>",
value=f"Роль {ctx.guild.get_role(row[0]).mention}",
inline=False
)
else:
pass
await ctx.send(embed=emb, components=[
Select( #Под магазином имеется SelectMenu, через который и производится покупка той или иной роли.
placeholder="Выберите роль.",
options=[
SelectOption(label=f"{role1}", value="rle1"),
SelectOption(label=f"{role2}", value="rle2")
],
min_values=1,
max_values=1
)
])
interaction=await bot.wait_for("select_option")
idx:int=None
if interaction.values[0] == "rle1": #Покупка роли1
rle=cursor.execute("SELECT roles FROM inv WHERE id = {} and roles = {}".format(ctx.author.id, role1.id)).fetchone()
if cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role1.id)
).fetchone()[0] > cursor.execute("SELECT cash FROM users WHERE id = {}".format(interaction.author.id)
).fetchone()[0]:
await interaction.send(embed=discord.Embed(title="<:nonn:965626108387164221> | Недостаточно средств для покупки."))
elif rle is not None:
await interaction.send(embed=discord.Embed(title="<:nonn:965626108387164221> | У вас уже имеется такая роль."))
else:
idx=cursor.execute("SELECT idx FROM inv WHERE id = {}".format(interaction.author.id))
if idx == '1': #Если индекс 1 уже существует, то:
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(
cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role1.id)).
fetchone()[0], ctx.author.id))
cursor.execute(f"INSERT INTO inv VALUES ({interaction.author.id}, {role1.id}, '2')").fetchall()
await interaction.send(embed=discord.Embed(title="<a:Yes1:965581422121353216> | Вы приобрели роль!",
color=discord.Color.from_rgb(65, 232, 162)))
connection.commit()
else: #Если данные не найдены вовсе:
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(
cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role1.id)).
fetchone()[0], ctx.author.id))
cursor.execute(f"INSERT INTO inv VALUES ({interaction.author.id}, {role1.id}, '1')").fetchall()
await interaction.send(embed=discord.Embed(title="<a:Yes1:965581422121353216> | Вы приобрели роль!",
color=discord.Color.from_rgb(65, 232, 162)))
connection.commit()
elif interaction.values[0] == "rle2": #Покупка роли2
rle=cursor.execute("SELECT roles FROM inv WHERE id = {} and roles = {}".format(ctx.author.id, role2.id)).fetchone()
if cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role2.id)
).fetchone()[0] > cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)
).fetchone()[0]:
await interaction.send(embed=discord.Embed(title="<:nonn:965626108387164221> | Недостаточно средств для покупки."))
elif rle is not None:
await interaction.send(embed=discord.Embed(title="<:nonn:965626108387164221> | У вас уже имеется такая роль."))
else:
idx=cursor.execute("SELECT idx FROM inv WHERE id = {}".format(interaction.author.id))
if idx == '1': #Если индекс 1 уже существует, то:
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(
cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role2.id)).
fetchone()[0], ctx.author.id))
cursor.execute(f"INSERT INTO inv VALUES ({interaction.author.id}, {role2.id}, '2')").fetchall()
await interaction.send(embed=discord.Embed(title="<a:Yes1:965581422121353216> | Вы приобрели роль!",
color=discord.Color.from_rgb(65, 232, 162)))
connection.commit()
else: #Если данные не найдены вовсе:
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(
cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role2.id)).
fetchone()[0], ctx.author.id))
cursor.execute(f"INSERT INTO inv VALUES ({interaction.author.id}, {role2.id}, '1')").fetchall()
await interaction.send(embed=discord.Embed(title="<a:Yes1:965581422121353216> | Вы приобрели роль!",
color=discord.Color.from_rgb(65, 232, 162)))
connection.commit()
#Инвентарь
@bot.command(aliases=['inv'])
async def inventory(ctx):
role1=discord.utils.get(ctx.guild.roles, id=966041637618847794)
role2=discord.utils.get(ctx.guild.roles, id=966046291740217384)
br=discord.utils.get(ctx.guild.roles, id=969228629676535878)
emb=discord.Embed(timestamp=ctx.message.created_at, colour=discord.Color.from_rgb(255, 255, 255))
counter=0
if ctx.channel.id==955186277270048808:
for row in cursor.execute("SELECT roles FROM inv WHERE id = {}".format(ctx.author.id)):
if ctx.guild.get_role(row[0]) != None:
emb.set_author(name=f"{ctx.author.name} ✧ Инвентарь",
icon_url=ctx.author.avatar_url)
counter+=1
emb.add_field(name=f"{counter}. Роль",
value=f"{ctx.guild.get_role(row[0]).mention}",
inline=False)
else:
pass
await ctx.reply(embed=emb, mention_author=False)
#Equip (написан очень глупо, но до того, как его редактировать, хотя бы разобраться с порядковым ID)
@bot.command(aliases=['eq'])
async def equip(ctx, unit=None):
role1=discord.utils.get(ctx.guild.roles, id=966041637618847794)
role2=discord.utils.get(ctx.guild.roles, id=966046291740217384)
for row in cursor.execute("SELECT roles, idx FROM inv WHERE id = {}".format(ctx.author.id)).fetchall():
if unit == "1":
role=cursor.execute("SELECT roles FROM inv WHERE idx = {}".format(1))
if role not in ctx.author.roles:
await ctx.author.add_roles(role)
await ctx.reply(embed=discord.Embed(timestamp=ctx.message.created_at,
description="<a:Yes1:965581422121353216> Роль успешно надета.",
colour=discord.Color.from_rgb(255, 255, 255)
).set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url),
mention_author=False, delete_after=5)
await asyncio.sleep(5)
await ctx.message.delete()
else:
await ctx.reply(embed=discord.Embed(timestamp=ctx.message.created_at,
description="<:nonn:965626108387164221> Роль уже надета."
).set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url),
mention_author=False, delete_after=5)
await asyncio.sleep(5)
await ctx.message.delete()
elif unit == "2":
role=ctx.guild.get_role(row[0])
if role not in ctx.author.roles:
await ctx.author.add_roles(role)
await ctx.reply(embed=discord.Embed(timestamp=ctx.message.created_at,
description="<a:Yes1:965581422121353216> Роль успешно надета.",
colour=discord.Color.from_rgb(255, 255, 255)
).set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url),
mention_author=False, delete_after=5)
await asyncio.sleep(5)
await ctx.message.delete()
else:
await ctx.reply(embed=discord.Embed(timestamp=ctx.message.created_at,
description="<:nonn:965626108387164221> Роль уже надета."
).set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url),
mention_author=False, delete_after=5)
await asyncio.sleep(5)
await ctx.message.delete()