mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-09-08 10:53:10 +00:00
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
This commit is contained in:
@ -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):
|
||||
|
Reference in New Issue
Block a user