From 31229a53e902e7cdc6f5f8d6e55e333cbc1fb0e6 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sun, 9 Oct 2016 05:37:37 -0400 Subject: Optimise VoiceState for memory. Instead of storing one VoiceState per Member, only store them if necessary. This should bring down the number of instances significantly. --- discord/state.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'discord/state.py') diff --git a/discord/state.py b/discord/state.py index 1af26db8..ff28c496 100644 --- a/discord/state.py +++ b/discord/state.py @@ -340,7 +340,7 @@ class ConnectionState: member = self._make_member(server, data) server._add_member(member) - old_member = member._copy() + old_member = copy.copy(member) member._presence_update(data=data, user=user) self.dispatch('member_update', old_member, member) @@ -431,12 +431,14 @@ class ConnectionState: server._member_count -= 1 # remove them from the voice channel member list - vc = member.voice_channel - if vc is not None: - try: - vc.voice_members.remove(member) - except: - pass + vc = server._voice_state_for(user_id) + if vc: + voice_channel = vc.channel + if voice_channel is not None: + try: + voice_channel.voice_members.remove(member) + except ValueError: + pass self.dispatch('member_remove', member) @@ -446,7 +448,7 @@ class ConnectionState: user_id = user['id'] member = server.get_member(user_id) if member is not None: - old_member = member._copy() + old_member = copy.copy(member) member._update(data, user) self.dispatch('member_update', old_member, member) @@ -620,15 +622,14 @@ class ConnectionState: def parse_voice_state_update(self, data): server = self._get_server(data.get('guild_id')) if server is not None: - channel = server.get_channel(data.get('channel_id')) if data.get('user_id') == self.user.id: voice = self._get_voice_client(server.id) if voice is not None: - voice.channel = channel + voice.channel = server.get_channel(data.get('channel_id')) - before, after = server._update_voice_state(data) + member, before, after = server._update_voice_state(data) if after is not None: - self.dispatch('voice_state_update', before, after) + self.dispatch('voice_state_update', member, before, after) else: # in here we're either at private or group calls call = self._calls.get(data.get('channel_id'), None) -- cgit v1.2.3