Browse Source

Add on_server_create and on_server_delete events.

pull/3/head
Rapptz 10 years ago
parent
commit
c98a723f06
  1. 68
      discord/client.py
  2. 11
      docs/api.rst

68
discord/client.py

@ -100,6 +100,8 @@ class Client(object):
'on_channel_create': _null_event, 'on_channel_create': _null_event,
'on_member_join': _null_event, 'on_member_join': _null_event,
'on_member_remove': _null_event, 'on_member_remove': _null_event,
'on_server_create': _null_event,
'on_server_delete': _null_event,
} }
# the actual headers for the request... # the actual headers for the request...
@ -114,34 +116,7 @@ class Client(object):
def _get_server(self, guild_id): def _get_server(self, guild_id):
return next((s for s in self.servers if s.id == guild_id), None) return next((s for s in self.servers if s.id == guild_id), None)
def _resolve_mentions(self, content, mentions): def _add_server(self, guild):
if isinstance(mentions, list):
return [user.id for user in mentions]
elif mentions == True:
return re.findall(r'@<(\d+)>', content)
else:
return []
def _invoke_event(self, event_name, *args, **kwargs):
try:
self.events[event_name](*args, **kwargs)
except Exception as e:
pass
def _received_message(self, msg):
response = json.loads(str(msg))
if response.get('op') != 0:
return
self._invoke_event('on_response', response)
event = response.get('t')
data = response.get('d')
if event == 'READY':
self.user = User(**data['user'])
guilds = data.get('guilds')
for guild in guilds:
guild['roles'] = [Role(**role) for role in guild['roles']] guild['roles'] = [Role(**role) for role in guild['roles']]
members = guild['members'] members = guild['members']
for i, member in enumerate(members): for i, member in enumerate(members):
@ -197,6 +172,36 @@ class Client(object):
server.channels = channels server.channels = channels
self.servers.append(server) self.servers.append(server)
def _resolve_mentions(self, content, mentions):
if isinstance(mentions, list):
return [user.id for user in mentions]
elif mentions == True:
return re.findall(r'@<(\d+)>', content)
else:
return []
def _invoke_event(self, event_name, *args, **kwargs):
try:
self.events[event_name](*args, **kwargs)
except Exception as e:
pass
def _received_message(self, msg):
response = json.loads(str(msg))
if response.get('op') != 0:
return
self._invoke_event('on_response', response)
event = response.get('t')
data = response.get('d')
if event == 'READY':
self.user = User(**data['user'])
guilds = data.get('guilds')
for guild in guilds:
self._add_server(guild)
for pm in data.get('private_channels'): for pm in data.get('private_channels'):
self.private_channels.append(PrivateChannel(id=pm['id'], user=User(**pm['recipient']))) self.private_channels.append(PrivateChannel(id=pm['id'], user=User(**pm['recipient'])))
@ -282,6 +287,13 @@ class Client(object):
member = next((m for m in server.members if m.id == user_id), None) member = next((m for m in server.members if m.id == user_id), None)
server.members.remove(member) server.members.remove(member)
self._invoke_event('on_member_remove', member) self._invoke_event('on_member_remove', member)
elif event == 'GUILD_CREATE':
self._add_server(data)
self._invoke_event('on_server_create', self.servers[-1])
elif event == 'GUILD_DELETE':
server = self._get_server(data.get('id'))
self.servers.remove(server)
self._invoke_event('on_server_delete', server)
def _opened(self): def _opened(self):
print('Opened at {}'.format(int(time.time()))) print('Opened at {}'.format(int(time.time())))

11
docs/api.rst

@ -80,6 +80,17 @@ All events are 'sandboxed', in that if an exception is thrown while the event is
:param member: The :class:`Member` that joined or left. :param member: The :class:`Member` that joined or left.
.. function:: on_server_create(server)
on_server_delete(server)
Called when a :class:`Server` is created or deleted.
Note that the server that is created must belong to the :class:`Client` and the server
that got deleted must have been part of the client's participating servers.
:param server: The :class:`Server` that got created or deleted.
Data Classes Data Classes
-------------- --------------

Loading…
Cancel
Save