diff options
| author | Rapptz <[email protected]> | 2016-04-29 05:48:48 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2016-05-01 20:54:13 -0400 |
| commit | d9c780b8a8d479507cb517076c39d2020ea761a0 (patch) | |
| tree | e57d0382a248fe9aaa7564cff6bad93c65de21e2 /discord/state.py | |
| parent | Fix typo in Message.role_mentions documentation. (diff) | |
| download | discord.py-d9c780b8a8d479507cb517076c39d2020ea761a0.tar.xz discord.py-d9c780b8a8d479507cb517076c39d2020ea761a0.zip | |
Working multi-server voice support.
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 21 |
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) |