CREATE TABLE IF NOT EXISTS shop(
id BIGINT PRIMARY KEY,
idx INT UNIQUE,
cost BIGINT
)
async def buy(ctx, index: int):
....
data = cursor.execute("SELECT cost FROM shop WHERE idx = ?", (index, )).fetchall()
# ну и далее по тексту
!buy qqq
должно сработать.async def buy(ctx, role: typing.Union[discord.Role, int, None] = None):
if role is None:
# роль не указана
elif isinstance(role, int):
# роль по индексу
else:
# роль - это discord.Role, смотрим по role.id
async def buy(ctx, *, role: str):
role = role.strip()
if not role:
# роль не указана
return
try:
role_number = int(role)
except ValueError:
# ищем роль в списке ролей гильдии по имени
else:
# роль по индексу
# обрати внимание, вот как правильно вставлять параметры в запрос
data = cursor.execute("SELECT cost FROM shop WHERE id = ?", (role.id, )).fetchall()
if not data:
#сообщаем что такая роль не продаётся
return
cost = data[0][0] #роль есть, вот её цена
if role in ctx.member.roles:
# сообщаем, что роль уже есть
return
# обрати внимание, вот как правильно вставлять параметры в запрос
data = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.member.id, )).fetchall()
if not data:
#сообщаем что такого пользователя нет
return
cash = data[0][0] #пользователь есть, вот его деньги
if cost > cash:
# сообщаем, что денег мало
return
# обрати внимание, вот как правильно вставлять параметры в запрос
cursor.execute("UPDATE users SET cash = cash - ? WHERE id = ?", (cost, ctx.member.id))
# и выдаём роль
CREATE TABLE IF NOT EXISTS users(
name TEXT,
id BIGINT PRIMARY KEY,
cash BIGINT,
rep INT,
lvl INT
)
CREATE TABLE IF NOT EXISTS shop(
id BIGINT PRIMARY KEY,
cost BIGINT
)
CREATE TABLE Users (
id INT PRIMARY KEY,
cash FLOAT NOT NULL);
CREATE TABLE Shop (
role_id INT PRIMARY KEY,
price FLOAT NOT NULL);
CREATE TABLE Purchases(
user INT NOT NULL,
role INT NOT NULL,
FOREIGN KEY (user) REFERENCES (Users.id),
FOREIGN KEY (role) REFERENCES (Roles.id),
PRIMARY KEY (user, role)
);