aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-06-07 21:29:59 -0400
committerRapptz <[email protected]>2016-06-07 21:29:59 -0400
commit631cc5a7d694fe72978fc15ac73240af4c0c2143 (patch)
treecd2fbfc833dc3155a7bdada12795cc7edd5b472b
parentFix some typos in the FAQ page. (diff)
downloaddiscord.py-631cc5a7d694fe72978fc15ac73240af4c0c2143.tar.xz
discord.py-631cc5a7d694fe72978fc15ac73240af4c0c2143.zip
Add Client.move_channel to change channel positions.
-rw-r--r--discord/client.py65
1 files changed, 62 insertions, 3 deletions
diff --git a/discord/client.py b/discord/client.py
index bd73e095..afaa3d9f 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -1627,6 +1627,8 @@ class Client:
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.
Parameters
@@ -1635,8 +1637,6 @@ class Client:
The channel to update.
name : str
The new channel name.
- position : int
- The new channel's position in the GUI.
topic : str
The new channel's topic.
bitrate : int
@@ -1656,7 +1656,6 @@ class Client:
payload = {
'name': options.get('name', channel.name),
'topic': options.get('topic', channel.topic),
- 'position': options.get('position', channel.position),
}
user_limit = options.get('user_limit')
@@ -1675,6 +1674,66 @@ class Client:
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
def create_channel(self, server, name, type=None):
"""|coro|