Browse Source

Add Channel.overwrites_for function to get allow/deny pairs.

pull/156/merge
Rapptz 9 years ago
parent
commit
03041bdb0a
  1. 31
      discord/channel.py

31
discord/channel.py

@ -29,8 +29,11 @@ from .permissions import Permissions
from .enums import ChannelType from .enums import ChannelType
from collections import namedtuple from collections import namedtuple
from .mixins import Hashable from .mixins import Hashable
from .role import Role
from .member import Member
Overwrites = namedtuple('Overwrites', 'id allow deny type') Overwrites = namedtuple('Overwrites', 'id allow deny type')
PermissionOverwrite = namedtuple('PermissionOverwrite', 'allow deny')
class Channel(Hashable): class Channel(Hashable):
"""Represents a Discord server channel. """Represents a Discord server channel.
@ -151,6 +154,34 @@ class Channel(Hashable):
"""Returns the channel's creation time in UTC.""" """Returns the channel's creation time in UTC."""
return utils.snowflake_time(self.id) 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): def permissions_for(self, member):
"""Handles permission resolution for the current :class:`Member`. """Handles permission resolution for the current :class:`Member`.

Loading…
Cancel
Save