Zeta / command_center.py
Ritvik19's picture
Update command_center.py
fb7c0d6 verified
raw
history blame
2 kB
from custom_exceptions import InvalidCommandError
class CommandCenter:
def __init__(self, default_input_type, default_function=None, all_commands=None):
self.commands = {}
self.add_command("/default", default_input_type, default_function)
if all_commands:
for command, input_type, function in all_commands:
self.add_command(command, input_type, function)
def add_command(self, command, input_type, function=None):
assert input_type in [None, str, int, float, bool, list], "Invalid input type"
self.commands[command] = {"input_type": input_type, "function": function}
def parse_command(self, input_string):
# parsing the input string
input_string = input_string.strip()
if not input_string.startswith("/"):
command = "/default"
argument = input_string.split(" ")
else:
inputs = input_string.split(" ")
command = inputs[0]
argument = inputs[1:]
if command not in self.commands:
raise InvalidCommandError("Invalid command")
# type casting the arguments
if self.commands[command]["input_type"] == str:
argument = " ".join(argument)
elif self.commands[command]["input_type"] == int:
argument = int(" ".join(argument))
elif self.commands[command]["input_type"] == float:
argument = float(" ".join(argument))
elif self.commands[command]["input_type"] == bool:
argument = bool(" ".join(argument))
elif self.commands[command]["input_type"] == list:
argument = argument
else:
argument = None
return command, argument
def execute_command(self, input_string):
command, argument = self.parse_command(input_string)
if command in self.commands:
return self.commands[command]["function"](argument)
else:
return "Invalid command"