diff options
| author | Rapptz <[email protected]> | 2018-09-24 23:22:49 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2018-09-24 23:22:49 -0400 |
| commit | 27216892547bb073777056379d549a6dc42872cb (patch) | |
| tree | 18d1eded01727f64c93e31d23cb68201de16c832 /discord/state.py | |
| parent | Optimise some member and user related routines. (diff) | |
| download | discord.py-27216892547bb073777056379d549a6dc42872cb.tar.xz discord.py-27216892547bb073777056379d549a6dc42872cb.zip | |
Optimise tight loops in DiscordGateway.received_message
* type(x) is y is faster than isinstance(x, y)
* Re-arrange if-statements for common statements
* Drop handler getattr for most events that don't use it
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/discord/state.py b/discord/state.py index 676ca513..53e453f3 100644 --- a/discord/state.py +++ b/discord/state.py @@ -54,7 +54,7 @@ log = logging.getLogger(__name__) ReadyState = namedtuple('ReadyState', ('launch', 'guilds')) class ConnectionState: - def __init__(self, *, dispatch, chunker, syncer, http, loop, **options): + def __init__(self, *, dispatch, chunker, handlers, syncer, http, loop, **options): self.loop = loop self.http = http self.max_messages = max(options.get('max_messages', 5000), 100) @@ -62,6 +62,7 @@ class ConnectionState: self.chunker = chunker self.syncer = syncer self.is_bot = None + self.handlers = handlers self.shard_count = None self._ready_task = None self._fetch_offline = options.get('fetch_offline_members', True) @@ -127,6 +128,14 @@ class ConnectionState: for index in reversed(removed): del self._listeners[index] + def call_handlers(self, key, *args, **kwargs): + try: + func = self.handlers[key] + except KeyError: + pass + else: + func(*args, **kwargs) + @property def self_id(self): u = self.user @@ -308,6 +317,7 @@ class ConnectionState: pass else: # dispatch the event + self.call_handlers('ready') self.dispatch('ready') finally: self._ready_task = None @@ -960,6 +970,7 @@ class AutoShardedConnectionState(ConnectionState): self._ready_task = None # dispatch the event + self.call_handlers('ready') self.dispatch('ready') def parse_ready(self, data): |