diff --git a/discord/channel.py b/discord/channel.py index 7f8d23eb9..3d0c2481a 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -133,7 +133,7 @@ class Channel(object): # and then the allowed. if member.id == self.server.owner.id: - return Permissions.ALL + return Permissions.all() default = self.server.get_default_role() base = deepcopy(default.permissions) @@ -144,7 +144,7 @@ class Channel(object): # Server-wide Manage Roles -> True for everything if base.can_manage_roles: - base = Permissions.ALL + base = Permissions.all() member_role_ids = set(map(lambda r: r.id, member.roles)) @@ -160,7 +160,8 @@ class Channel(object): if base.can_manage_roles: # This point is essentially Channel-specific Manage Roles. - base.value |= Permissions.ALL_CHANNEL.value + tmp = Permissions.all_channel() + base.value |= tmp.value if self.is_default_channel(): base.can_read_messages = True diff --git a/discord/permissions.py b/discord/permissions.py index 44ecd8537..676f6a5f3 100644 --- a/discord/permissions.py +++ b/discord/permissions.py @@ -80,6 +80,49 @@ class Permissions(object): def __init__(self, permissions=0, **kwargs): self.value = permissions + @classmethod + def none(cls): + """A factory method that creates a :class:`Permission` with all + permissions set to False.""" + return cls(0) + + @classmethod + def all(cls): + """A factory method that creates a :class:`Permission` with all + permissions set to True.""" + return cls(0b00000011111100111111110000111111) + + @classmethod + def all_channel(cls): + """A :class:`Permission` with all channel-specific permissions set to + True and the server-specific ones set to False. The server-specific + permissions are currently: + + - can_manager_server + - can_kick_members + - can_ban_members + """ + return cls(0b00000011111100111111110000011001) + + @classmethod + def general(cls): + """A factory method that creates a :class:`Permission` with all + "General" permissions set to True.""" + return cls(0b00000000000000000000000000111111) + + @classmethod + def text(cls): + """A factory method that creates a :class:`Permission` with all + "Text" permissions set to True.""" + return cls(0b00000000000000111111110000000000) + + @classmethod + def voice(cls): + """A factory method that creates a :class:`Permission` with all + "Voice" permissions set to True.""" + return cls(0b00000011111100000000000000000000) + + def _bit(self, index): return bool((self.value >> index) & 1)