Не понимаю как реализовать проверку на нахождение ID в файле JSON
Имеется вот такой код:
import disnake
from disnake.ext import commands
import ujson
def load_database():
with open('DB.json', 'r') as file:
return ujson.load(file)
def save_database(data):
with open('DB.json', 'w') as file:
ujson.dump(data, file, indent=4, escape_forward_slashes=False)
@bot.slash_command(name="register", description="Регистрирует участника для использования игр")
async def register(inter: disnake.AppCmdInter):
username = str(inter.author.name)
userID = str(inter.author.id)
data = load_database()
for player in range(len(data["players"])):
if userID != data["players"][player]["id"]:
data["players"].append({"id": userID, "name": username, "balance": 1000})
save_database(data)
await inter.send("Вы успешно зарегистрированы!", ephemeral=True)
else:
await inter.send("Вы были зарегестрированы ранее!", ephemeral=True)
И база данных в виде файла JSON:
{
"players": [
{
"id": "1234567890",
"name": "ivan",
"balance": 1000
},
{
"id": "0987654321",
"name": "vasya",
"balance": 500
}
]
}
При вводе команды бот пишет: Вы были зарегестрированы ранее! и сразу после Вы успешно зарегистрированы!
Как можно реализовать систему проверки на нахождение в базе данных?
P.s: сижу уже несколько часов и до сих пор не вдупляю =(
Ответы (1 шт):
Автор решения: Dan Sazonov
→ Ссылка
Если следовать логике: вы проходите циклом по всем игрокам в базе данных, и при проверке ваш бот отправляет сообщение для каждого пользователя из бд, а не только для текущего. Попробуйте это:
...
ids = [data["players"][player]["id"] for player in range(len(data["players"]))]
if userID in ids:
await inter.send("Вы были зарегестрированы ранее!", ephemeral=True)
else:
data["players"].append({"id": userID, "name": username, "balance": 1000})
save_database(data)
await inter.send("Вы успешно зарегистрированы!", ephemeral=True)
UPD: прошу прощения, предыдущая версия кода все еще не решала проблему. Обновил и проверил, сейчас все должно быть в порядке