aboutsummaryrefslogtreecommitdiff
path: root/EventManager.py
diff options
context:
space:
mode:
authorGravatar jesopo2018-07-08 11:18:55 +0100
committerGravatar jesopo2018-07-08 11:18:55 +0100
commitd12b61620d6459bf6340d43ac7a999ef8f2f8418 (patch)
treec3d80c51a10cdb7833013ac487eb8e67028e0aad /EventManager.py
parentIRCChannel.modes isn't a list, "sever" -> "server" (diff)
signature
Implemented delimited "event chains" and changed pong.py to use it
Diffstat (limited to 'EventManager.py')
-rw-r--r--EventManager.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/EventManager.py b/EventManager.py
index c1b58d4a..b93f170b 100644
--- a/EventManager.py
+++ b/EventManager.py
@@ -51,6 +51,7 @@ class EventHook(object):
self._child_notify = None
self._call_notify = None
self._stored_events = []
+
def hook(self, function, priority=EventCallback.PRIORITY_LOW,
replay=False, **kwargs):
callback = EventCallback(function, self.bot, priority, **kwargs)
@@ -63,15 +64,26 @@ class EventHook(object):
for event in self._stored_events:
callback.call(event)
self._stored_events = None
+
def _unhook(self, hook):
self._hooks.remove(hook)
- def on(self, subevent, *extra_subevents):
+
+ def on(self, subevent, *extra_subevents, delimiter="."):
+ if delimiter in subevent:
+ event_chain = subevent.split(delimiter)
+ event_obj = self
+ for event_name in event_chain:
+ event_obj = event_obj.get_child(event_name)
+ return event_obj
+
if extra_subevents:
multiple_event_hook = MultipleEventHook()
for extra_subevent in (subevent,)+extra_subevents:
multiple_event_hook._add(self.get_child(extra_subevent))
return multiple_event_hook
+
return self.get_child(subevent)
+
def call(self, max=None, **kwargs):
event = Event(self.bot, self.name, **kwargs)
if self._call_notify:
@@ -96,6 +108,7 @@ class EventHook(object):
# data=traceback.format_exc())
called += 1
return returns
+
def get_child(self, child_name):
child_name_lower = child_name.lower()
if not child_name_lower in self._children: