как мне заставить моего бота Discord добавить кого-то в файл json, если его еще нет - PullRequest
0 голосов
/ 18 июня 2020

Я делаю экономичного бота на Discord, он будет хранить деньги пользователей в файле json. Но я не знаю, как заставить его добавить еще одного пользователя в файл json, если его там еще нет.

async def work(ctx):
    oldmny=json.load(open("money.json", "r"))[str(ctx.author.id)]
    newmny=random.randint(10,100)
    nowmny=oldmny+newmny
    x={
        str(ctx.author.id):nowmny
}
    json.dump(x, open("money.json", "w+"), indent = 4)```

1 Ответ

0 голосов
/ 18 июня 2020

В вашем коде вы назначаете x совершенно новый словарь с одной парой ключ / значение. Затем вы записываете этот словарь в тот же файл JSON, который читаете. Вместо этого вам следует обновить словарь, который вы загрузили из файла JSON, и записать обновленный словарь обратно в файл. Ваш код должен быть:

async def work(ctx):
    money = json.load(open("money.json", "r"))
    oldmny = [str(ctx.author.id)]
    newmny = random.randint(10,100)
    nowmny = oldmny + newmny
    money[ctx.author.id] = nowmny
    json.dump(money, open("money.json", "w+"), indent = 4)

Обратите внимание, однако, что вы используете JSON в качестве хранилища данных, и любое обновление, даже одного элемента (как в вашем случае), потребует полного чтение и полная запись всего файла. Это не совсем то, для чего нужны файлы JSON. Они больше подходят для отправки данных между процессами или для записи нечасто загружаемых и, что еще реже, обновляемых данных.

...