import random import re import string import json import swchar with open("skills.json", "r") as f: skillData = json.load(f) def roll(abi : int = 1, prof : int = 0, dif : int = 3, cha : int = 0, boo : int = 0, setb : int = 0, force : int = 0): result = "" for x in range(abi): result += random.choice(["","S","S","SS","A","A","SA","AA"]) for x in range(prof): result += random.choice(["","S","S","SS","SS","A","SA","SA","SA","AA","AA","R"]) for x in range(dif): result += random.choice(["","F","FF","H","H","H","HH","FH"]) for x in range(cha): result += random.choice(["","F","F","FF","FF","H","H","FH","FH","HH","HH","D"]) for x in range(boo): result += random.choice(["","","S","SA","AA","A"]) for x in range(setb): result += random.choice(["","","F","F","H","H"]) for x in range (force): result += random.choice(["B","B","B","B","B","B","BB","L","L","Ll","LL","LL"]) return result def simplify(result : str): simp = "" success = (result.count('S') + result.count('R')) - (result.count('F') + result.count('D')) advantage = result.count('A') - result.count('H') result = re.sub("S|A|F|H","",result) if success > 0: for x in range(success): simp += "S" elif success < 0: for x in range(abs(success)): simp += "F" if advantage > 0: for x in range(advantage): simp += "A" elif advantage < 0: for x in range(abs(advantage)): simp += "H" simp += result return simp def resultToEmoji(result : str): emoji = "" for char in result: if char == 'S': emoji += "<:success:690971244971163718> " if char == 'A': emoji += "<:advantage:690970761611051079> " if char == 'R': emoji += "<:swtriumph:690971267486187643> " if char == 'F': emoji += "<:failure:690970957786906664> " if char == 'H': emoji += "<:threat:690971009469382656> " if char == 'D': emoji += "<:despair:690971200163414238> " if char == 'L': emoji += "<:light:691010089905029171>" if char == 'B': emoji += "<:dark:691010101901000852>" return emoji def diceToEmoji(dice : list): emoji = "" for x in range(dice[0]): emoji += "<:ability:690974213397282826> " for x in range(dice[1]): emoji += "<:proficiency:690973435354153071> " for x in range(dice[2]): emoji += "<:difficulty:690973992470708296> " for x in range(dice[3]): emoji += "<:challenge:690973419906400306> " for x in range(dice[4]): emoji += "<:boost:690972178216386561> " for x in range(dice[5]): emoji += "<:setback:690972157890658415> " for x in range(dice[6]): emoji += "<:force:690973451883774013> " return emoji def getDice(user : str, skill : str): return "yes" def parseRoll(user : str,cmd : str = ""): cmd = re.sub(' +',' ',cmd.upper()) + " " if cmd[0] == " ": cmd = cmd[1:] commands = cmd.split(" ") if commands[0] == "": rollParameters = [1,0,3,0,0,0,0] else: rollParameters = [0,0,0,0,0,0,0] if string.capwords(commands[0]) in skillData: if swchar.userHasChar: skillLevel = swchar.charData(user,"Skills " + string.capwords(commands[0])) if string.capwords(commands[0]) == "Lightsaber": charLevel = swchar.charData(user,"Characteristics " + swchar.lightsaberChar(user)) else: charLevel = swchar.charData(user,"Characteristics " + skillData[string.capwords(commands[0])]) abilityDice = abs(charLevel-skillLevel) proficiencyDice = min(skillLevel,charLevel) commands = [str(abilityDice)] + [str(proficiencyDice)] + commands[1:] else: return "You don't have a user. You can make one with !swchar" elif string.capwords(commands[0]) in ["Ranged","Piloting"]: if string.capwords(commands[0]) == "Ranged": return "Did you mean \"Ranged - Heavy\" or \"Ranged - Light\"" else: return "Did you mean \"Piloting - Planetary\" or \"Piloting - Space\"" try: for x in range(len(commands)): if commands[x-1] != "": if commands[x-1][0] == "A": rollParameters[0] = int(commands[x-1].replace("A","")) elif commands[x-1][0] == "P": rollParameters[1] = int(commands[x-1].replace("P","")) elif commands[x-1][0] == "D": rollParameters[2] = int(commands[x-1].replace("D","")) elif commands[x-1][0] == "C": rollParameters[3] = int(commands[x-1].replace("C","")) elif commands[x-1][0] == "B": rollParameters[4] = int(commands[x-1].replace("B","")) elif commands[x-1][0] == "S": rollParameters[5] = int(commands[x-1].replace("S","")) elif commands[x-1][0] == "F": rollParameters[6] = int(commands[x-1].replace("F","")) else: rollParameters[x-1] = int(commands[x-1]) except: return "Invalid input!" rollResults = roll(rollParameters[0],rollParameters[1],rollParameters[2],rollParameters[3],rollParameters[4],rollParameters[5],rollParameters[6]) simplified = simplify(rollResults) name = swchar.getName(user) if simplified != rollResults: return name + " rolls " + diceToEmoji(rollParameters) + "\nResult: " + resultToEmoji(rollResults) + "\nSimplified: " + resultToEmoji(simplify(rollResults)) else: return name + " rolls " + diceToEmoji(rollParameters) + "\nResult: " + resultToEmoji(rollResults)