def apply(self, match: Match): operator = match.group(1) operators = ["+", "-", "*", "/"] if operator in operators: modifier = int(match.group(2)) return RollSpec(modifier=modifier, operation=operator) else: modifier = int(match.group(2)) return RollSpec(modifier=modifier, operation="+")
def apply(self, match: Match): if match.group(1): dice_count = int(match.group(1)) else: dice_count = 1 return RollSpec( dice_count=int(dice_count), dice_sides=int(match.group(2)), modifier=0, target_number=int(match.group(3)), )
def apply(self, match: Match): if match.group(1): operation = match.group(1) else: operation = "+" if match.group(2): dice_count = int(match.group(2)) else: dice_count = 1 return RollSpec( dice_count=int(dice_count), dice_sides=int(match.group(3)), operation=operation, )
def apply(self, match: Match): target_number = -int(match.group(1)) if match.group(2): modifier = match.group(2) if modifier == "hard": target_number = ceil(target_number / 2) elif modifier == "easy": target_number = target_number * 2 return RollSpec( dice_count=1, dice_sides=100, modifier=0, target_number=target_number, )
def apply(self, match: Match): if match.group(3): if match.group(3) == "+": modifier = int(match.group(4)) else: modifier = -int(match.group(4)) else: modifier = 0 if match.group(1): dice_count = int(match.group(1)) else: dice_count = 1 return RollSpec( dice_count=dice_count, dice_sides=int(match.group(2)), modifier=modifier, target_number=None, )
def add_part(self, part: RollSpec): self.parts.append(part) self.dice_count += part.dice_count if part.has_target(): self.target_number = part.target_number
def get_spec(roll_string): parser = get_token_parser() roll_spec = parser.parse(roll_string) if not roll_spec.target_number: roll_spec.add_part(RollSpec(target_number=5, operation=None)) return roll_spec
def apply(self, match: Match): return RollSpec(target_number=int(match.group(1)), operation=None)