aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/__init__.py6
-rw-r--r--discord/client.py3
-rw-r--r--discord/colour.py187
-rw-r--r--discord/member.py101
-rw-r--r--discord/role.py163
-rw-r--r--discord/server.py77
6 files changed, 295 insertions, 242 deletions
diff --git a/discord/__init__.py b/discord/__init__.py
index 88b20ad4..5abbf0e6 100644
--- a/discord/__init__.py
+++ b/discord/__init__.py
@@ -21,11 +21,13 @@ __build__ = 0x008000
from .client import Client
from .user import User
from .channel import Channel, PrivateChannel
-from .server import Server, Member
+from .server import Server
+from .member import Member
from .message import Message
from .errors import *
from .permissions import Permissions
-from .role import Role, Colour, Color
+from .role import Role
+from .colour import Color, Colour
from .invite import Invite
from . import utils
diff --git a/discord/client.py b/discord/client.py
index 802c542c..33372b1d 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -30,7 +30,8 @@ from . import endpoints
from .errors import InvalidEventName, InvalidDestination, GatewayNotFound
from .user import User
from .channel import Channel, PrivateChannel
-from .server import Server, Member
+from .server import Server
+from .member import Member
from .role import Role, Permissions
from .message import Message
from . import utils
diff --git a/discord/colour.py b/discord/colour.py
new file mode 100644
index 00000000..afa0acab
--- /dev/null
+++ b/discord/colour.py
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+
+"""
+The MIT License (MIT)
+
+Copyright (c) 2015 Rapptz
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+"""
+
+class Colour(object):
+ """Represents a Discord role colour. This class is similar
+ to an (red, green, blue) tuple.
+
+ There is an alias for this called Color.
+
+ Supported operations:
+
+ +-----------+--------------------------------------+
+ | Operation | Description |
+ +===========+======================================+
+ | x == y | Checks if two colours are equal. |
+ +-----------+--------------------------------------+
+ | x != y | Checks if two colours are not equal. |
+ +-----------+--------------------------------------+
+
+ Instance attributes:
+
+ .. attribute:: value
+
+ The raw integer colour value.
+ """
+
+ def __init__(self, value):
+ self.value = value
+
+ def _get_byte(self, byte):
+ return (self.value >> (8 * byte)) & 0xff
+
+ def __eq__(self, other):
+ return self.value == getattr(other, 'value', None)
+
+ def __ne__(self, other):
+ return isinstance(other, Colour) and self.value != other.value
+
+ @property
+ def r(self):
+ """Returns the red component of the colour."""
+ return self._get_byte(2)
+
+ @property
+ def g(self):
+ """Returns the green component of the colour."""
+ return self._get_byte(1)
+
+ @property
+ def b(self):
+ """Returns the blue component of the colour."""
+ return self._get_byte(0)
+
+ def to_tuple(self):
+ """Returns an (r, g, b) tuple representing the colour."""
+ return (self.r, self.g, self.b)
+
+ @classmethod
+ def default(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0."""
+ return cls(0)
+
+ @classmethod
+ def cyan(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x1abc9c."""
+ return cls(0x1abc9c)
+
+ @classmethod
+ def green(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x2ecc71."""
+ return cls(0x2ecc71)
+
+ @classmethod
+ def blue(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x3498db."""
+ return cls(0x3498db)
+
+ @classmethod
+ def purple(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x9b59b6."""
+ return cls(0x9b59b6)
+
+ @classmethod
+ def yellow(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xf1c40f."""
+ return cls(0xf1c40f)
+
+ @classmethod
+ def orange(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xe67e22."""
+ return cls(0xe67e22)
+
+ @classmethod
+ def red(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xe74c3c."""
+ return cls(0xe74c3c)
+
+ @classmethod
+ def grey(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x95a5a6."""
+ return cls(0x95a5a6)
+
+ @classmethod
+ def dark_grey(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x7f8c8d."""
+ return cls(0x7f8c8d)
+
+ @classmethod
+ def navy_blue(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x34495e."""
+ return cls(0x34495e)
+
+ @classmethod
+ def dark_cyan(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x11806a."""
+ return cls(0x11806a)
+
+ @classmethod
+ def dark_green(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x1f8b4c."""
+ return cls(0x1f8b4c)
+
+ @classmethod
+ def dark_blue(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x206694."""
+ return cls(0x206694)
+
+ @classmethod
+ def dark_purple(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x71368a."""
+ return cls(0x71368a)
+
+ @classmethod
+ def strong_orange(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xc27c0e."""
+ return cls(0xc27c0e)
+
+ @classmethod
+ def dark_orange(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xa84300."""
+ return cls(0xa84300)
+
+ @classmethod
+ def dark_red(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x992d22."""
+ return cls(0x992d22)
+
+ @classmethod
+ def dark_grey_blue(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x979c9f."""
+ return cls(0x979c9f)
+
+ @classmethod
+ def light_grey(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0xbcc0c0."""
+ return cls(0xbcc0c0)
+
+ @classmethod
+ def dark_navy_blue(cls):
+ """A factory method that returns a :class:`Colour` with a value of 0x2c3e50."""
+ return cls(0x2c3e50)
+
+
+Color = Colour
diff --git a/discord/member.py b/discord/member.py
new file mode 100644
index 00000000..bd31c67f
--- /dev/null
+++ b/discord/member.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+
+"""
+The MIT License (MIT)
+
+Copyright (c) 2015 Rapptz
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+"""
+
+from .user import User
+from .utils import parse_time
+
+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
+
+ A boolean that specifies if the member is currently deafened by the server.
+ .. attribute:: mute
+
+ A boolean that specifies if the member is currently muted by the server.
+ .. attribute:: self_mute
+
+ A boolean that specifies if the member is currently muted by their own accord.
+ .. attribute:: self_deaf
+
+ A boolean that specifies if the member is currently deafened by their own accord.
+ .. attribute:: is_afk
+
+ A boolean that specifies if the member is currently in the AFK channel in the server.
+ .. attribute:: voice_channel
+
+ A voice :class:`Channel` that the member is currently connected to. None if the member
+ is not currently in a voice channel.
+ .. attribute:: roles
+
+ An array of :class:`Role` that the member belongs to.
+ .. attribute:: joined_at
+
+ A datetime object that specifies the date and time in UTC that the member joined the server for
+ the first time.
+ .. attribute:: status
+
+ A string that denotes the user's status. Can be 'online', 'offline' or 'idle'.
+ .. attribute:: game_id
+
+ The game ID that the user is currently playing. Could be None if no game is being played.
+ .. attribute:: server
+
+ The :class:`Server` that the member belongs to.
+ """
+
+ def __init__(self, deaf, joined_at, user, roles, mute, **kwargs):
+ super(Member, self).__init__(**user)
+ self.deaf = deaf
+ self.mute = mute
+ self.joined_at = parse_time(joined_at)
+ self.roles = roles
+ self.status = 'offline'
+ self.game_id = kwargs.get('game_id', None)
+ self.server = kwargs.get('server', None)
+ self.update_voice_state(mute=mute, deaf=deaf)
+
+ def update_voice_state(self, **kwargs):
+ self.self_mute = kwargs.get('self_mute', False)
+ self.self_deaf = kwargs.get('self_deaf', False)
+ self.is_afk = kwargs.get('suppress', False)
+ self.mute = kwargs.get('mute', False)
+ self.deaf = kwargs.get('deaf', False)
+ old_channel = getattr(self, 'voice_channel', None)
+ self.voice_channel = kwargs.get('voice_channel')
+
+ if old_channel is None and self.voice_channel is not None:
+ # we joined a channel
+ self.voice_channel.voice_members.append(self)
+ elif old_channel is not None and self.voice_channel is None:
+ if self in old_channel.voice_members:
+ # we left a channel
+ old_channel.voice_members.remove(self)
diff --git a/discord/role.py b/discord/role.py
index 490df159..00b38aca 100644
--- a/discord/role.py
+++ b/discord/role.py
@@ -25,168 +25,7 @@ DEALINGS IN THE SOFTWARE.
"""
from .permissions import Permissions
-
-class Colour(object):
- """Represents a Discord role colour. This class is similar
- to an (red, green, blue) tuple.
-
- There is an alias for this called Color.
-
- Supported operations:
-
- +-----------+--------------------------------------+
- | Operation | Description |
- +===========+======================================+
- | x == y | Checks if two colours are equal. |
- +-----------+--------------------------------------+
- | x != y | Checks if two colours are not equal. |
- +-----------+--------------------------------------+
-
- Instance attributes:
-
- .. attribute:: value
-
- The raw integer colour value.
- """
-
- def __init__(self, value):
- self.value = value
-
- def _get_byte(self, byte):
- return (self.value >> (8 * byte)) & 0xff
-
- def __eq__(self, other):
- return self.value == getattr(other, 'value', None)
-
- def __ne__(self, other):
- return isinstance(other, Colour) and self.value != other.value
-
- @property
- def r(self):
- """Returns the red component of the colour."""
- return self._get_byte(2)
-
- @property
- def g(self):
- """Returns the green component of the colour."""
- return self._get_byte(1)
-
- @property
- def b(self):
- """Returns the blue component of the colour."""
- return self._get_byte(0)
-
- def to_tuple(self):
- """Returns an (r, g, b) tuple representing the colour."""
- return (self.r, self.g, self.b)
-
- @classmethod
- def default(cls):
- """A factory method that returns a :class:`Colour` with a value of 0."""
- return cls(0)
-
- @classmethod
- def cyan(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x1abc9c."""
- return cls(0x1abc9c)
-
- @classmethod
- def green(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x2ecc71."""
- return cls(0x2ecc71)
-
- @classmethod
- def blue(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x3498db."""
- return cls(0x3498db)
-
- @classmethod
- def purple(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x9b59b6."""
- return cls(0x9b59b6)
-
- @classmethod
- def yellow(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xf1c40f."""
- return cls(0xf1c40f)
-
- @classmethod
- def orange(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xe67e22."""
- return cls(0xe67e22)
-
- @classmethod
- def red(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xe74c3c."""
- return cls(0xe74c3c)
-
- @classmethod
- def grey(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x95a5a6."""
- return cls(0x95a5a6)
-
- @classmethod
- def dark_grey(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x7f8c8d."""
- return cls(0x7f8c8d)
-
- @classmethod
- def navy_blue(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x34495e."""
- return cls(0x34495e)
-
- @classmethod
- def dark_cyan(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x11806a."""
- return cls(0x11806a)
-
- @classmethod
- def dark_green(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x1f8b4c."""
- return cls(0x1f8b4c)
-
- @classmethod
- def dark_blue(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x206694."""
- return cls(0x206694)
-
- @classmethod
- def dark_purple(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x71368a."""
- return cls(0x71368a)
-
- @classmethod
- def strong_orange(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xc27c0e."""
- return cls(0xc27c0e)
-
- @classmethod
- def dark_orange(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xa84300."""
- return cls(0xa84300)
-
- @classmethod
- def dark_red(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x992d22."""
- return cls(0x992d22)
-
- @classmethod
- def dark_grey_blue(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x979c9f."""
- return cls(0x979c9f)
-
- @classmethod
- def light_grey(cls):
- """A factory method that returns a :class:`Colour` with a value of 0xbcc0c0."""
- return cls(0xbcc0c0)
-
- @classmethod
- def dark_navy_blue(cls):
- """A factory method that returns a :class:`Colour` with a value of 0x2c3e50."""
- return cls(0x2c3e50)
-
-
-Color = Colour
+from .colour import Colour
class Role(object):
"""Represents a Discord role in a :class:`Server`.
diff --git a/discord/server.py b/discord/server.py
index d5809032..804d35d3 100644
--- a/discord/server.py
+++ b/discord/server.py
@@ -24,83 +24,6 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
"""
-from .user import User
-from .utils import parse_time
-
-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
-
- A boolean that specifies if the member is currently deafened by the server.
- .. attribute:: mute
-
- A boolean that specifies if the member is currently muted by the server.
- .. attribute:: self_mute
-
- A boolean that specifies if the member is currently muted by their own accord.
- .. attribute:: self_deaf
-
- A boolean that specifies if the member is currently deafened by their own accord.
- .. attribute:: is_afk
-
- A boolean that specifies if the member is currently in the AFK channel in the server.
- .. attribute:: voice_channel
-
- A voice :class:`Channel` that the member is currently connected to. None if the member
- is not currently in a voice channel.
- .. attribute:: roles
-
- An array of :class:`Role` that the member belongs to.
- .. attribute:: joined_at
-
- A datetime object that specifies the date and time in UTC that the member joined the server for
- the first time.
- .. attribute:: status
-
- A string that denotes the user's status. Can be 'online', 'offline' or 'idle'.
- .. attribute:: game_id
-
- The game ID that the user is currently playing. Could be None if no game is being played.
- .. attribute:: server
-
- The :class:`Server` that the member belongs to.
- """
-
- def __init__(self, deaf, joined_at, user, roles, mute, **kwargs):
- super(Member, self).__init__(**user)
- self.deaf = deaf
- self.mute = mute
- self.joined_at = parse_time(joined_at)
- self.roles = roles
- self.status = 'offline'
- self.game_id = kwargs.get('game_id', None)
- self.server = kwargs.get('server', None)
- self.update_voice_state(mute=mute, deaf=deaf)
-
- def update_voice_state(self, **kwargs):
- self.self_mute = kwargs.get('self_mute', False)
- self.self_deaf = kwargs.get('self_deaf', False)
- self.is_afk = kwargs.get('suppress', False)
- self.mute = kwargs.get('mute', False)
- self.deaf = kwargs.get('deaf', False)
- old_channel = getattr(self, 'voice_channel', None)
- self.voice_channel = kwargs.get('voice_channel')
-
- if old_channel is None and self.voice_channel is not None:
- # we joined a channel
- self.voice_channel.voice_members.append(self)
- elif old_channel is not None and self.voice_channel is None:
- if self in old_channel.voice_members:
- # we left a channel
- old_channel.voice_members.remove(self)
-
-
class Server(object):
"""Represents a Discord server.