aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2015-08-26 07:43:05 -0400
committerRapptz <[email protected]>2015-08-26 07:43:05 -0400
commit108f0a6c45599d783fdb1d991fc1b5af87ca0f47 (patch)
tree5a23a2041bfd9e39e486e330a43ac93dec6d654e
parentPreliminary work on permission parsing. (diff)
downloaddiscord.py-108f0a6c45599d783fdb1d991fc1b5af87ca0f47.tar.xz
discord.py-108f0a6c45599d783fdb1d991fc1b5af87ca0f47.zip
Server members are now their own class that subclass Users.
Roles are also now properly parsed.
-rw-r--r--discord/__init__.py2
-rw-r--r--discord/client.py6
-rw-r--r--discord/server.py57
3 files changed, 59 insertions, 6 deletions
diff --git a/discord/__init__.py b/discord/__init__.py
index 1dc440c4..acdaeae9 100644
--- a/discord/__init__.py
+++ b/discord/__init__.py
@@ -21,7 +21,7 @@ __build__ = 0x002010
from client import Client
from user import User
from channel import Channel, PrivateChannel
-from server import Server
+from server import Server, Member, Permissions, Role
from message import Message
from errors import *
from permissions import Permissions
diff --git a/discord/client.py b/discord/client.py
index 77e43a66..d2a1abe1 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -34,7 +34,7 @@ from sys import platform as sys_platform
from errors import InvalidEventName, InvalidDestination
from user import User
from channel import Channel, PrivateChannel
-from server import Server
+from server import Server, Member, Permissions, Role
from message import Message
def _null_event(*args, **kwargs):
@@ -148,8 +148,8 @@ class Client(object):
guilds = data.get('guilds')
for guild in guilds:
- guild['roles'] = [role.get('name') for role in guild['roles']]
- guild['members'] = [User(**member['user']) for member in guild['members']]
+ guild['roles'] = [Role(**role) for role in guild['roles']]
+ guild['members'] = [Member(**member) for member in guild['members']]
self.servers.append(Server(**guild))
channels = [Channel(server=self.servers[-1], **channel) for channel in guild['channels']]
diff --git a/discord/server.py b/discord/server.py
index ae4d8164..7c796721 100644
--- a/discord/server.py
+++ b/discord/server.py
@@ -25,6 +25,59 @@ DEALINGS IN THE SOFTWARE.
"""
from user import User
+from permissions import Permissions
+import datetime, re
+
+class Role(object):
+ """"Represents a Discord role in a :class:`Server`.
+
+ Instance attributes:
+
+ .. attribute:: id
+
+ The ID for the role.
+ .. attribute:: name
+
+ The name of the role.
+ .. attribute:: permissions
+
+ A :class:`Permissions` that represents the role's permissions.
+ """
+
+ def __init__(self, id, name, permissions):
+ self.id = id
+ self.name = name
+ self.permissions = Permissions(permissions)
+
+class Member(User):
+ """Represents a Discord member to a :class:`Server`.
+
+ This is a subclass of :class:`User` that extends more functionality
+ that server members have such as roles and permissions.
+
+ Instance attributes:
+
+ .. attribute:: deaf
+
+ Specifies if the member is currently deafened by the user.
+ .. attribute:: mute
+
+ Specifies if the member is currently muted by the user.
+ .. attribute:: roles
+
+ An array of :class:`Role` that the member belongs to.
+ .. attribute:: joined_at
+
+ A datetime object that specifies the date and time that the member joined the server for
+ the first time.
+ """
+
+ def __init__(self, deaf, joined_at, user, roles, mute):
+ super(Member, self).__init__(**user)
+ self.deaf = deaf
+ self.mute = mute
+ self.joined_at = datetime.datetime(*map(int, re.split(r'[^\d]', joined_at.replace('+00:00', ''))))
+ self.roles = roles
class Server(object):
"""Represents a Discord server.
@@ -36,7 +89,7 @@ class Server(object):
The server name.
.. attribute:: roles
- An array of role names.
+ An array of :class:`Role` that the server has available.
.. attribute:: region
The region the server belongs on.
@@ -48,7 +101,7 @@ class Server(object):
The channel ID for the AFK channel. None if it doesn't exist.
.. attribute:: members
- An array of :class:`User` that are currently on the server.
+ An array of :class:`Member` that are currently on the server.
.. attribute:: channels
An array of :class:`Channel` that are currently on the server.