All update related events now pass in the previous state.

This commit is contained in:
Rapptz
2015-12-17 06:05:35 -05:00
parent 78e95ef755
commit 49d78c69c7
3 changed files with 23 additions and 13 deletions

View File

@ -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')

View File

@ -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'))