Files
Gwendolyn/funcs/swfuncs/swchar.py
NikolajDanger d8c4cab2e3 Quick thing
2020-03-31 09:51:55 +02:00

418 lines
16 KiB
Python

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(cmd):
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 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] == '+':
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"
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:]
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:
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"
name = character["Name"]
textf = ""
if character["Force-rating"] != 0:
textf = "\n**Force Rating**: "+str(character["Force-rating"])
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 = ""
text8 = ""
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"+divider
if bool(character["Obligations"]):
text8 = "**Obligations**: "+",".join(list(character["Obligations"]))
return name, text1+text2+"\n\n"+text3+divider+text4+"\n"+divider+text5+text6+text7+text8
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 == "":
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" or key == "Obligation") 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:
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)
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 == "":
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:]
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 "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:
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
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 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)
if cmd == " ":
cmd = ""
elif cmd != "":
while cmd[0] == " ":
cmd = cmd[1:]
if cmd == "":
break
if cmd == "":
if user in data:
text1, text2 = characterSheet(data[user])
return text1, replaceWithSpaces(text2)
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 "", replaceWithSpaces(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