aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2017-06-30 18:49:49 -0400
committerRapptz <[email protected]>2017-06-30 18:49:49 -0400
commit25a1d8c3004d061946533fffb901b225c38fdd66 (patch)
tree0fc03d21a1bf3f94e660b65fc530396604be06e1
parentTypo in docstring for TextChannel.delete_messages (diff)
downloaddiscord.py-25a1d8c3004d061946533fffb901b225c38fdd66.tar.xz
discord.py-25a1d8c3004d061946533fffb901b225c38fdd66.zip
Add support for user flags in Profile.
-rw-r--r--discord/client.py5
-rw-r--r--discord/enums.py7
-rw-r--r--discord/user.py30
-rw-r--r--docs/api.rst12
4 files changed, 48 insertions, 6 deletions
diff --git a/discord/client.py b/discord/client.py
index f61f48e8..6304fb4e 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -974,8 +974,9 @@ class Client:
since = data.get('premium_since')
mutual_guilds = list(filter(None, map(transform, data.get('mutual_guilds', []))))
- return Profile(premium=since is not None,
+ user = data['user']
+ return Profile(flags=user.get('flags', 0),
premium_since=utils.parse_time(since),
mutual_guilds=mutual_guilds,
- user=User(data=data['user'], state=state),
+ user=User(data=user, state=state),
connected_accounts=data['connected_accounts'])
diff --git a/discord/enums.py b/discord/enums.py
index 51ceba8e..a2279b67 100644
--- a/discord/enums.py
+++ b/discord/enums.py
@@ -28,7 +28,7 @@ from enum import Enum
__all__ = ['ChannelType', 'MessageType', 'VoiceRegion', 'VerificationLevel',
'ContentFilter', 'Status', 'DefaultAvatar', 'RelationshipType',
- 'AuditLogAction', 'AuditLogActionCategory', ]
+ 'AuditLogAction', 'AuditLogActionCategory', 'UserFlags', ]
class ChannelType(Enum):
text = 0
@@ -204,6 +204,11 @@ class AuditLogAction(Enum):
elif v < 80:
return 'message'
+class UserFlags(Enum):
+ staff = 1
+ partner = 2
+ hypesquad = 4
+
def try_enum(cls, val):
"""A function that tries to turn the value into enum ``cls``.
diff --git a/discord/user.py b/discord/user.py
index 634e821c..cecd1c51 100644
--- a/discord/user.py
+++ b/discord/user.py
@@ -25,7 +25,7 @@ DEALINGS IN THE SOFTWARE.
"""
from .utils import snowflake_time, _bytes_to_base64_data, parse_time
-from .enums import DefaultAvatar, RelationshipType
+from .enums import DefaultAvatar, RelationshipType, UserFlags
from .errors import ClientException
from collections import namedtuple
@@ -33,7 +33,31 @@ from collections import namedtuple
import discord.abc
import asyncio
-Profile = namedtuple('Profile', 'premium user mutual_guilds connected_accounts premium_since')
+class Profile(namedtuple('Profile', 'flags user mutual_guilds connected_accounts premium_since')):
+ __slots__ = ()
+
+ @property
+ def nitro(self):
+ return self.premium_since is not None
+
+ premium = nitro
+
+ def _has_flag(self, o):
+ v = o.value
+ return (self.flags & v) == v
+
+ @property
+ def staff(self):
+ return self._has_flag(UserFlags.staff)
+
+ @property
+ def hypesquad(self):
+ return self._has_flag(UserFlags.hypesquad)
+
+ @property
+ def partner(self):
+ return self._has_flag(UserFlags.partner)
+
_BaseUser = discord.abc.User
@@ -561,7 +585,7 @@ class User(BaseUser, discord.abc.Messageable):
since = data.get('premium_since')
mutual_guilds = list(filter(None, map(transform, data.get('mutual_guilds', []))))
- return Profile(premium=since is not None,
+ return Profile(flags=data['user'].get('flags', 0),
premium_since=parse_time(since),
mutual_guilds=mutual_guilds,
user=self,
diff --git a/docs/api.rst b/docs/api.rst
index 53ce4051..bdddb654 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -596,10 +596,22 @@ Profile
.. attribute:: premium
A boolean indicating if the user has premium (i.e. Discord Nitro).
+ .. attribute:: nitro
+
+ An alias for :attr:`premium`.
.. attribute:: premium_since
A naive UTC datetime indicating how long the user has been premium since.
This could be ``None`` if not applicable.
+ .. attribute:: staff
+
+ A boolean indicating if the user is Discord Staff.
+ .. attribute:: partner
+
+ A boolean indicating if the user is a Discord Partner.
+ .. attribute:: hypesquad
+
+ A boolean indicating if the user is in Discord HypeSquad.
.. attribute:: mutual_guilds
A list of :class:`Guild` that the :class:`ClientUser` shares with this