aboutsummaryrefslogtreecommitdiff
path: root/discord/state.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-04-29 05:48:48 -0400
committerRapptz <[email protected]>2016-05-01 20:54:13 -0400
commitd9c780b8a8d479507cb517076c39d2020ea761a0 (patch)
treee57d0382a248fe9aaa7564cff6bad93c65de21e2 /discord/state.py
parentFix typo in Message.role_mentions documentation. (diff)
downloaddiscord.py-d9c780b8a8d479507cb517076c39d2020ea761a0.tar.xz
discord.py-d9c780b8a8d479507cb517076c39d2020ea761a0.zip
Working multi-server voice support.
Diffstat (limited to 'discord/state.py')
-rw-r--r--discord/state.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/discord/state.py b/discord/state.py
index 64be587f..8209dbfd 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -62,6 +62,7 @@ class ConnectionState:
self.sequence = None
self.session_id = None
self._servers = {}
+ self._voice_clients = {}
self._private_channels = {}
# extra dict to look up private channels by user id
self._private_channels_by_user = {}
@@ -94,6 +95,19 @@ class ConnectionState:
del self._listeners[index]
@property
+ def voice_clients(self):
+ return self._voice_clients.values()
+
+ def _get_voice_client(self, guild_id):
+ return self._voice_clients.get(guild_id)
+
+ def _add_voice_client(self, guild_id, voice):
+ self._voice_clients[guild_id] = voice
+
+ def _remove_voice_client(self, guild_id):
+ self._voice_clients.pop(guild_id, None)
+
+ @property
def servers(self):
return self._servers.values()
@@ -130,6 +144,7 @@ class ConnectionState:
def _add_server_from_data(self, guild):
server = Server(**guild)
Server.me = property(lambda s: s.get_member(self.user.id))
+ Server.voice_client = property(lambda s: self._get_voice_client(s.id))
self._add_server(server)
return server
@@ -489,7 +504,13 @@ class ConnectionState:
def parse_voice_state_update(self, data):
server = self._get_server(data.get('guild_id'))
+ user_id = data.get('user_id')
if server is not None:
+ if user_id == self.user.id:
+ voice = self._get_voice_client(server.id)
+ if voice is not None:
+ voice.channel = server.get_channel(data.get('channel_id'))
+
updated_members = server._update_voice_state(data)
self.dispatch('voice_state_update', *updated_members)