diff --git a/irc/commands/tasks.py b/irc/commands/tasks.py new file mode 100644 index 0000000..551077d --- /dev/null +++ b/irc/commands/tasks.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +# Manage wiki tasks from IRC, and check on thread status. + +import threading + +from irc.base_command import BaseCommand +from wiki import task_manager +from config.irc import * + +class ChanOps(BaseCommand): + def get_hooks(self): + return ["msg"] + + def get_help(self, command): + return "Manage wiki tasks from IRC, and check on thread status." + + def check(self, data): + if data.is_command and data.command in ["tasks", "threads", "tasklist"]: + return True + return False + + def process(self, data): + self.data = data + if data.host not in OWNERS: + self.connection.reply(data, "at this time, you must be a bot owner to use this command.") + return + + if not data.args: + if data.command == "!tasklist": + self.do_list() + else: + self.connection.reply(data, "no arguments provided. Maybe you wanted '!{cmnd} list', '!{cmnd} start', or '!{cmnd} listall'?".format(cmnd=data.command)) + return + + if data.args[0] == "list": + self.do_list() + + elif data.args[0] == "start": + self.do_start() + + elif data.args[0] == "listall": + self.do_listall() + + else: # they asked us to do something we don't know + self.connection.reply(data, "unknown argument: \x0303{}\x0301.".format(data.args[0])) + + def do_list(self): + threads = threading.enumerate() + for thread in threads: + self.connection.reply(data, thread.name) + + def do_listall(self): + tasks = task_manager.task_list.keys() + self.connection.reply(data, ', '.join(tasks)) + + def do_start(self): + kwargs = {} + try: + task_manager.start_task(data.args[1], **kwargs) + except IndexError: # no task name given + self.connection.reply(data, "what task do you want me to start?") + else: + self.connection.reply(data, "task '{}' started.".format(data.args[1]))