Make Channel.changed_roles into an on-the-fly property instead.
This commit is contained in:
parent
5016f12079
commit
9a6234961f
@ -23,7 +23,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|||||||
DEALINGS IN THE SOFTWARE.
|
DEALINGS IN THE SOFTWARE.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from copy import deepcopy
|
import copy
|
||||||
from . import utils
|
from . import utils
|
||||||
from .permissions import Permissions
|
from .permissions import Permissions
|
||||||
from .enums import ChannelType
|
from .enums import ChannelType
|
||||||
@ -74,9 +74,6 @@ class Channel(Hashable):
|
|||||||
the channel type is not within the ones recognised by the enumerator.
|
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.
|
The channel's preferred audio bitrate in bits per second.
|
||||||
changed_roles
|
|
||||||
A list of :class:`Roles` that have been overridden from their default
|
|
||||||
values in the :attr:`Server.roles` attribute.
|
|
||||||
voice_members
|
voice_members
|
||||||
A list of :class:`Members` that are currently inside this voice channel.
|
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.
|
If :attr:`type` is not :attr:`ChannelType.voice` then this is always an empty array.
|
||||||
@ -85,8 +82,8 @@ class Channel(Hashable):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = [ 'voice_members', 'name', 'id', 'server', 'topic', 'position',
|
__slots__ = [ 'voice_members', 'name', 'id', 'server', 'topic', 'position',
|
||||||
'is_private', 'type', 'bitrate', 'changed_roles',
|
'is_private', 'type', 'bitrate', 'user_limit',
|
||||||
'user_limit', '_permission_overwrites' ]
|
'_permission_overwrites' ]
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self._update(**kwargs)
|
self._update(**kwargs)
|
||||||
@ -110,7 +107,6 @@ class Channel(Hashable):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.changed_roles = []
|
|
||||||
self._permission_overwrites = []
|
self._permission_overwrites = []
|
||||||
everyone_index = 0
|
everyone_index = 0
|
||||||
everyone_id = self.server.default_role.id
|
everyone_id = self.server.default_role.id
|
||||||
@ -130,22 +126,26 @@ class Channel(Hashable):
|
|||||||
# swap it to be the first one.
|
# swap it to be the first one.
|
||||||
everyone_index = index
|
everyone_index = index
|
||||||
|
|
||||||
# this is pretty inefficient due to the deep nested loops unfortunately
|
|
||||||
role = utils.find(lambda r: r.id == overridden_id, self.server.roles)
|
|
||||||
if role is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
denied = overridden.get('deny', 0)
|
|
||||||
allowed = overridden.get('allow', 0)
|
|
||||||
override = deepcopy(role)
|
|
||||||
override.permissions.handle_overwrite(allowed, denied)
|
|
||||||
self.changed_roles.append(override)
|
|
||||||
|
|
||||||
# do the swap
|
# do the swap
|
||||||
tmp = self._permission_overwrites
|
tmp = self._permission_overwrites
|
||||||
if tmp:
|
if tmp:
|
||||||
tmp[everyone_index], tmp[0] = tmp[0], tmp[everyone_index]
|
tmp[everyone_index], tmp[0] = tmp[0], tmp[everyone_index]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def changed_roles(self):
|
||||||
|
"""Returns a list of :class:`Roles` that have been overridden from
|
||||||
|
their default values in the :attr:`Server.roles` attribute."""
|
||||||
|
ret = []
|
||||||
|
for overwrite in filter(lambda o: o.type == 'role', self._permission_overwrites):
|
||||||
|
role = utils.get(self.server.roles, id=overwrite.id)
|
||||||
|
if role is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
role = copy.copy(role)
|
||||||
|
role.permissions.handle_overwrite(overwrite.allow, overwrite.deny)
|
||||||
|
ret.append(role)
|
||||||
|
return ret
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_default(self):
|
def is_default(self):
|
||||||
"""bool : Indicates if this is the default channel for the :class:`Server` it belongs to."""
|
"""bool : Indicates if this is the default channel for the :class:`Server` it belongs to."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user