Я нашел вашу проблему. Так что в основном ваш users
словарь имеет целые числа в качестве ключей. Проблема в том, что JSON не поддерживает целочисленные ключи , поэтому при использовании json.dump
все ваши целочисленные ключи преобразуются в строки. Очевидно, что целочисленный ключ не совпадает со строковым ключом, поэтому вы всегда перезаписываете данные своего пользователя, как если бы они были новым пользователем.
Это решается созданием новой функции, которая после json.load
, снова делает все ключи целыми числами:
def int_keys(users):
new_users = {}
for key, value in users.items():
new_users[int(key)] = value
return new_users
@client.event
async def on_message(message):
print(message)
with open('users.json', 'r') as f:
users = json.load(f)
users = int_keys(users)
await update_data(users, message.author)
await add_experience(users, message.author, 10)
await level_up(users, message.author, message.channel)
with open('users.json', 'w') as f:
json.dump(users, f)
Кроме того, я бы действительно рекомендовал использовать перезапись discord.py, если вы можете. Это упрощает многие вещи.
Редактирование: также добавьте его в скрипт member_join:
@client.event
async def on_member_join(member):
with open('users.json', 'r') as f:
users = json.load(f)
users = int_keys(users)
await update_data(users, member)
with open('users.json', 'w') as f:
json.dump(users, f)