mirror of
				https://github.com/Rapptz/discord.py.git
				synced 2025-10-31 05:23:03 +00:00 
			
		
		
		
	Add Channel.overwrites_for function to get allow/deny pairs.
This commit is contained in:
		| @@ -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`. | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user