mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-05-12 16:59:50 +00:00
Add Client.move_channel to change channel positions.
This commit is contained in:
parent
a0966f59d2
commit
631cc5a7d6
@ -1627,6 +1627,8 @@ class Client:
|
|||||||
|
|
||||||
You must have the proper permissions to edit the channel.
|
You must have the proper permissions to edit the channel.
|
||||||
|
|
||||||
|
To move the channel's position use :meth:`move_channel` instead.
|
||||||
|
|
||||||
The channel is **not** edited in-place.
|
The channel is **not** edited in-place.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -1635,8 +1637,6 @@ class Client:
|
|||||||
The channel to update.
|
The channel to update.
|
||||||
name : str
|
name : str
|
||||||
The new channel name.
|
The new channel name.
|
||||||
position : int
|
|
||||||
The new channel's position in the GUI.
|
|
||||||
topic : str
|
topic : str
|
||||||
The new channel's topic.
|
The new channel's topic.
|
||||||
bitrate : int
|
bitrate : int
|
||||||
@ -1656,7 +1656,6 @@ class Client:
|
|||||||
payload = {
|
payload = {
|
||||||
'name': options.get('name', channel.name),
|
'name': options.get('name', channel.name),
|
||||||
'topic': options.get('topic', channel.topic),
|
'topic': options.get('topic', channel.topic),
|
||||||
'position': options.get('position', channel.position),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
user_limit = options.get('user_limit')
|
user_limit = options.get('user_limit')
|
||||||
@ -1674,6 +1673,66 @@ class Client:
|
|||||||
data = yield from r.json(encoding='utf-8')
|
data = yield from r.json(encoding='utf-8')
|
||||||
log.debug(request_success_log.format(response=r, json=payload, data=data))
|
log.debug(request_success_log.format(response=r, json=payload, data=data))
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def move_channel(self, channel, position):
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Moves the specified :class:`Channel` to the given position in the GUI.
|
||||||
|
Note that voice channels and text channels have different position values.
|
||||||
|
|
||||||
|
This does **not** edit the channel ordering in place.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
:class:`Object` instances do not work with this function.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
-----------
|
||||||
|
channel : :class:`Channel`
|
||||||
|
The channel to change positions of.
|
||||||
|
position : int
|
||||||
|
The position to insert the channel to.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
InvalidArgument
|
||||||
|
If position is less than 0 or greater than the number of channels.
|
||||||
|
Forbidden
|
||||||
|
You do not have permissions to change channel order.
|
||||||
|
HTTPException
|
||||||
|
If moving the channel failed, or you are of too low rank to move the channel.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if position < 0:
|
||||||
|
raise InvalidArgument('Channel position cannot be less than 0.')
|
||||||
|
|
||||||
|
url = '{0}/{1.server.id}/channels'.format(endpoints.SERVERS, channel)
|
||||||
|
channels = [c for c in channel.server.channels if c.type is channel.type]
|
||||||
|
|
||||||
|
if position >= len(channels):
|
||||||
|
raise InvalidArgument('Channel position cannot be greater than {}'.format(len(channels) - 1))
|
||||||
|
|
||||||
|
channels.sort(key=lambda c: c.position)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# remove ourselves from the channel list
|
||||||
|
channels.remove(channel)
|
||||||
|
except ValueError:
|
||||||
|
# not there somehow lol
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
# add ourselves at our designated position
|
||||||
|
channels.insert(position, channel)
|
||||||
|
|
||||||
|
payload = [{'id': c.id, 'position': index } for index, c in enumerate(channels)]
|
||||||
|
|
||||||
|
r = yield from self.session.patch(url, data=utils.to_json(payload), headers=self.headers)
|
||||||
|
log.debug(request_logging_format.format(method='PATCH', response=r))
|
||||||
|
yield from utils._verify_successful_response(r)
|
||||||
|
|
||||||
|
yield from r.release()
|
||||||
|
log.debug(request_success_log.format(json=payload, response=r, data={}))
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def create_channel(self, server, name, type=None):
|
def create_channel(self, server, name, type=None):
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user