diff options
| author | Rapptz <[email protected]> | 2015-11-24 21:11:53 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2015-11-24 21:11:53 -0500 |
| commit | 7f94f75223d5cb3de0e7a9bc935680e5c0213eb9 (patch) | |
| tree | c4444eb550e331bd5c2a0352477ba44be4e5af89 /discord | |
| parent | Merge send_raw_file and send_file (diff) | |
| download | discord.py-7f94f75223d5cb3de0e7a9bc935680e5c0213eb9.tar.xz discord.py-7f94f75223d5cb3de0e7a9bc935680e5c0213eb9.zip | |
Handle TYPING_START event.
Diffstat (limited to 'discord')
| -rw-r--r-- | discord/client.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/discord/client.py b/discord/client.py index abff50f9..005837d2 100644 --- a/discord/client.py +++ b/discord/client.py @@ -47,7 +47,7 @@ from ws4py.client import WebSocketBaseClient import sys import logging import itertools - +import datetime log = logging.getLogger(__name__) request_logging_format = '{response.request.method} {response.url} has returned {response.status_code}' @@ -131,7 +131,7 @@ class WebSocket(WebSocketBaseClient): 'CHANNEL_DELETE', 'CHANNEL_UPDATE', 'CHANNEL_CREATE', 'GUILD_MEMBER_ADD', 'GUILD_MEMBER_REMOVE', 'GUILD_MEMBER_UPDATE', 'GUILD_CREATE', 'GUILD_DELETE', - 'GUILD_ROLE_CREATE', 'GUILD_ROLE_DELETE', + 'GUILD_ROLE_CREATE', 'GUILD_ROLE_DELETE', 'TYPING_START', 'GUILD_ROLE_UPDATE', 'VOICE_STATE_UPDATE'): self.dispatch('socket_update', event, data) @@ -404,6 +404,26 @@ class ConnectionState(object): updated_member = self._update_voice_state(server, data) self.dispatch('voice_state_update', updated_member) + def handle_typing_start(self, data): + channel = self.get_channel(data.get('channel_id')) + if channel is not None: + member = None + user_id = data.get('user_id') + if not getattr(channel, 'is_private', True): + members = channel.server.members + member = utils.find(lambda m: m.id == user_id, members) + else: + # At the moment we can make the assumption that if we are + # in a private channel then the user belongs to one of our + # already existing server member lists. + # This might change when we get friend lists. + gen = (m for s in self.servers for m in s.members) + member = utils.find(lambda m: m.id == user_id, gen) + + if member is not None: + timestamp = datetime.datetime.utcfromtimestamp(data.get('timestamp')) + self.dispatch('typing', channel, member, timestamp) + def get_channel(self, id): if id is None: return None |