diff options
| author | Rapptz <[email protected]> | 2016-10-09 05:37:37 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2017-01-03 09:51:47 -0500 |
| commit | 31229a53e902e7cdc6f5f8d6e55e333cbc1fb0e6 (patch) | |
| tree | 14612b14bfe19c436b13fee6077b91900b2d30c3 /discord/state.py | |
| parent | Begin working on the rewrite. (diff) | |
| download | discord.py-31229a53e902e7cdc6f5f8d6e55e333cbc1fb0e6.tar.xz discord.py-31229a53e902e7cdc6f5f8d6e55e333cbc1fb0e6.zip | |
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.
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 25 |
1 files changed, 13 insertions, 12 deletions
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) |