import json import string import logging logging.basicConfig(filename="gwendolyn.log", level=logging.INFO) def getName(user : str): with open("resources/swcharacters.json", "r") as f: data = json.load(f) if user in data: return data[user]["Name"] else: return user def setUpDict(cmd : dict): if bool(dict): keys = list(cmd) values = list(cmd.values()) result = "" if type(values[0]) is dict: return ", ".join(values) else: for x in range(len(keys)): if x%3 != 2: result += "**" + keys[x] + "**" + ": " + str(values[x]) + " " else: result += "**" + keys[x] + "**" + ": " + str(values[x]) + "\n" return result else: return "There doesn't seem to be anything here..." def lookUp(data : dict, key : str, cmd : str = ""): if cmd == " ": cmd = "" elif cmd != "": while cmd[0] == " ": cmd = cmd[1:] if cmd == "": break if key in data: if cmd == "": if type(data[key]) is dict: return setUpDict(data[key]) else: return data[key] elif cmd[0] == '+': try: cmd = cmd[1:] while cmd[0] == ' ': cmd = cmd[1:] except: return "Can't do that" if type(data[key]) is int: try: newValue = data[key] + int(cmd) data[key] = newValue return data except: return "Can't add that" else: return "Can't add that" else: while cmd[0] == ' ': cmd = cmd[1:] try: cmd = type(data[key])(cmd) data[key] = cmd return data except: return "Wrong data type" else: return key + " doesn't exist" def characterSheet(character : dict): divider = "\n----------\n" name = character["Name"] text1 = "Species: "+character["Species"]+"\nCareer: "+character["Career"] text2 = setUpDict(character["Characteristics"]) text3 = setUpDict(character["Skills"]) return name, text1+"\n\n"+text2+divider+text3 def charData(user : str,cmd : str): with open("resources/swcharacters.json", "r") as f: data = json.load(f) key = string.capwords(cmd.split(" ")[0]) cmd = cmd[len(key):] if cmd == " ": cmd = "" elif cmd != "": while cmd[0] == " ": cmd = cmd[1:] if cmd == "": break if user in data: if key in data[user]: if type(data[user][key]) is dict: if cmd == "": return setUpDict(data[user][key]) else: newKey = string.capwords(cmd.split(" ")[0]) newcmd = cmd[len(newKey):] lookUpResult = lookUp(data[user][key],newKey,newcmd) if type(lookUpResult) is dict: data[user][key] = lookUpResult with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) return "Changed " + data[user]["Name"] + "'s " + key else: return lookUpResult else: if cmd == "": return data[user][key] elif cmd[0] == '+': try: cmd = cmd[1:] while cmd[0] == ' ': cmd = cmd[1:] except: return "Can't do that" if type(data[user][key]) is int: try: data[user][key] += int(cmd) return "Added " + cmd + " to " + user + "'s " + key except: return "Can't add that" else: return "Can't add that" else: data[user][key] = cmd with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) return "Changed " + data[user]["Name"] + "'s " + key +" to " + cmd else: return "Couldn't find that data. Are you sure you spelled it correctly?" else: return "You don't have a character. You can make one with !swchar" def parseChar(user : str, cmd : str): with open("resources/swcharacters.json", "r") as f: data = json.load(f) if cmd == " ": cmd = "" elif cmd != "": while cmd[0] == " ": cmd = cmd[1:] if cmd == "": break if cmd == "": if user in data: return characterSheet(data[user]) else: with open("resources/swtemplates.json", "r") as f: templates = json.load(f) newChar = templates["Character"] data[user] = newChar with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) return "", "Character for " + user + " created" else: if cmd == "purge": del data[user] with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) return "", "Character for " + user + " deleted" return "", charData(user,cmd) def lightsaberChar(user : str): with open("resources/swcharacters.json", "r") as f: data = json.load(f) if user in data: return data[user]["Lightsaber Characteristic"] def userHasChar(user : str): with open("resources/swcharacters.json", "r") as f: data = json.load(f) return user in data