aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/channel.py7
-rw-r--r--discord/permissions.py43
2 files changed, 47 insertions, 3 deletions
diff --git a/discord/channel.py b/discord/channel.py
index 7f8d23eb..3d0c2481 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 44ecd853..676f6a5f 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)