So I'm making a command that is !command When you type that in a chat it will update the member(s) score in the database. The database will look something like this

{ "person": "epikUbuntu" "score": "22" } 

How would I go on doing that?

edit: If I wasn't clear I meant ho would I go on doing the python part of it?

1 Answer

JSON objects in python work like dictionaries.

You can write a new dictionary and save it:

data = {"foo": "bar"} with open("file.json", "w+") as fp: json.dump(data, fp, sort_keys=True, indent=4) # kwargs for beautification 

And you can load data from a file (this will be for updating the file):

with open("file.json", "r") as fp: data = json.load(fp) # loading json contents into data variable - this will be a dict data["foo"] = "baz" # updating values data["bar"] = "foo" # writing new values with open("file.json", "w+") as fp: json.dump(data, fp, sort_keys=True, indent=4) 

Discord.py example:

import os # for checking the file exists def add_score(member: discord.Member, amount: int): if os.path.isfile("file.json"): with open("file.json", "r") as fp: data = json.load(fp) try: data[f"{member.id}"]["score"] += amount except KeyError: # if the user isn't in the file, do the following data[f"{member.id}"] = {"score": amount} # add other things you want to store else: data = {f"{member.id}": {"score": amount}} # saving the file outside of the if statements saves us having to write it twice with open("file.json", "w+") as fp: json.dump(data, fp, sort_keys=True, indent=4) # kwargs for beautification # you can also return the new/updated score here if you want def get_score(member: discord.Member): with open("file.json", "r") as fp: data = json.load(fp) return data[f"{member.id}"]["score"] @bot.command() async def cmd(ctx): # some code here add_score(ctx.author, 10) # 10 is just an example # you can use the random module if you want - random.randint(x, y) await ctx.send(f"You now have {get_score(ctx.author)} score!") 

References:

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy