diff --git a/Gwendolyn.py b/Gwendolyn.py index db745cb..5792695 100644 --- a/Gwendolyn.py +++ b/Gwendolyn.py @@ -41,6 +41,9 @@ async def on_message(message): await message.channel.send(embed = em) elif message.content.lower().startswith("!stop"): + localtime = time.asctime( time.localtime(time.time()) ) + print("\n"+localtime+"\n"+message.author.name+" ran !stop") + logging.info("\n"+localtime+"\n"+message.author.name+" ran !stop") await client.logout() elif message.content.lower().startswith("!hello"): diff --git a/funcs/swfuncs/swchar.py b/funcs/swfuncs/swchar.py index cfc7d42..2ce2792 100644 --- a/funcs/swfuncs/swchar.py +++ b/funcs/swfuncs/swchar.py @@ -14,7 +14,7 @@ def getName(user : str): return user def setUpDict(cmd : dict): - if bool(dict): + if bool(cmd): keys = list(cmd) values = list(cmd.values()) result = "" @@ -41,8 +41,13 @@ def lookUp(data : dict, key : str, cmd : str = ""): if key in data: if cmd == "": - if type(data[key]) is dict: + if type(data[key]) is dict and key != "Weapons": return setUpDict(data[key]) + elif key == "Weapons": + if bool(data[key]): + return ", ".join(list(data[key])) + else: + return "There doesn't seem to be anything here..." else: return data[key] elif cmd[0] == '+': @@ -60,28 +65,111 @@ def lookUp(data : dict, key : str, cmd : str = ""): return data except: return "Can't add that" + elif type(data[key]) is list: + try: + data[key].append(cmd) + return data + except: + return "Can't add that" else: return "Can't add that" + 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 remove that" + elif type(data[key]) is list: + try: + data[key].remove(cmd) + return data + except: + return "Can't remove that" + else: + return "Can't remove that" else: while cmd[0] == ' ': cmd = cmd[1:] - try: - cmd = type(data[key])(cmd) - data[key] = cmd - return data - except: + if type(data[key]) != list: + try: + cmd = type(data[key])(cmd) + data[key] = cmd + return data + except: + return "Wrong data type" + else: return "Wrong data type" else: - return key + " doesn't exist" + cmd = key + " " + cmd + words = cmd.split(" ") + search = "" + i = 0 + while search not in data: + try: + search += " " + words[i] + i += 1 + except: + return search + " doesn't exist" + if search[0] == " ": + search = search[1:] + + cmd = cmd[len(search):] + if cmd != "": + while cmd[0] == " ": + cmd = cmd[1:] + if cmd == "": + break + + if cmd == "": + return setUpDict(data[search]) + else: + newKey = cmd.split(" ")[0] + cmd = cmd[len(newKey):] + while cmd[0] == " ": + cmd = cmd[1:] + if cmd == "": + break + lookUpResult = lookUp(data[search],newKey,cmd) + if type(lookUpResult) is dict: + data[search] = lookUpResult + return data + else: + return lookUpResult def characterSheet(character : dict): - divider = "\n----------\n" + divider = "--------------------\n" name = character["Name"] - text1 = "**Species**: "+character["Species"]+"\n**Career**: "+character["Career"] - text2 = setUpDict(character["Characteristics"]) - text3 = setUpDict(character["Skills"]) + textf = "" + if character["Force-rating"] != 0: + textf = "\n**Force Rating**: "+str(character["Force-rating"]) - return name, text1+"\n\n"+text2+divider+text3 + text1 = "**Species**: "+character["Species"]+"\n**Career**: "+character["Career"]+"\n**Specialization Trees**: "+", ".join(character["Specialization-trees"])+textf+"\n**Soak**: "+str(character["Soak"]) + text2 = "\n\n**Wounds**: "+str(character["Wounds"])+"/"+str(character["Wound-threshold"])+"\n**Strain**: "+str(character["Strain"])+"/"+str(character["Strain-threshold"]) + text3 = setUpDict(character["Characteristics"]) + text4 = setUpDict(character["Skills"]) + text5 = "" + text6 = "" + text7 = "" + + if bool(character["Talents"]): + text5 = "**Talents**: "+",".join(list(character["Talents"]))+"\n\n" + + if bool(character["Force-powers"]): + text6 = "**Force Powers**: "+",".join(list(character["Force-powers"]))+"\n\n" + + if bool(character["Weapons"]): + text7 = "**Weapons**: "+",".join(list(character["Weapons"]))+"\n\n" + + return name, text1+text2+"\n\n"+text3+divider+text4+"\n"+divider+text5+text6+text7 def charData(user : str,cmd : str): with open("resources/swcharacters.json", "r") as f: @@ -101,10 +189,69 @@ def charData(user : str,cmd : str): if key in data[user]: if type(data[user][key]) is dict: if cmd == "": - return setUpDict(data[user][key]) + if key == "Weapons": + if bool(data[user][key]): + return ", ".join(list(data[user][key])) + else: + return "There doesn't seem to be anything there..." + else: + return setUpDict(data[user][key]) + elif cmd[0] == "+": + try: + cmd = cmd[1:] + while cmd[0] == ' ': + cmd = cmd[1:] + except: + return "Can't do that" + + if (key == "Talents" or key == "Force-powers") and "," in cmd: + cmd = cmd.split(",") + while cmd[1][0] == " ": + cmd[1] = cmd[1][1:] + data[user][key][cmd[0]] = cmd[1] + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return cmd[0]+" added to "+key+" for " + data[user]["Name"] + + elif key == "Weapons": + with open("resources/swtemplates.json", "r") as f: + templates = json.load(f) + newWeapon = templates["Weapon"] + data[user][key][cmd] = newWeapon + + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return cmd+" added to weapons for " + data[user]["Name"] + + else: + return "Can't add that" + + elif cmd[0] == "-": + try: + cmd = cmd[1:] + while cmd[0] == ' ': + cmd = cmd[1:] + except: + return "Can't do that" + + if key == "Talents" or key == "Force-powers" or key == "Weapons": + if cmd in data[user][key]: + del data[user][key][cmd] + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return cmd+" removed from "+key+" for "+data[user]["Name"] + else: + return "Can't remove that" + else: + return "Can't remove that" + else: - newKey = string.capwords(cmd.split(" ")[0]) - newcmd = cmd[len(newKey):] + if key != "Talents" and key != "Force-powers": + newKey = string.capwords(cmd.split(" ")[0]) + newcmd = cmd[len(newKey):] + else: + newKey = cmd + newcmd = "" lookUpResult = lookUp(data[user][key],newKey,newcmd) @@ -117,7 +264,10 @@ def charData(user : str,cmd : str): return lookUpResult else: if cmd == "": - return data[user][key] + if type(data[user][key]) is list: + return key+":\n"+", ".join(data[user][key]) + else: + return data[user][key] elif cmd[0] == '+': try: cmd = cmd[1:] @@ -128,14 +278,65 @@ def charData(user : str,cmd : str): if type(data[user][key]) is int: try: - data[user][key] += int(cmd) + beforeData = data[user][key] + data[user][key] = beforeData+ int(cmd) + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return "Added " + cmd + " to " + user + "'s " + key + except: + return "Can't add that" + elif type(data[user][key]) is list: + try: + data[user][key].append(cmd) + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) return "Added " + cmd + " to " + user + "'s " + key except: return "Can't add that" else: return "Can't add that" + 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: + beforeData = data[user][key] + data[user][key] = beforeData - int(cmd) + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return "Subtracted " + cmd + " from " + user + "'s " + key + except: + return "Can't remove that" + elif type(data[user][key]) is list: + try: + beforeData = data[user][key] + try: + data[user][key].remove(cmd) + except: + return "Not in list" + with open("resources/swcharacters.json", "w") as f: + json.dump(data,f,indent = 4) + return "Removed " + cmd + " from " + user + "'s " + key + except: + return "Can't remove that" + else: + return "Can't remove that" else: - data[user][key] = cmd + if type(data[user][key]) is int: + try: + data[user][key] = int(cmd) + except: + return "Can't do that" + elif type(data[user][key]) is str: + data[user][key] = cmd + else: + return "Can't do that" + with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) return "Changed " + data[user]["Name"] + "'s " + key +" to " + cmd @@ -144,7 +345,28 @@ def charData(user : str,cmd : str): else: return "You don't have a character. You can make one with !swchar" +def replaceSpaces(cmd : str): + withSpaces = ["Specialization Trees","Wound Threshold","Strain Threshold","Defense - Ranged","Defense - Melee","Force Rating","Core Worlds","Outer Rim","Piloting - Planetary","Piloting - Space","Ranged - Heavy","Ranged - light","Lightsaber Characteristic","Critical Injuries","Force Powers"] + withoutSpaces = ["Specialization-trees","Wound-threshold","Strain-threshold","Defense-ranged","Defense-melee","Force-rating","Core-worlds","Outer-rim","Piloting-planetary","Piloting-space","Ranged-heavy","Ranged-light","Lightsaber-characteristic","Critical-injuries","Force-powers"] + + for x in range(len(withoutSpaces)): + cmd = cmd.replace(withSpaces[x],withoutSpaces[x]) + + return cmd + +def replaceWithSpaces(cmd : str): + withSpaces = ["Specialization Trees","Wound Threshold","Strain Threshold","Defense - Ranged","Defense - Melee","Force Rating","Core Worlds","Outer Rim","Piloting - Planetary","Piloting - Space","Ranged - Heavy","Ranged - light","Lightsaber Characteristic","Critical Injuries","Force Powers"] + withoutSpaces = ["Specialization-trees","Wound-threshold","Strain-threshold","Defense-ranged","Defense-melee","Force-rating","Core-worlds","Outer-rim","Piloting-planetary","Piloting-space","Ranged-heavy","Ranged-light","Lightsaber-characteristic","Critical-injuries","Force-powers"] + + for x in range(len(withoutSpaces)): + cmd = cmd.replace(withoutSpaces[x],withSpaces[x]) + + return cmd + def parseChar(user : str, cmd : str): + + cmd = replaceSpaces(cmd) + with open("resources/swcharacters.json", "r") as f: data = json.load(f) @@ -158,7 +380,8 @@ def parseChar(user : str, cmd : str): if cmd == "": if user in data: - return characterSheet(data[user]) + text1, text2 = characterSheet(data[user]) + return text1, replaceWithSpaces(text2) else: with open("resources/swtemplates.json", "r") as f: templates = json.load(f) @@ -166,14 +389,14 @@ def parseChar(user : str, cmd : str): data[user] = newChar with open("resources/swcharacters.json", "w") as f: json.dump(data,f,indent = 4) - return "", "Character for " + user + " created" + 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) + return "", replaceWithSpaces(charData(user,cmd)) def lightsaberChar(user : str): with open("resources/swcharacters.json", "r") as f: diff --git a/funcs/swfuncs/swroll.py b/funcs/swfuncs/swroll.py index 27182e0..106ae7a 100644 --- a/funcs/swfuncs/swroll.py +++ b/funcs/swfuncs/swroll.py @@ -107,6 +107,8 @@ def parseRoll(user : str,cmd : str = ""): cmd = re.sub(' +',' ',cmd.upper()) + " " if cmd[0] == " ": cmd = cmd[1:] + cmd = swchar.replaceSpaces(cmd.capitalize()) + print(cmd) commands = cmd.split(" ") if commands[0] == "": rollParameters = [1,0,3,0,0,0,0] diff --git a/resources/swcharacters.json b/resources/swcharacters.json index 10800a1..d0dde17 100644 --- a/resources/swcharacters.json +++ b/resources/swcharacters.json @@ -1,24 +1,24 @@ { - "TestUser": { + "Nikolaj": { "Name": "New Character", "Species": "", "Career": "", - "Specialization Trees": [], + "Specialization-trees": [], "Soak": 0, - "Wound Threshold": 0, + "Wound-threshold": 12, "Wounds": 0, - "Strain Threshold": 0, + "Strain-threshold": 0, "Strain": 0, - "Defense, Ranged": 0, - "Defense, Melee": 0, - "Force Rating": 0, + "Defense-ranged": 0, + "Defense-melee": 0, + "Force-rating": 1, "Characteristics": { - "Brawn": 0, - "Agility": 0, - "Intellect": 0, - "Cunning": 0, - "Willpower": 0, - "Presence": 0 + "Brawn": 2, + "Agility": 2, + "Intellect": 2, + "Cunning": 2, + "Willpower": 2, + "Presence": 2 }, "Skills": { "Astrogation": 0, @@ -29,7 +29,7 @@ "Computers": 0, "Cool": 0, "Coordination": 0, - "Core Worlds": 0, + "Core-worlds": 0, "Discipline": 0, "Gunnery": 0, "Leadership": 0, @@ -39,12 +39,12 @@ "Medicine": 0, "Melee": 0, "Negotiation": 0, - "Outer Rim": 0, + "Outer-rim": 0, "Perception": 0, - "Piloting - Planetary": 0, - "Piloting - Space": 0, - "Ranged - Heavy": 0, - "Ranged - Light": 0, + "Piloting-planetary": 0, + "Piloting-space": 0, + "Ranged-heavy": 0, + "Ranged-light": 0, "Resilience": 0, "Skullduggery": 0, "Stealth": 0, @@ -54,20 +54,30 @@ "Vigilance": 0, "Xenology": 0 }, - "Lightsaber Characteristic": "Brawn", + "Lightsaber-characteristic": "Brawn", "Obligations": {}, "Morality": { - "Emotional Weakness": "", - "Emotional Strength": "", + "Weakness": "Dicks", + "Strength": "", "Conflict": "", "Morality": "" }, "Credits": 0, "Equipment": [], "Armor": "", - "Critical Injuries": {}, - "Weapons": {}, + "Critical-injuries": {}, + "Weapons": { + "Light Blaster Rifle": { + "Skill": "", + "Damage": 0, + "Range": "", + "Crit": 0, + "Special": [] + } + }, "Talents": {}, - "Force Powers": {} + "Force-powers": { + "Dick 4 Dayz": "You Got Hella Dick" + } } } \ No newline at end of file diff --git a/resources/swskills.json b/resources/swskills.json index e975711..91f0e6c 100644 --- a/resources/swskills.json +++ b/resources/swskills.json @@ -6,23 +6,23 @@ "Mechanics" : "Intellect", "Melee" : "Brawn", "Perception" : "Cunning", - "Piloting - Space" : "Agility", - "Ranged - Heavy" : "Agility", - "Ranged - Light" : "Agility", + "Piloting-space" : "Agility", + "Ranged-heavy" : "Agility", + "Ranged-light" : "Agility", "Athletics" : "Brawn", "Coercion" : "Willpower", "Coordination" : "Agility", "Charm" : "Presence", "Medicine" : "Intellect", "Negotiation" : "Presence", - "Piloting - Planetary" : "Agility", + "Piloting-planetary" : "Agility", "Stealth" : "Agility", "Skullduggery" : "Cunning", "Brawl" : "Brawn", "Discipline" : "Willpower", "Gunnery" : "Agility", - "Core Worlds" : "Intellect", - "Outer Rim" : "Intellect", + "Core-worlds" : "Intellect", + "Outer-rim" : "Intellect", "Underworld" : "Intellect", "Leadership" : "Presence", "Lore" : "Intellect", diff --git a/resources/swskills.txt b/resources/swskills.txt index 256b59b..488d90d 100644 --- a/resources/swskills.txt +++ b/resources/swskills.txt @@ -5,23 +5,23 @@ Vigilance Mechanics Melee Perception -Piloting - Space -Ranged - Heavy -Ranged - Light +Piloting-space +Ranged-heavy +Ranged-light Athletics Coercion Coordination Charm Medicine Negotiation -Piloting - Planetary +Piloting-planetary Stealth Skullduggery Brawl Discipline Gunnery -Core Worlds -Outer Rim +Core-worlds +Outer-rim Underworld Leadership Lore diff --git a/resources/swtemplates.json b/resources/swtemplates.json index 07b6a58..69220b7 100644 --- a/resources/swtemplates.json +++ b/resources/swtemplates.json @@ -3,15 +3,15 @@ "Name": "New Character", "Species": "", "Career": "", - "Specialization Trees": [], + "Specialization-trees": [], "Soak": 0, - "Wound Threshold": 0, + "Wound-threshold": 0, "Wounds": 0, - "Strain Threshold": 0, + "Strain-threshold": 0, "Strain": 0, - "Defense, Ranged": 0, - "Defense, Melee": 0, - "Force Rating": 0, + "Defense-ranged": 0, + "Defense-melee": 0, + "Force-rating": 0, "Characteristics": { "Brawn": 2, "Agility": 2, @@ -29,7 +29,7 @@ "Computers": 0, "Cool": 0, "Coordination": 0, - "Core Worlds": 0, + "Core-worlds": 0, "Discipline": 0, "Gunnery": 0, "Leadership": 0, @@ -39,12 +39,12 @@ "Medicine": 0, "Melee": 0, "Negotiation": 0, - "Outer Rim": 0, + "Outer-rim": 0, "Perception": 0, - "Piloting - Planetary": 0, - "Piloting - Space": 0, - "Ranged - Heavy": 0, - "Ranged - Light": 0, + "Piloting-planetary": 0, + "Piloting-space": 0, + "Ranged-heavy": 0, + "Ranged-light": 0, "Resilience": 0, "Skullduggery": 0, "Stealth": 0, @@ -54,20 +54,27 @@ "Vigilance": 0, "Xenology": 0 }, - "Lightsaber Characteristic": "Brawn", + "Lightsaber-characteristic": "Brawn", "Obligations": {}, "Morality": { - "Emotional Weakness": "", - "Emotional Strength": "", + "Weakness": "", + "Strength": "", "Conflict": "", "Morality": "" }, "Credits": 0, "Equipment": [], "Armor": "", - "Critical Injuries": {}, + "Critical-injuries": {}, "Weapons": {}, "Talents": {}, - "Force Powers": {} + "Force-powers": {} + }, + "Weapon": { + "Skill" : "", + "Damage" : 0, + "Range" : "", + "Crit" : 0, + "Special" : [] } } \ No newline at end of file