@Gumballson

Когда я пишу .casino 18 когда мой баланс 17 мне он не пишет что недостаточно средств. Как исправить и в консоль ошибку не дает?

@client.command(aliases = ['casino','777','казино'])
async def __casino(ctx, amount = None):
	if amount is None:
		await ctx.send(f'Укажите кол-во {gem} которое хотите поставить')
	else:
		if amount < 10:
			await ctx.send(f'Минимальная ставка 10{gem}')
		else:
			if amount > 50:
				await ctx.send(f'Максимальная ставка 50{gem}')
			else:
				if cursor.execute("SELECT gems from users where id = {}".format(ctx.author.id)).fetchone() < {amount}:
					await ctx.send(f"**{ctx.author}**, у вас недостаточно {gem} для ставки")
				else:
					randomka = (random.randint(1,100))
					cursor.execute("UPDATE users set gems = gems - {} where id = {}".format(amount, ctx.author.id))
					if randomka > 60:
						cursor.execute("UPDATE users set gems = gems + 2 * {} where id = {}".format(amount, ctx.author.id))
						await ctx.send(f"Вы выиграли {2 * {amount}}")
					else:
						await ctx.send(f'Вы проиграли')
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Возможно причина в незафиксированный транзакции.
У вас есть такой код cursor.execute("UPDATE users
По идее после любого update нужно вызывать connection.commit() - фиксировать транзакцию.
Если этого не делать то баланс игрока не будет меняться при выигрышах и поражениях
Ну и из-за этого проверка на выход за пределы лимита не срабатывает потому что выхода за пределы по факту нет.

Ну и код проверки баланса странный, coursor.execute("select возвращает кортеж или None, а вы сравниваете его с set судя по коду.

Лучше переписать запрос и передать параметры не через форматирование строки, чтобы если что не ловить sql инъекции.

Попробуйте строку:
if cursor.execute("SELECT gems from users where id = {}".format(ctx.author.id)).fetchone() < {amount}:
Переписать так:
if not cursor.execute("SELECT 1 FROM users WHERE id = ? AND gems >= ?), (ctx.author.id, amount)).fetchone():
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы