aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2019-05-19 18:42:42 -0400
committerRapptz <[email protected]>2019-05-19 19:17:29 -0400
commit82b54933e22417e68ae6b92cebefae98f5369518 (patch)
tree0910afe21935b2287ec4e3f607e6542e34cc031c
parent[tasks] Add version added note to Loop.change_interval (diff)
downloaddiscord.py-82b54933e22417e68ae6b92cebefae98f5369518.tar.xz
discord.py-82b54933e22417e68ae6b92cebefae98f5369518.zip
Add asyncio.Task subclass for better __repr__ for events.
-rw-r--r--discord/client.py23
-rw-r--r--discord/ext/commands/bot.py3
2 files changed, 23 insertions, 3 deletions
diff --git a/discord/client.py b/discord/client.py
index 9e6067a3..fd12d7ec 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -93,6 +93,22 @@ def _cleanup_loop(loop):
log.info('Closing the event loop.')
loop.close()
+class _ClientEventTask(asyncio.Task):
+ def __init__(self, original_coro, event_name, coro, *, loop):
+ super().__init__(coro, loop=loop)
+ self.__event_name = event_name
+ self.__original_coro = original_coro
+
+ def __repr__(self):
+ info = [
+ ('state', self._state.lower()),
+ ('event', self.__event_name),
+ ('coro', repr(self.__original_coro)),
+ ]
+ if self._exception is not None:
+ info.append(('exception', repr(self._exception)))
+ return '<ClientEventTask {}>'.format(' '.join('%s=%s' % t for t in info))
+
class Client:
r"""Represents a client connection that connects to Discord.
This class is used to interact with the Discord WebSocket and API.
@@ -257,6 +273,11 @@ class Client:
except asyncio.CancelledError:
pass
+ def _schedule_event(self, coro, event_name, *args, **kwargs):
+ wrapped = self._run_event(coro, event_name, *args, **kwargs)
+ # Schedules the task
+ return _ClientEventTask(original_coro=coro, event_name=event_name, coro=wrapped, loop=self.loop)
+
def dispatch(self, event, *args, **kwargs):
log.debug('Dispatching event %s', event)
method = 'on_' + event
@@ -295,7 +316,7 @@ class Client:
except AttributeError:
pass
else:
- asyncio.ensure_future(self._run_event(coro, method, *args, **kwargs), loop=self.loop)
+ self._schedule_event(coro, method, *args, **kwargs)
async def on_error(self, event_method, *args, **kwargs):
"""|coro|
diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py
index a7280a9a..80511d23 100644
--- a/discord/ext/commands/bot.py
+++ b/discord/ext/commands/bot.py
@@ -125,8 +125,7 @@ class BotBase(GroupMixin):
super().dispatch(event_name, *args, **kwargs)
ev = 'on_' + event_name
for event in self.extra_events.get(ev, []):
- coro = self._run_event(event, event_name, *args, **kwargs)
- asyncio.ensure_future(coro, loop=self.loop)
+ self._schedule_event(event, ev, *args, **kwargs)
async def close(self):
for extension in tuple(self.__extensions):