def wait_many(*args, **kwargs): def _async(): for awaitable in args: awaitable.wait() gevent.spawn(_async).get(timeout=kwargs.get('timeout', None)) if kwargs.get('track_exceptions', True): from rowboat import raven_client for awaitable in args: if awaitable.exception: raven_client.captureException(exc_info=awaitable.exc_info)
def handle_exception(self, greenlet, event): extra = {} if isinstance(greenlet.exception, MetaException): extra.update(greenlet.exception.metadata) if isinstance(greenlet.exception, APIException): extra['status_code'] = greenlet.exception.response.status_code extra['code'] = greenlet.exception.code extra['msg'] = greenlet.exception.msg extra['content'] = greenlet.exception.response.content if isinstance(event, CommandEvent): extra['command'] = { 'name': event.name, 'plugin': event.command.plugin.__class__.__name__, 'content': event.msg.content, } extra['author'] = event.msg.author.to_dict(), extra['channel'] = { 'id': event.channel.id, 'name': event.channel.name, } if event.guild: extra['guild'] = { 'id': event.guild.id, 'name': event.guild.name, } elif isinstance(event, GatewayEvent): try: extra['event'] = { 'name': event.__class__.__name__, 'data': event.to_dict(), } except: pass raven_client.captureException(exc_info=greenlet.exc_info, extra=extra)