aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/state.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/discord/state.py b/discord/state.py
index 07c71039..c4c3cee6 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -43,7 +43,8 @@ class ConnectionState:
self.email = None
self.servers = []
self.private_channels = []
- self.messages = deque(maxlen=max_messages)
+ self.max_messages = max_messages
+ self.messages = deque(maxlen=self.max_messages)
self.dispatch = dispatch
def _get_message(self, msg_id):
@@ -236,6 +237,9 @@ class ConnectionState:
def parse_guild_delete(self, data):
server = self._get_server(data.get('id'))
+ if server is None:
+ return
+
if data.get('unavailable', False) and server is not None:
# GUILD_DELETE with unavailable being True means that the
# server that was available is now currently unavailable
@@ -243,6 +247,9 @@ class ConnectionState:
self.dispatch('server_unavailable', server)
return
+ # do a cleanup of the messages cache
+ self.messages = deque((msg for msg in self.messages if msg.server != server), maxlen=self.max_messages)
+
try:
self.servers.remove(server)
except ValueError:
@@ -250,6 +257,7 @@ class ConnectionState:
else:
self.dispatch('server_remove', server)
+
def parse_guild_ban_add(self, data):
# we make the assumption that GUILD_BAN_ADD is done
# before GUILD_MEMBER_REMOVE is called