Server members are now their own class that subclass Users.
Roles are also now properly parsed.
This commit is contained in:
		@@ -21,7 +21,7 @@ __build__ = 0x002010
 | 
				
			|||||||
from client import Client
 | 
					from client import Client
 | 
				
			||||||
from user import User
 | 
					from user import User
 | 
				
			||||||
from channel import Channel, PrivateChannel
 | 
					from channel import Channel, PrivateChannel
 | 
				
			||||||
from server import Server
 | 
					from server import Server, Member, Permissions, Role
 | 
				
			||||||
from message import Message
 | 
					from message import Message
 | 
				
			||||||
from errors import *
 | 
					from errors import *
 | 
				
			||||||
from permissions import Permissions
 | 
					from permissions import Permissions
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ from sys import platform as sys_platform
 | 
				
			|||||||
from errors import InvalidEventName, InvalidDestination
 | 
					from errors import InvalidEventName, InvalidDestination
 | 
				
			||||||
from user import User
 | 
					from user import User
 | 
				
			||||||
from channel import Channel, PrivateChannel
 | 
					from channel import Channel, PrivateChannel
 | 
				
			||||||
from server import Server
 | 
					from server import Server, Member, Permissions, Role
 | 
				
			||||||
from message import Message
 | 
					from message import Message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _null_event(*args, **kwargs):
 | 
					def _null_event(*args, **kwargs):
 | 
				
			||||||
@@ -148,8 +148,8 @@ class Client(object):
 | 
				
			|||||||
            guilds = data.get('guilds')
 | 
					            guilds = data.get('guilds')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for guild in guilds:
 | 
					            for guild in guilds:
 | 
				
			||||||
                guild['roles'] = [role.get('name') for role in guild['roles']]
 | 
					                guild['roles'] = [Role(**role) for role in guild['roles']]
 | 
				
			||||||
                guild['members'] = [User(**member['user']) for member in guild['members']]
 | 
					                guild['members'] = [Member(**member) for member in guild['members']]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                self.servers.append(Server(**guild))
 | 
					                self.servers.append(Server(**guild))
 | 
				
			||||||
                channels = [Channel(server=self.servers[-1], **channel) for channel in guild['channels']]
 | 
					                channels = [Channel(server=self.servers[-1], **channel) for channel in guild['channels']]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,59 @@ DEALINGS IN THE SOFTWARE.
 | 
				
			|||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from user import User
 | 
					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):
 | 
					class Server(object):
 | 
				
			||||||
    """Represents a Discord server.
 | 
					    """Represents a Discord server.
 | 
				
			||||||
@@ -36,7 +89,7 @@ class Server(object):
 | 
				
			|||||||
        The server name.
 | 
					        The server name.
 | 
				
			||||||
    .. attribute:: roles
 | 
					    .. attribute:: roles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        An array of role names.
 | 
					        An array of :class:`Role` that the server has available.
 | 
				
			||||||
    .. attribute:: region
 | 
					    .. attribute:: region
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        The region the server belongs on.
 | 
					        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.
 | 
					        The channel ID for the AFK channel. None if it doesn't exist.
 | 
				
			||||||
    .. attribute:: members
 | 
					    .. 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
 | 
					    .. attribute:: channels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        An array of :class:`Channel` that are currently on the server.
 | 
					        An array of :class:`Channel` that are currently on the server.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user