aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/emoji.py2
-rw-r--r--discord/state.py10
2 files changed, 9 insertions, 3 deletions
diff --git a/discord/emoji.py b/discord/emoji.py
index 0e2158ec..ff839c4d 100644
--- a/discord/emoji.py
+++ b/discord/emoji.py
@@ -73,7 +73,7 @@ class Emoji(Hashable):
A list of :class:`Role` that is allowed to use this emoji. If roles is empty,
the emoji is unrestricted.
"""
- __slots__ = ('require_colons', 'managed', 'id', 'name', 'roles', 'guild', '_state', '__weakref__')
+ __slots__ = ('require_colons', 'managed', 'id', 'name', 'roles', 'guild', '_state')
def __init__(self, *, guild, state, data):
self.guild = guild
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'])