Make Roles totally ordered.
This also fixes a bug with Member.top_role that chose the wrong role should they have the same position.
This commit is contained in:
		@@ -34,17 +34,25 @@ class Role(Hashable):
 | 
			
		||||
 | 
			
		||||
    Supported Operations:
 | 
			
		||||
 | 
			
		||||
    +-----------+------------------------------------+
 | 
			
		||||
    | Operation |            Description             |
 | 
			
		||||
    +===========+====================================+
 | 
			
		||||
    | x == y    | Checks if two roles are equal.     |
 | 
			
		||||
    +-----------+------------------------------------+
 | 
			
		||||
    | x != y    | Checks if two roles are not equal. |
 | 
			
		||||
    +-----------+------------------------------------+
 | 
			
		||||
    | hash(x)   | Return the role's hash.            |
 | 
			
		||||
    +-----------+------------------------------------+
 | 
			
		||||
    | str(x)    | Returns the role's name.           |
 | 
			
		||||
    +-----------+------------------------------------+
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | Operation |                           Description                            |
 | 
			
		||||
    +===========+==================================================================+
 | 
			
		||||
    | x == y    | Checks if two roles are equal.                                   |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | x != y    | Checks if two roles are not equal.                               |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | x > y     | Checks if a role is higher than another in the hierarchy.        |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | x < y     | Checks if a role is lower than another in the hierarchy.         |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | x >= y    | Checks if a role is higher or equal to another in the hierarchy. |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | x <= y    | Checks if a role is lower or equal to another in the hierarchy.  |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | hash(x)   | Return the role's hash.                                          |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
    | str(x)    | Returns the role's name.                                         |
 | 
			
		||||
    +-----------+------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
    Attributes
 | 
			
		||||
    ----------
 | 
			
		||||
@@ -80,6 +88,36 @@ class Role(Hashable):
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    def __lt__(self, other):
 | 
			
		||||
        if not isinstance(other, Role) or  not isinstance(self, Role):
 | 
			
		||||
            return NotImplemented
 | 
			
		||||
 | 
			
		||||
        if self.server != other.server:
 | 
			
		||||
            raise RuntimeError('cannot compare roles from two different servers.')
 | 
			
		||||
 | 
			
		||||
        if self.position < other.position:
 | 
			
		||||
            return True
 | 
			
		||||
 | 
			
		||||
        if self.position == other.position:
 | 
			
		||||
            return self.id > other.id
 | 
			
		||||
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    def __le__(self, other):
 | 
			
		||||
        r = Role.__lt__(other, self)
 | 
			
		||||
        if r is NotImplemented:
 | 
			
		||||
            return NotImplemented
 | 
			
		||||
        return not r
 | 
			
		||||
 | 
			
		||||
    def __gt__(self, other):
 | 
			
		||||
        return Role.__lt__(other, self)
 | 
			
		||||
 | 
			
		||||
    def __ge__(self, other):
 | 
			
		||||
        r = Role.__lt__(self, other)
 | 
			
		||||
        if r is NotImplemented:
 | 
			
		||||
            return NotImplemented
 | 
			
		||||
        return not r
 | 
			
		||||
 | 
			
		||||
    def _update(self, **kwargs):
 | 
			
		||||
        self.id = kwargs.get('id')
 | 
			
		||||
        self.name = kwargs.get('name')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user