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:
parent
09e77e548a
commit
13f85b3292
@ -197,6 +197,6 @@ class Member(User):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if self.roles:
|
if self.roles:
|
||||||
roles = sorted(self.roles, key=lambda r: r.position, reverse=True)
|
roles = sorted(self.roles, reverse=True)
|
||||||
return roles[0]
|
return roles[0]
|
||||||
return None
|
return None
|
||||||
|
@ -34,17 +34,25 @@ class Role(Hashable):
|
|||||||
|
|
||||||
Supported Operations:
|
Supported Operations:
|
||||||
|
|
||||||
+-----------+------------------------------------+
|
+-----------+------------------------------------------------------------------+
|
||||||
| Operation | Description |
|
| Operation | Description |
|
||||||
+===========+====================================+
|
+===========+==================================================================+
|
||||||
| x == y | Checks if two roles are equal. |
|
| x == y | Checks if two roles are equal. |
|
||||||
+-----------+------------------------------------+
|
+-----------+------------------------------------------------------------------+
|
||||||
| x != y | Checks if two roles are not equal. |
|
| x != y | Checks if two roles are not equal. |
|
||||||
+-----------+------------------------------------+
|
+-----------+------------------------------------------------------------------+
|
||||||
| hash(x) | Return the role's hash. |
|
| x > y | Checks if a role is higher than another in the hierarchy. |
|
||||||
+-----------+------------------------------------+
|
+-----------+------------------------------------------------------------------+
|
||||||
| str(x) | Returns the role's name. |
|
| 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
|
Attributes
|
||||||
----------
|
----------
|
||||||
@ -80,6 +88,36 @@ class Role(Hashable):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
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):
|
def _update(self, **kwargs):
|
||||||
self.id = kwargs.get('id')
|
self.id = kwargs.get('id')
|
||||||
self.name = kwargs.get('name')
|
self.name = kwargs.get('name')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user