Maintain order in role related functions.
This commit is contained in:
parent
7765580a14
commit
c69a991e46
@ -2021,11 +2021,11 @@ class Client:
|
|||||||
yield from response.release()
|
yield from response.release()
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def _replace_roles(self, member, *roles):
|
def _replace_roles(self, member, roles):
|
||||||
url = '{0}/{1.server.id}/members/{1.id}'.format(endpoints.SERVERS, member)
|
url = '{0}/{1.server.id}/members/{1.id}'.format(endpoints.SERVERS, member)
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
'roles': list(roles)
|
'roles': roles
|
||||||
}
|
}
|
||||||
|
|
||||||
r = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
|
r = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
|
||||||
@ -2059,8 +2059,8 @@ class Client:
|
|||||||
Adding roles failed.
|
Adding roles failed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
new_roles = {role.id for role in itertools.chain(member.roles, roles)}
|
new_roles = utils._unique(itertools.chain(member.roles, roles))
|
||||||
yield from self._replace_roles(member, *new_roles)
|
yield from self._replace_roles(member, new_roles)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def remove_roles(self, member, *roles):
|
def remove_roles(self, member, *roles):
|
||||||
@ -2086,9 +2086,16 @@ class Client:
|
|||||||
HTTPException
|
HTTPException
|
||||||
Removing roles failed.
|
Removing roles failed.
|
||||||
"""
|
"""
|
||||||
new_roles = {role.id for role in member.roles}
|
new_roles = [x.id for x in member.roles]
|
||||||
new_roles = new_roles.difference(role.id for role in roles)
|
remove = []
|
||||||
yield from self._replace_roles(member, *new_roles)
|
for index, role in enumerate(roles):
|
||||||
|
if role.id in new_roles:
|
||||||
|
remove.append(index)
|
||||||
|
|
||||||
|
for index in reversed(remove):
|
||||||
|
del new_roles[index]
|
||||||
|
|
||||||
|
yield from self._replace_roles(member, new_roles)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def replace_roles(self, member, *roles):
|
def replace_roles(self, member, *roles):
|
||||||
@ -2120,8 +2127,8 @@ class Client:
|
|||||||
Removing roles failed.
|
Removing roles failed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
new_roles = {role.id for role in roles}
|
new_roles = utils._unique(roles)
|
||||||
yield from self._replace_roles(member, *new_roles)
|
yield from self._replace_roles(member, new_roles)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def create_role(self, server, **fields):
|
def create_role(self, server, **fields):
|
||||||
|
@ -137,6 +137,11 @@ def get(iterable, **attrs):
|
|||||||
return find(predicate, iterable)
|
return find(predicate, iterable)
|
||||||
|
|
||||||
|
|
||||||
|
def _unique(iterable):
|
||||||
|
seen = set()
|
||||||
|
adder = seen.add
|
||||||
|
return [x for x in iterable if not (x in seen or adder(x))]
|
||||||
|
|
||||||
def _null_event(*args, **kwargs):
|
def _null_event(*args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user