Begin working on the rewrite.
This commit is contained in:
@ -26,7 +26,7 @@ DEALINGS IN THE SOFTWARE.
|
||||
import copy
|
||||
from . import utils
|
||||
from .permissions import Permissions, PermissionOverwrite
|
||||
from .enums import ChannelType
|
||||
from .enums import ChannelType, try_enum
|
||||
from collections import namedtuple
|
||||
from .mixins import Hashable
|
||||
from .role import Role
|
||||
@ -54,68 +54,63 @@ class Channel(Hashable):
|
||||
|
||||
Attributes
|
||||
-----------
|
||||
name : str
|
||||
name: str
|
||||
The channel name.
|
||||
server : :class:`Server`
|
||||
server: :class:`Server`
|
||||
The server the channel belongs to.
|
||||
id : str
|
||||
id: str
|
||||
The channel ID.
|
||||
topic : Optional[str]
|
||||
topic: Optional[str]
|
||||
The channel's topic. None if it doesn't exist.
|
||||
is_private : bool
|
||||
is_private: bool
|
||||
``True`` if the channel is a private channel (i.e. PM). ``False`` in this case.
|
||||
position : int
|
||||
position: int
|
||||
The position in the channel list. This is a number that starts at 0. e.g. the
|
||||
top channel is position 0. The position varies depending on being a voice channel
|
||||
or a text channel, so a 0 position voice channel is on top of the voice channel
|
||||
list.
|
||||
type : :class:`ChannelType`
|
||||
type: :class:`ChannelType`
|
||||
The channel type. There is a chance that the type will be ``str`` if
|
||||
the channel type is not within the ones recognised by the enumerator.
|
||||
bitrate : int
|
||||
bitrate: int
|
||||
The channel's preferred audio bitrate in bits per second.
|
||||
voice_members
|
||||
A list of :class:`Members` that are currently inside this voice channel.
|
||||
If :attr:`type` is not :attr:`ChannelType.voice` then this is always an empty array.
|
||||
user_limit : int
|
||||
user_limit: int
|
||||
The channel's limit for number of members that can be in a voice channel.
|
||||
"""
|
||||
|
||||
__slots__ = [ 'voice_members', 'name', 'id', 'server', 'topic', 'position',
|
||||
'is_private', 'type', 'bitrate', 'user_limit',
|
||||
'_permission_overwrites' ]
|
||||
__slots__ = ( 'voice_members', 'name', 'id', 'server', 'topic',
|
||||
'type', 'bitrate', 'user_limit', '_state', 'position',
|
||||
'_permission_overwrites' )
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self._update(**kwargs)
|
||||
def __init__(self, *, state, server, data):
|
||||
self._state = state
|
||||
self._update(server, data)
|
||||
self.voice_members = []
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def _update(self, **kwargs):
|
||||
self.name = kwargs.get('name')
|
||||
self.server = kwargs.get('server')
|
||||
self.id = kwargs.get('id')
|
||||
self.topic = kwargs.get('topic')
|
||||
self.is_private = False
|
||||
self.position = kwargs.get('position')
|
||||
self.bitrate = kwargs.get('bitrate')
|
||||
self.type = kwargs.get('type')
|
||||
self.user_limit = kwargs.get('user_limit')
|
||||
try:
|
||||
self.type = ChannelType(self.type)
|
||||
except:
|
||||
pass
|
||||
|
||||
def _update(self, server, data):
|
||||
self.server = server
|
||||
self.name = data['name']
|
||||
self.id = data['id']
|
||||
self.topic = data.get('topic')
|
||||
self.position = data['position']
|
||||
self.bitrate = data.get('bitrate')
|
||||
self.type = data['type']
|
||||
self.user_limit = data.get('user_limit')
|
||||
self._permission_overwrites = []
|
||||
everyone_index = 0
|
||||
everyone_id = self.server.id
|
||||
|
||||
for index, overridden in enumerate(kwargs.get('permission_overwrites', [])):
|
||||
for index, overridden in enumerate(data.get('permission_overwrites', [])):
|
||||
overridden_id = overridden['id']
|
||||
self._permission_overwrites.append(Overwrites(**overridden))
|
||||
|
||||
if overridden.get('type') == 'member':
|
||||
if overridden['type'] == 'member':
|
||||
continue
|
||||
|
||||
if overridden_id == everyone_id:
|
||||
@ -151,6 +146,10 @@ class Channel(Hashable):
|
||||
"""bool : Indicates if this is the default channel for the :class:`Server` it belongs to."""
|
||||
return self.server.id == self.id
|
||||
|
||||
@property
|
||||
def is_private(self):
|
||||
return False
|
||||
|
||||
@property
|
||||
def mention(self):
|
||||
"""str : The string that allows you to mention the channel."""
|
||||
@ -354,19 +353,20 @@ class PrivateChannel(Hashable):
|
||||
:attr:`ChannelType.group` then this is always ``None``.
|
||||
"""
|
||||
|
||||
__slots__ = ['id', 'recipients', 'type', 'owner', 'icon', 'name', 'me']
|
||||
__slots__ = ['id', 'recipients', 'type', 'owner', 'icon', 'name', 'me', '_state']
|
||||
|
||||
def __init__(self, me, **kwargs):
|
||||
self.recipients = [User(**u) for u in kwargs['recipients']]
|
||||
self.id = kwargs['id']
|
||||
def __init__(self, *, me, state, data):
|
||||
self._state = state
|
||||
self.recipients = [state.try_insert_user(u) for u in data['recipients']]
|
||||
self.id = data['id']
|
||||
self.me = me
|
||||
self.type = ChannelType(kwargs['type'])
|
||||
self._update_group(**kwargs)
|
||||
self.type = ChannelType(data['type'])
|
||||
self._update_group(data)
|
||||
|
||||
def _update_group(self, **kwargs):
|
||||
owner_id = kwargs.get('owner_id')
|
||||
self.icon = kwargs.get('icon')
|
||||
self.name = kwargs.get('name')
|
||||
def _update_group(self, data):
|
||||
owner_id = data.get('owner_id')
|
||||
self.icon = data.get('icon')
|
||||
self.name = data.get('name')
|
||||
self.owner = utils.find(lambda u: u.id == owner_id, self.recipients)
|
||||
|
||||
@property
|
||||
|
Reference in New Issue
Block a user