aboutsummaryrefslogtreecommitdiff
path: root/discord/state.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2017-03-29 04:35:06 -0400
committerRapptz <[email protected]>2017-03-29 04:36:06 -0400
commit7f58853e3a2df34bf2fe77121fbb57cf3054f5ab (patch)
tree5ccb6c8410f14103fac22db00fc766497662db15 /discord/state.py
parent[commands] Fix User converter not working with IDs. (diff)
downloaddiscord.py-7f58853e3a2df34bf2fe77121fbb57cf3054f5ab.tar.xz
discord.py-7f58853e3a2df34bf2fe77121fbb57cf3054f5ab.zip
Keep track of Emoji instances myself.
WeakValueDictionary cleans up too late and brings too little benefit. Also clean up the state when the first READY is encountered for AutoShardedClient and when any READY is encountered in regular Client.
Diffstat (limited to 'discord/state.py')
-rw-r--r--discord/state.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/discord/state.py b/discord/state.py
index 72a4f01a..7c71f722 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -70,7 +70,7 @@ class ConnectionState:
def clear(self):
self.user = None
self._users = weakref.WeakValueDictionary()
- self._emojis = weakref.WeakValueDictionary()
+ self._emojis = {}
self._calls = {}
self._guilds = {}
self._voice_clients = {}
@@ -157,6 +157,11 @@ class ConnectionState:
def _remove_guild(self, guild):
self._guilds.pop(guild.id, None)
+ for emoji in guild.emojis:
+ self._emojis.pop(emoji.id, None)
+
+ del guild
+
@property
def emojis(self):
return list(self._emojis.values())
@@ -249,6 +254,7 @@ class ConnectionState:
def parse_ready(self, data):
self._ready_state = ReadyState(launch=asyncio.Event(), guilds=[])
+ self.clear()
self.user = ClientUser(state=self, data=data['user'])
guilds = self._ready_state.guilds
@@ -760,7 +766,6 @@ class ConnectionState:
class AutoShardedConnectionState(ConnectionState):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self._ready_state = ReadyState(launch=asyncio.Event(), guilds=[])
self._ready_task = None
@asyncio.coroutine
@@ -817,6 +822,7 @@ class AutoShardedConnectionState(ConnectionState):
def parse_ready(self, data):
if not hasattr(self, '_ready_state'):
self._ready_state = ReadyState(launch=asyncio.Event(), guilds=[])
+ self.clear()
self.user = ClientUser(state=self, data=data['user'])