aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-09-21 04:50:22 -0400
committerRapptz <[email protected]>2016-09-21 04:50:22 -0400
commit625ed18cff8ab62e78b1fd47a4d48233c3f41ca1 (patch)
tree3529a6e136c24e522045d8ad274744815aef305a
parentAdd Server.role_hierarchy to get the current role hierarchy. (diff)
downloaddiscord.py-625ed18cff8ab62e78b1fd47a4d48233c3f41ca1.tar.xz
discord.py-625ed18cff8ab62e78b1fd47a4d48233c3f41ca1.zip
Add Member.server_permissions to calculate server permissions.
-rw-r--r--discord/member.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/discord/member.py b/discord/member.py
index eaf70db8..a0c34374 100644
--- a/discord/member.py
+++ b/discord/member.py
@@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE.
from .user import User
from .game import Game
+from .permissions import Permissions
from . import utils
from .enums import Status, ChannelType
from .colour import Colour
@@ -200,3 +201,29 @@ class Member(User):
roles = sorted(self.roles, reverse=True)
return roles[0]
return None
+
+ @property
+ def server_permissions(self):
+ """Returns the member's server permissions.
+
+ This only takes into consideration the server permissions
+ and not most of the implied permissions or any of the
+ channel permission overwrites. For 100% accurate permission
+ calculation, please use either :meth;`permissions_in` or
+ :meth:`Channel.permissions_for`.
+
+ This does take into consideration server ownership and the
+ administrator implication.
+ """
+
+ if self.server.owner == self:
+ return Permissions.all()
+
+ base = Permissions.none()
+ for r in self.roles:
+ base.value |= r.permissions.value
+
+ if base.administrator:
+ return Permissions.all()
+
+ return base