diff options
| author | Rapptz <[email protected]> | 2016-04-12 13:10:43 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2016-04-12 13:10:43 -0400 |
| commit | 03041bdb0aabbefc820c4702452205698b6c420e (patch) | |
| tree | c65119056fbb01a2f7c8f7f71c5817b5d142c8c9 | |
| parent | User JSON object has 'username' keys not 'name'. (diff) | |
| download | discord.py-03041bdb0aabbefc820c4702452205698b6c420e.tar.xz discord.py-03041bdb0aabbefc820c4702452205698b6c420e.zip | |
Add Channel.overwrites_for function to get allow/deny pairs.
| -rw-r--r-- | discord/channel.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/discord/channel.py b/discord/channel.py index b63a27c8..8353b1ba 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -29,8 +29,11 @@ from .permissions import Permissions from .enums import ChannelType from collections import namedtuple from .mixins import Hashable +from .role import Role +from .member import Member Overwrites = namedtuple('Overwrites', 'id allow deny type') +PermissionOverwrite = namedtuple('PermissionOverwrite', 'allow deny') class Channel(Hashable): """Represents a Discord server channel. @@ -151,6 +154,34 @@ class Channel(Hashable): """Returns the channel's creation time in UTC.""" return utils.snowflake_time(self.id) + def overwrites_for(self, obj): + """Returns a namedtuple that gives you the channel-specific overwrites + for a member or a role. + + The named tuple is a tuple of (allow, deny) :class:`Permissions` + with the appropriately named entries. + + Parameters + ----------- + obj + The :class:`Role` or :class:`Member` or :class:`Object` denoting + whose overwrite to get. + """ + + if isinstance(obj, Member): + predicate = lambda p: p.type == 'member' + elif isinstance(obj, Role): + predicate = lambda p: p.type == 'role' + else: + predicate = lambda p: True + + for overwrite in filter(predicate, self._permission_overwrites): + if overwrite.id == obj.id: + return PermissionOverwrite(allow=Permissions(overwrite.allow), + deny=Permissions(overwrite.deny)) + + return PermissionOverwrite(allow=Permissions.none(), deny=Permissions.none()) + def permissions_for(self, member): """Handles permission resolution for the current :class:`Member`. |