Discord.py не записывает данные в json файлы

@bot.event
async def on_message(message):
    with open('users.json', 'r') as f:
        users = json.load(f)

    await update_data(users, message.author)
    await add_exp(users, message.author, 5)
    await lvl_up(users, message.author, message.channel)

    with open('users.json', 'w') as f:
        json.dump(users, f)

async def update_data(users, user):
    if not user.id in users:
        users[user.id] = {}
        users[user.id]['exp'] = 0
        users[user.id]['lvl'] = 1


async def add_exp(users, user, exp):
    users[user.id]['exp'] += exp

async def lvl_up(users, user, channel):
    exp = users[user.id]['exp']
    lvl_start = users[user.id]['lvl']
    lvl_end = int(exp ** (1/4))

    if lvl_start < lvl_end:
        await ctx.send(f"{user} Повысил свой уровень до {lvl_end}")
        users[user.id]['lvl'] = lvl_end


    await bot.process_commands(message)

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

P.S. у меня есть ещё 1 код который тоже не работает. Желательно разобраться со 2-м кодом.

@bot.event
async def on_message(message):
    with open('users.json', 'r') as f:
        users = json.load(f)

    async def update_data(users,user):
        if not user in users:
            users[user] = {}
            users[user]['exp'] = 0
            users[user]['lvl'] = 1

    async def add_exp(users,user,exp):
        users[user]['exp'] += exp

    async def add_lvl(users,user):
        exp = users[user]['exp']
        lvl = users[user]['lvl']
        if exp > lvl:
            lvl = lvl + 1
            exp = 0
            await message.channel.send(f'{message.author.mention} повысил свой уровень!')
            users[user]['exp'] = 0
            users[user]['lvl'] = lvl + 1


    await update_data(users, str(message.author.id))
    await add_exp(users,str(message.author.id), 1.04)
    await add_lvl(users,str(message.author.id))


    with open('users.json', 'w') as f:
        json.dump(users,f)

    await bot.process_commands(message)

P.S. в файле users.json написано только: {}


Ответы (1 шт):

Автор решения: Smart Beetle

Я предполагаю, что у вас проблема с функциями. В функциях переданные вами параметры локальны, а это значит, что все изменения происходящие с этими переменными не будут влиять на глобальные переменные в программе. Из-за этого ваш список остается пустой и в итоге никаких изменений в файле нет. Советую сделать так:

async def update_data():
    global users, user

И с остальными функциями также

→ Ссылка