From c7946606f453feea7b52f2d68ab5b5c45271ef5c Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sat, 17 Dec 2016 14:00:34 -0500 Subject: [PATCH] Add Channel.overwrites to get a channel's permission overwrites. Fixes #414. --- discord/channel.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/discord/channel.py b/discord/channel.py index 54d90d444..95aaaea80 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -191,6 +191,34 @@ class Channel(Hashable): return PermissionOverwrite() + @property + def overwrites(self): + """Returns all of the channel's overwrites. + + This is returned as a list of two-element tuples containing the target, + which can be either a :class:`Role` or a :class:`Member` and the overwrite + as the second element as a :class:`PermissionOverwrite`. + + Returns + -------- + List[Tuple[Union[:class:`Role`, :class:`Member`], :class:`PermissionOverwrite`]]: + The channel's permission overwrites. + """ + ret = [] + for ow in self._permission_overwrites: + allow = Permissions(ow.allow) + deny = Permissions(ow.deny) + overwrite = PermissionOverwrite.from_pair(allow, deny) + + if ow.type == 'role': + # accidentally quadratic + target = utils.find(lambda r: r.id == ow.id, self.server.roles) + elif ow.type == 'member': + target = self.server.get_member(ow.id) + + ret.append((target, overwrite)) + return ret + def permissions_for(self, member): """Handles permission resolution for the current :class:`Member`.