diff --git a/modules/todo.py b/modules/todo.py index d9816038..f5aa7658 100644 --- a/modules/todo.py +++ b/modules/todo.py @@ -4,80 +4,55 @@ from src import ModuleManager, utils class Module(ModuleManager.BaseModule): @utils.hook("received.command.todo") + @utils.spec("!'list ?int") + @utils.spec("!'add !string") + @utils.spec("!'remove !int") + @utils.spec("!'move !int !int") def todo(self, event): - """ - :help: Find out what's in your todo list - :usage: [item number] - """ - todo = event["user"].get_setting("todo", []) - if event["args"]: - if event["args_split"][0].isdigit() and int(event["args_split"][0]) > 0: - index = int(event["args_split"][0]) - if len(todo) >= index: - event["stdout"].write("Todo %d: %s" % (index, todo[index-1])) - else: - event["stderr"].write("You do not have that many things in your todo list") + user_todo = event["user"].get_setting("todo", []) + if event["spec"][0] == "list": + if not user_todo: + raise utils.EventError("%s: you have no todo items" + % event["user"].nickname) + + if not event["spec"][1] == None: + index = event["spec"][1]-1 + if not index in dict(enumerate(user_todo)): + raise utils.EventError("%s: unknown todo index %d" + % (event["user"].nickname, event["spec"][1])) + event["stdout"].write("%s: (%d) %s" + % (event["user"].nickname, event["spec"][1], + user_todo[index])) else: - event["stderr"].write("Please provide a number") - else: - todo_count = len(todo) - event["stdout"].write("There are %d items in your todo list" % todo_count) + outs = ["(%d) %s" % (i+1, s) for i, s in enumerate(user_todo)] + event["stdout"].write("%s: %s" + % (event["user"].nickname, ", ".join(outs))) - @utils.hook("received.command.todoadd", min_args=1) - def todo_add(self, event): - """ - :help: Add something to your todo list - :usage: - """ - arg_lower = event["args"].lower() - todo = event["user"].get_setting("todo", []) - for item in todo: - if item.lower() == arg_lower: - raise utils.EventError("That is already in your todo list") - todo.append(event["args"]) - event["user"].set_setting("todo", todo) - event["stdout"].write("Saved") + elif event["spec"][0] == "add": + user_todo.append(event["spec"][1]) + event["user"].set_setting("todo", user_todo) + event["stdout"].write("%s: todo item %d added" + % (event["user"].nickname, len(user_todo))) - @utils.hook("received.command.tododel", min_args=1) - def todo_del(self, event): - """ - :help: Remove something from your todo list - :usage: - """ - todo = event["user"].get_setting("todo", []) - if event["args_split"][0].isdigit() and int(event["args_split"][0]) > 0: - index = int(event["args_split"][0]) - if len(todo) >= index: - todo.pop(index-1) - event["user"].set_setting("todo", todo) - event["stdout"].write("Todo item removed") - else: - event["stderr"].write("You do not have that many things in " - "your todo list") - else: - event["stderr"].write("Please provided a todo item number to remove") + elif event["spec"][0] == "remove": + index = event["spec"][1]-1 + if not index in dict(enumerate(user_todo)): + raise utils.EventError("%s: unknown todo index %d" + % event["user"].nickname) + description = user_todo.pop(index) + event["user"].set_setting("todo", user_todo) + event["stdout"].write("%s: todo item %d removed: %s" + % (event["user"].nickname, event["spec"][1], description)) - @utils.hook("received.command.todomove", min_args=2) - def todo_move(self, event): - """ - :help: Move a todo item to a different index - :usage: - """ - _from_str, to_str = event["args_split"][0], event["args_split"][1] - if not _from_str.isdigit() or not to_str.isdigit(): - event["stdout"].write("Please provide numeric indexes") - return - - _from, to = int(_from_str)-1, int(to_str)-1 - if _from < 0 or to < 0: - raise utils.EventError("Both indexes must be above 0") - - todo = event["user"].get_setting("todo", []) - if _from > len(todo) or to > len(todo): - raise utils.EventError("Both indexes must be less than the " - "size of your todo list") - - todo.insert(to, todo.pop(_from)) - event["user"].set_setting("todo", todo) - event["stdout"].write("Moved todo item %s to position %s" % ( - _from_str, to_str)) + elif event["spec"][0] == "move": + todo_dict = dict(enumerate(user_todo)) + start_index, end_index = event["spec"][1]-1, event["spec"][2]-1 + for i, name in [[start_index, "start"], [end_index, "end"]]: + if not i in todo_dict: + raise utils.EventError("%s: unknown todo %s index %d" + % (event["user"].nickname, name, i+1)) + description = user_todo.pop(start_index) + user_todo.insert(end_index, description) + event["user"].set_setting("todo", user_todo) + event["stdout"].write("%s: todo item moved to %d: %s" + % (event["user"].nickname, event["spec"][2], description))