diff --git a/modules/commands.py b/modules/commands.py index 74f70e1d..a58d0748 100644 --- a/modules/commands.py +++ b/modules/commands.py @@ -173,15 +173,16 @@ class Module(object): command = event["message_split"][0].lower() self.message(event, command) + def _get_help(self, hook): + return hook.kwargs.get("help", None) or hook.function.__doc__ + def help(self, event): if event["args"]: command = event["args_split"][0].lower() if command in self.events.on("received").on( "command").get_children(): hooks = self.events.on("received.command").on(command).get_hooks() - kwargs = hooks[0].kwargs - help = hooks[0].kwargs.get("help", None - ) or hooks[0].function.__doc__ + help = self._get_help(hooks[0]) if help: event["stdout"].write("%s: %s" % (command, help.strip())) @@ -193,7 +194,8 @@ class Module(object): help_available = [] for child in self.events.on("received.command").get_children(): hooks = self.events.on("received.command").on(child).get_hooks() - if hooks and "help" in hooks[0].kwargs: + + if hooks and self._get_help(hooks[0]): help_available.append(child) help_available = sorted(help_available) event["stdout"].write("Commands: %s" % ", ".join(help_available)) diff --git a/src/EventManager.py b/src/EventManager.py index 604ae337..d1d90e87 100644 --- a/src/EventManager.py +++ b/src/EventManager.py @@ -7,7 +7,8 @@ PRIORITY_LOW = 3 PRIORITY_MONITOR = 4 DEFAULT_PRIORITY = PRIORITY_MEDIUM -DEFAULT_DELIMITER = "." +DEFAULT_EVENT_DELIMITER = "." +DEFAULT_MULTI_DELIMITER = "|" class Event(object): def __init__(self, bot, name, **kwargs): @@ -62,7 +63,8 @@ class EventHookContext(object): **kwargs): self._parent._context_hook(self.context, function, priority, replay, kwargs) - def on(self, subevent, *extra_subevents, delimiter=DEFAULT_DELIMITER): + def on(self, subevent, *extra_subevents, + delimiter=DEFAULT_EVENT_DELIMITER): return self._parent._context_on(self.context, subevent, extra_subevents, delimiter) def call_for_result(self, default=None, **kwargs): @@ -97,7 +99,7 @@ class EventHook(object): while not parent == None and not parent.name == None: path.append(parent.name) parent = parent.parent - return DEFAULT_DELIMITER.join(path[::-1]) + return DEFAULT_EVENT_DELIMITER.join(path[::-1]) def new_context(self, context): return EventHookContext(self, context) @@ -122,29 +124,38 @@ class EventHook(object): self._call(kwargs) self._stored_events = None - def on(self, subevent, *extra_subevents, delimiter=DEFAULT_DELIMITER): + def _make_multiple_hook(self, source, context, events): + multiple_event_hook = MultipleEventHook() + for event in events: + event_hook = source.get_child(event) + if not context == None: + event_hook = event_hook.new_context(context) + multiple_event_hook._add(event_hook) + return multiple_event_hook + + def on(self, subevent, *extra_subevents, + delimiter=DEFAULT_EVENT_DELIMITER): return self._on(subevent, extra_subevents, None, delimiter) def _context_on(self, context, subevent, extra_subevents, - delimiter=DEFAULT_DELIMITER): + delimiter=DEFAULT_EVENT_DELIMITER): return self._on(subevent, extra_subevents, context, delimiter) def _on(self, subevent, extra_subevents, context, delimiter): if delimiter in subevent: event_chain = subevent.split(delimiter) event_obj = self for event_name in event_chain: + if DEFAULT_MULTI_DELIMITER in event_name: + return self._make_multiple_hook(self, context, + event_name.split(DEFAULT_MULTI_DELIMITER)) + event_obj = event_obj.get_child(event_name) if not context == None: return event_obj.new_context(context) return event_obj if extra_subevents: - multiple_event_hook = MultipleEventHook() - for extra_subevent in (subevent,)+extra_subevents: - child = self.get_child(extra_subevent) - if not context == None: - child = child.new_context(context) - multiple_event_hook._add(child) - return multiple_event_hook + return self._make_multiple_hook(self, context, + (subevent,)+extra_subevents) child = self.get_child(subevent) if not context == None: