aboutsummaryrefslogtreecommitdiff
path: root/discord/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/client.py')
-rw-r--r--discord/client.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/discord/client.py b/discord/client.py
index 383ab54d..2a04bb28 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -115,7 +115,7 @@ class WebSocket(WebSocketBaseClient):
'GUILD_MEMBER_ADD', 'GUILD_MEMBER_REMOVE',
'GUILD_MEMBER_UPDATE', 'GUILD_CREATE', 'GUILD_DELETE',
'GUILD_ROLE_CREATE', 'GUILD_ROLE_DELETE',
- 'GUILD_ROLE_UPDATE'):
+ 'GUILD_ROLE_UPDATE', 'VOICE_STATE_UPDATE'):
self.dispatch('socket_update', event, data)
else:
@@ -137,6 +137,15 @@ class ConnectionState(object):
def _get_server(self, guild_id):
return utils.find(lambda g: g.id == guild_id, self.servers)
+ def _update_voice_state(self, server, data):
+ user_id = data.get('user_id')
+ member = utils.find(lambda m: m.id == user_id, server.members)
+ if member is not None:
+ ch_id = data.get('channel_id')
+ channel = utils.find(lambda c: c.id == ch_id, server.channels)
+ member.update_voice_state(voice_channel=channel, **data)
+ return member
+
def _add_server(self, guild):
guild['roles'] = [Role(**role) for role in guild['roles']]
members = guild['members']
@@ -170,6 +179,8 @@ class ConnectionState(object):
channels = [Channel(server=server, **channel)
for channel in guild['channels']]
server.channels = channels
+ for obj in guild.get('voice_states', []):
+ self._update_voice_state(server, obj)
self.servers.append(server)
def handle_ready(self, data):
@@ -332,6 +343,12 @@ class ConnectionState(object):
role.update(**data['role'])
self.dispatch('server_role_update', role)
+ def handle_voice_state_update(self, data):
+ server = self._get_server(data.get('guild_id'))
+ if server is not None:
+ updated_member = self._update_voice_state(server, data)
+ self.dispatch('voice_state_update', updated_member)
+
def get_channel(self, id):
if id is None:
return None