diff --git a/tgbot/kollagen-bot/main.py b/tgbot/kollagen-bot/main.py index 2c105f3..22b3187 100644 --- a/tgbot/kollagen-bot/main.py +++ b/tgbot/kollagen-bot/main.py @@ -58,7 +58,7 @@ class KollagenBot: "-m", dest="mode", metavar="mode", - choices=self._get_modes(), + type=safe_str, nargs="?", const=True, help=f"Which collage mode to use. By default, one is chosen at random. When no value is specified, all modes are listed.", @@ -84,6 +84,26 @@ class KollagenBot: default=640, help=f"Height of resulting output (in px). 640px by default.", ) + parser.add_argument( + "--rm", + dest="recursive_modes", + type=safe_str, + help=f"Collage modes to use in a recursive collage. All by default.", + ) + parser.add_argument( + "--rl", + dest="recursive_level", + type=int, + default=3, + help=f"Level/depth of recursive collage. 3 by default.", + ) + parser.add_argument( + "--rr", + dest="recursive_repeat", + type=bool, + default=False, + help=f"Allow repeating images in recursive collages. False by default.", + ) self.parser = parser def _get_modes(self): @@ -134,6 +154,9 @@ class KollagenBot: mode = ["-m", args.mode] if args.mode else [] num_images = ["-n", str(args.num_images)] if args.num_images else [] + recursive_level = ["--rl", str(args.recursive_level)] if args.recursive_level else [] + recursive_repeat = ["--rr"] if args.recursive_repeat else [] + recursive_modes = ["--rm", str(args.recursive_modes)] if args.recursive_modes else [] with NamedTemporaryFile(suffix=".png") as ntf: shell_cmd_line = [ @@ -145,6 +168,9 @@ class KollagenBot: str(args.height), *mode, *num_images, + *recursive_level, + *recursive_repeat, + *recursive_modes, "-o", ntf.name, ] diff --git a/tgbot/kollagen-bot/parser.py b/tgbot/kollagen-bot/parser.py index ac5556b..40799f5 100644 --- a/tgbot/kollagen-bot/parser.py +++ b/tgbot/kollagen-bot/parser.py @@ -11,6 +11,6 @@ class SafeArgumentParser(argparse.ArgumentParser): raise ArgumentParserError(message) def safe_str(val: str): - if re.findall(r'[^\w]', val): + if re.findall(r'[^\w,]', val): raise RuntimeError("No special characters in arguments allowed!") return val \ No newline at end of file