def dispatch(self, typ, func, event, *args, **kwargs):
# Link the greenlet with our exception handler
gevent.getcurrent().link_exception(lambda g: self.handle_exception(g, event))
# TODO: this is ugly
if typ != 'command':
self.greenlets.add(gevent.getcurrent())
self.ctx['plugin'] = self
if hasattr(event, 'guild'):
self.ctx['guild'] = event.guild
if hasattr(event, 'channel'):
self.ctx['channel'] = event.channel
if hasattr(event, 'author'):
self.ctx['user'] = event.author
for pre in self._pre[typ]:
event = pre(func, event, args, kwargs)
if event is None:
return False
result = func(event, *args, **kwargs)
for post in self._post[typ]:
post(func, event, args, kwargs, result)
return True
评论列表
文章目录