diff options
| author | Rapptz <[email protected]> | 2015-12-17 06:05:35 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2015-12-17 06:05:35 -0500 |
| commit | 49d78c69c74cd06a43f43197e6ec119d37680ceb (patch) | |
| tree | bf7b289790eede4f234d7608aacec44c1d322465 /discord | |
| parent | Documentation fixes. (diff) | |
| download | discord.py-49d78c69c74cd06a43f43197e6ec119d37680ceb.tar.xz discord.py-49d78c69c74cd06a43f43197e6ec119d37680ceb.zip | |
All update related events now pass in the previous state.
Diffstat (limited to 'discord')
| -rw-r--r-- | discord/server.py | 4 | ||||
| -rw-r--r-- | discord/state.py | 16 |
2 files changed, 13 insertions, 7 deletions
diff --git a/discord/server.py b/discord/server.py index 0a6b7091..566510e5 100644 --- a/discord/server.py +++ b/discord/server.py @@ -30,6 +30,7 @@ from .member import Member from .channel import Channel from .enums import ServerRegion, Status from .mixins import Hashable +import copy class Server(Hashable): """Represents a Discord server. @@ -94,11 +95,12 @@ class Server(Hashable): def _update_voice_state(self, data): user_id = data.get('user_id') member = utils.find(lambda m: m.id == user_id, self.members) + before = copy.copy(member) if member is not None: ch_id = data.get('channel_id') channel = utils.find(lambda c: c.id == ch_id, self.channels) member.update_voice_state(voice_channel=channel, **data) - return member + return before, member def _from_data(self, guild): self.name = guild.get('name') diff --git a/discord/state.py b/discord/state.py index 58b6b41b..dddb4873 100644 --- a/discord/state.py +++ b/discord/state.py @@ -148,8 +148,10 @@ class ConnectionState: if server is not None: channel_id = data.get('id') channel = utils.find(lambda c: c.id == channel_id, server.channels) - channel.update(server=server, **data) - self.dispatch('channel_update', channel) + if channel is not None: + old_channel = copy.copy(channel) + channel.update(server=server, **data) + self.dispatch('channel_update', old_channel, channel) def parse_channel_create(self, data): is_private = data.get('is_private', False) @@ -275,14 +277,16 @@ class ConnectionState: if server is not None: role_id = data['role']['id'] role = utils.find(lambda r: r.id == role_id, server.roles) - role.update(**data['role']) - self.dispatch('server_role_update', role) + if role is not None: + old_role = copy.copy(role) + role.update(**data['role']) + self.dispatch('server_role_update', old_role, role) def parse_voice_state_update(self, data): server = self._get_server(data.get('guild_id')) if server is not None: - updated_member = server._update_voice_state(data) - self.dispatch('voice_state_update', updated_member) + updated_members = server._update_voice_state(data) + self.dispatch('voice_state_update', *updated_members) def parse_typing_start(self, data): channel = self.get_channel(data.get('channel_id')) |