mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-05-16 18:59:09 +00:00
Add Client.add_roles and Client.remove_roles
This commit is contained in:
parent
9ab1d041d4
commit
6bb6a0a0a7
@ -41,6 +41,8 @@ import threading
|
|||||||
from ws4py.client import WebSocketBaseClient
|
from ws4py.client import WebSocketBaseClient
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
|
import itertools
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
request_logging_format = '{name}: {response.request.method} {response.url} has returned {response.status_code}'
|
request_logging_format = '{name}: {response.request.method} {response.url} has returned {response.status_code}'
|
||||||
@ -1079,6 +1081,63 @@ class Client(object):
|
|||||||
log.debug(request_logging_format.format(response=response, name='delete_role'))
|
log.debug(request_logging_format.format(response=response, name='delete_role'))
|
||||||
return is_response_successful(response)
|
return is_response_successful(response)
|
||||||
|
|
||||||
|
def add_roles(self, member, *roles):
|
||||||
|
"""Gives the specified :class:`Member` a number of :class:`Role`s.
|
||||||
|
|
||||||
|
You must have the proper permissions to use this function.
|
||||||
|
|
||||||
|
:param member: The :class:`Member` to give roles to.
|
||||||
|
:param roles: The :class:`Role`s to give the member.
|
||||||
|
:return: ``True`` if the operation was successful, ``False`` otherwise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
url = '{0}/{1.server.id}/members/{1.id}'.format(endpoints.SERVERS, member)
|
||||||
|
new_roles = [role.id for role in itertools.chain(member.roles, roles)]
|
||||||
|
payload = {
|
||||||
|
'roles': new_roles
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.patch(url, headers=self.headers, json=payload)
|
||||||
|
log.debug(request_logging_format.format(response=response, name='add_roles'))
|
||||||
|
if is_response_successful(response):
|
||||||
|
member.roles = list(itertools.chain(member.roles, roles))
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def remove_roles(self, member, *roles):
|
||||||
|
"""Removes the :class:`Role`s from the :class:`Member`.
|
||||||
|
|
||||||
|
You must have the proper permissions to use this function.
|
||||||
|
|
||||||
|
:param member: The :class:`Member` to remove roles from.
|
||||||
|
:param roles: The :class:`Role`s to remove from the member.
|
||||||
|
:return: ``True`` if the operation was successful, ``False`` otherwise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
url = '{0}/{1.server.id}/members/{1.id}'.format(endpoints.SERVERS, member)
|
||||||
|
|
||||||
|
new_roles = [role.id for role in member.roles]
|
||||||
|
for role in roles:
|
||||||
|
if role.id in new_roles:
|
||||||
|
new_roles.remove(role.id)
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
'roles': new_roles
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.patch(url, headers=self.headers, json=payload)
|
||||||
|
log.debug(request_logging_format.format(response=response, name='remove_roles'))
|
||||||
|
if is_response_successful(response):
|
||||||
|
member.roles = []
|
||||||
|
for role in member.server.roles:
|
||||||
|
if role.id in new_roles:
|
||||||
|
member.roles.append(role)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def create_role(self, server, **fields):
|
def create_role(self, server, **fields):
|
||||||
"""Creates a :class:`Role`.
|
"""Creates a :class:`Role`.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user