diff options
| author | Rapptz <[email protected]> | 2015-12-17 18:22:16 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2015-12-17 18:22:16 -0500 |
| commit | 9075d46efdc9d1b430558d7d4d67816a26d04c28 (patch) | |
| tree | 9cfe07e2f064e80ec8bae2e9083dc2737879dcce | |
| parent | Add way to delete messages after a user is banned. (diff) | |
| download | discord.py-9075d46efdc9d1b430558d7d4d67816a26d04c28.tar.xz discord.py-9075d46efdc9d1b430558d7d4d67816a26d04c28.zip | |
Add on_member_ban and on_member_unban events.
Fixes #58.
| -rw-r--r-- | discord/client.py | 3 | ||||
| -rw-r--r-- | discord/state.py | 20 | ||||
| -rw-r--r-- | docs/api.rst | 15 |
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. |