I got working code:
async def update_data(users, user):
if not f'{user.id}' in users:
users[f'{user.id}'] = {}
users[f'{user.id}']['warns'] = 0
async def add_warns(users, user, warns):
users[f'{user.id}']['warns'] += warns
@client.command()
async def warn(ctx, user: discord.Member):
with open('warns.json', 'r') as f:
users = json.load(f)
await update_data(users, user)
await add_warns(users, user, 1)
with open('warns.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
await ctx.send(f'Warned {user}')
that code should work (Import json) and it will sorts the .json file.
Edit 1:
I Made a unwarn code and it works like a charm (It deletes the user id and the warns so it saves more space than just leaving it 0)
@client.command()
async def remove_warn(ctx, user: discord.Member, amount: int=None):
with open('warns.json', 'r') as f:
users = json.load(f)
amount = amount or 1
await update_data(users, user)
await add_warns(users, user, -amount)
if users[f'{user.id}']['warns'] <= 0:
with open('warns.json', 'w') as f:
del users[f'{user.id}']['warns']
del users[f'{user.id}']
f.write(json.dumps(users, indent=4))
return
else:
with open('warns.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
await ctx.send(f'Removed {amount} warn for {user}')
return
edit 2:
Made a working warn checker.
@client.command()
async def warns(ctx, user: discord.Member=None):
user = user or ctx.author
try:
with open('warns.json', 'r') as f:
users = json.load(f)
warns = users[f'{user.id}']['warns']
await ctx.send(f'{user} has {warns} warnings')
except:
await ctx.send(f"{user} doesn't have any warnings.")