Make Channel.changed_roles into an on-the-fly property instead.
This commit is contained in:
		@@ -23,7 +23,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
DEALINGS IN THE SOFTWARE.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from copy import deepcopy
 | 
			
		||||
import copy
 | 
			
		||||
from . import utils
 | 
			
		||||
from .permissions import Permissions
 | 
			
		||||
from .enums import ChannelType
 | 
			
		||||
@@ -74,9 +74,6 @@ class Channel(Hashable):
 | 
			
		||||
        the channel type is not within the ones recognised by the enumerator.
 | 
			
		||||
    bitrate : int
 | 
			
		||||
        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
 | 
			
		||||
        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.
 | 
			
		||||
@@ -85,8 +82,8 @@ class Channel(Hashable):
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    __slots__ = [ 'voice_members', 'name', 'id', 'server', 'topic', 'position',
 | 
			
		||||
                  'is_private', 'type', 'bitrate', 'changed_roles',
 | 
			
		||||
                  'user_limit', '_permission_overwrites' ]
 | 
			
		||||
                  'is_private', 'type', 'bitrate', 'user_limit',
 | 
			
		||||
                  '_permission_overwrites' ]
 | 
			
		||||
 | 
			
		||||
    def __init__(self, **kwargs):
 | 
			
		||||
        self._update(**kwargs)
 | 
			
		||||
@@ -110,7 +107,6 @@ class Channel(Hashable):
 | 
			
		||||
        except:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
        self.changed_roles = []
 | 
			
		||||
        self._permission_overwrites = []
 | 
			
		||||
        everyone_index = 0
 | 
			
		||||
        everyone_id = self.server.default_role.id
 | 
			
		||||
@@ -130,22 +126,26 @@ class Channel(Hashable):
 | 
			
		||||
                # swap it to be the first one.
 | 
			
		||||
                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
 | 
			
		||||
        tmp = self._permission_overwrites
 | 
			
		||||
        if tmp:
 | 
			
		||||
            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
 | 
			
		||||
    def is_default(self):
 | 
			
		||||
        """bool : Indicates if this is the default channel for the :class:`Server` it belongs to."""
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user