Maintain order in role related functions.
This commit is contained in:
		@@ -2021,11 +2021,11 @@ class Client:
 | 
			
		||||
        yield from response.release()
 | 
			
		||||
 | 
			
		||||
    @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)
 | 
			
		||||
 | 
			
		||||
        payload = {
 | 
			
		||||
            'roles': list(roles)
 | 
			
		||||
            'roles': roles
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        new_roles = {role.id for role in itertools.chain(member.roles, roles)}
 | 
			
		||||
        yield from self._replace_roles(member, *new_roles)
 | 
			
		||||
        new_roles = utils._unique(itertools.chain(member.roles, roles))
 | 
			
		||||
        yield from self._replace_roles(member, new_roles)
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def remove_roles(self, member, *roles):
 | 
			
		||||
@@ -2086,9 +2086,16 @@ class Client:
 | 
			
		||||
        HTTPException
 | 
			
		||||
            Removing roles failed.
 | 
			
		||||
        """
 | 
			
		||||
        new_roles = {role.id for role in member.roles}
 | 
			
		||||
        new_roles = new_roles.difference(role.id for role in roles)
 | 
			
		||||
        yield from self._replace_roles(member, *new_roles)
 | 
			
		||||
        new_roles = [x.id for x in member.roles]
 | 
			
		||||
        remove = []
 | 
			
		||||
        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
 | 
			
		||||
    def replace_roles(self, member, *roles):
 | 
			
		||||
@@ -2120,8 +2127,8 @@ class Client:
 | 
			
		||||
            Removing roles failed.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        new_roles = {role.id for role in roles}
 | 
			
		||||
        yield from self._replace_roles(member, *new_roles)
 | 
			
		||||
        new_roles = utils._unique(roles)
 | 
			
		||||
        yield from self._replace_roles(member, new_roles)
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def create_role(self, server, **fields):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user