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

View File

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

View File

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