aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/channel.py31
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`.