Server members are now their own class that subclass Users.

Roles are also now properly parsed.
This commit is contained in:
Rapptz 2015-08-26 07:43:05 -04:00
parent bcaf33e304
commit 108f0a6c45
3 changed files with 59 additions and 6 deletions

View File

@ -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

View File

@ -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']]

View File

@ -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.