aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2015-12-17 18:22:16 -0500
committerRapptz <[email protected]>2015-12-17 18:22:16 -0500
commit9075d46efdc9d1b430558d7d4d67816a26d04c28 (patch)
tree9cfe07e2f064e80ec8bae2e9083dc2737879dcce
parentAdd way to delete messages after a user is banned. (diff)
downloaddiscord.py-9075d46efdc9d1b430558d7d4d67816a26d04c28.tar.xz
discord.py-9075d46efdc9d1b430558d7d4d67816a26d04c28.zip
Add on_member_ban and on_member_unban events.
Fixes #58.
-rw-r--r--discord/client.py3
-rw-r--r--discord/state.py20
-rw-r--r--docs/api.rst15
3 files changed, 37 insertions, 1 deletions
diff --git a/discord/client.py b/discord/client.py
index 9483c5f9..9e5f3c64 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -344,7 +344,8 @@ class Client:
'GUILD_MEMBER_ADD', 'GUILD_MEMBER_REMOVE', 'GUILD_UPDATE'
'GUILD_MEMBER_UPDATE', 'GUILD_CREATE', 'GUILD_DELETE',
'GUILD_ROLE_CREATE', 'GUILD_ROLE_DELETE', 'TYPING_START',
- 'GUILD_ROLE_UPDATE', 'VOICE_STATE_UPDATE'):
+ 'GUILD_ROLE_UPDATE', 'VOICE_STATE_UPDATE',
+ 'GUILD_BAN_ADD', 'GUILD_BAN_REMOVE'):
parser = 'parse_' + event.lower()
getattr(self.connection, parser)(data)
else:
diff --git a/discord/state.py b/discord/state.py
index a200fc83..a4ba1526 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -251,6 +251,26 @@ class ConnectionState:
else:
self.dispatch('server_remove', server)
+ def parse_guild_ban_add(self, data):
+ # we make the assumption that GUILD_BAN_ADD is done
+ # before GUILD_MEMBER_REMOVE is called
+ # hence we don't remove it from cache or do anything
+ # strange with it, the main purpose of this event
+ # is mainly to dispatch to another event worth listening to for logging
+ server = self._get_server(data.get('guild_id'))
+ if server is not None:
+ user_id = data.get('user', {}).get('id')
+ member = utils.get(server.members, id=user_id)
+ if member is not None:
+ self.dispatch('member_ban', member)
+
+ def parse_guild_ban_remove(self, data):
+ server = self._get_server(data.get('guild_id'))
+ if server is not None:
+ if 'user' in data:
+ user = User(**data['user'])
+ self.dispatch('member_unban', server, user)
+
def parse_guild_role_create(self, data):
server = self._get_server(data.get('guild_id'))
role_data = data.get('role', {})
diff --git a/docs/api.rst b/docs/api.rst
index 4f7b0d92..62ea915d 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -319,6 +319,21 @@ to handle it, which defaults to print a traceback and ignore the exception.
:param before: The :class:`Member` whose voice state changed prior to the changes.
:param after: The :class:`Member` whose voice state changed after the changes.
+.. function:: on_member_ban(member)
+
+ Called when a :class:`Member` gets banned from a :class:`Server`.
+
+ You can access the server that the member got banned from via :attr:`Member.server`.
+
+ :param member: The member that got banned.
+
+.. function:: on_member_unban(server, user)
+
+ Called when a :class:`User` gets unbanned from a :class:`Server`.
+
+ :param server: The server the user got unbanned from.
+ :param user: The user that got unbanned.
+
.. function:: on_typing(channel, user, when)
Called when someone begins typing a message.