aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler <[email protected]>2018-12-18 14:14:13 -0600
committerRapptz <[email protected]>2019-01-28 21:47:22 -0500
commitfebb8a965c8e40c3d3974d769e589a054a23bc0a (patch)
treeba031505f8553fc141c4ffd396a2cdbe5ae05f00
parentFix typo in Permissions.all_channel (diff)
downloaddiscord.py-febb8a965c8e40c3d3974d769e589a054a23bc0a.tar.xz
discord.py-febb8a965c8e40c3d3974d769e589a054a23bc0a.zip
Allow additional parameters on channel creation
-rw-r--r--discord/guild.py49
-rw-r--r--discord/http.py13
2 files changed, 45 insertions, 17 deletions
diff --git a/discord/guild.py b/discord/guild.py
index 7f780c36..1f62e74f 100644
--- a/discord/guild.py
+++ b/discord/guild.py
@@ -555,7 +555,7 @@ class Guild(Hashable):
return utils.find(pred, members)
- def _create_channel(self, name, overwrites, channel_type, category=None, reason=None):
+ def _create_channel(self, name, overwrites, channel_type, category=None, **options):
if overwrites is None:
overwrites = {}
elif not isinstance(overwrites, dict):
@@ -580,11 +580,16 @@ class Guild(Hashable):
perms.append(payload)
+ try:
+ options['rate_limit_per_user'] = options.pop('slowmode_delay')
+ except KeyError:
+ pass
+
parent_id = category.id if category else None
- return self._state.http.create_channel(self.id, name, channel_type.value, parent_id=parent_id,
- permission_overwrites=perms, reason=reason)
+ return self._state.http.create_channel(self.id, channel_type.value, name=name, parent_id=parent_id,
+ permission_overwrites=perms, **options)
- async def create_text_channel(self, name, *, overwrites=None, category=None, reason=None):
+ async def create_text_channel(self, name, *, overwrites=None, category=None, reason=None, **options):
"""|coro|
Creates a :class:`TextChannel` for the guild.
@@ -596,6 +601,12 @@ class Guild(Hashable):
channel upon creation. This parameter expects a :class:`dict` of
overwrites with the target (either a :class:`Member` or a :class:`Role`)
as the key and a :class:`PermissionOverwrite` as the value.
+
+ Note
+ --------
+ Creating a channel of a specified position will not update the position of
+ other channels to follow suit. A follow-up call to :meth:`~TextChannel.edit`
+ will be required to update the position of the channel in the channel list.
Examples
----------
@@ -619,7 +630,7 @@ class Guild(Hashable):
Parameters
-----------
- name: str
+ name: :class:`str`
The channel's name.
overwrites
A :class:`dict` of target (either a role or a member) to
@@ -629,7 +640,17 @@ class Guild(Hashable):
The category to place the newly created channel under.
The permissions will be automatically synced to category if no
overwrites are provided.
- reason: Optional[str]
+ position: :class:`int`
+ The position in the channel list. This is a number that starts
+ at 0. e.g. the top channel is position 0.
+ topic: Optional[:class:`str`]
+ The new channel's topic.
+ slowmode_delay: :class:`int`
+ Specifies the slowmode rate limit for user in this channel.
+ The maximum value possible is `120`.
+ nsfw: :class:`bool`
+ To mark the channel as NSFW or not.
+ reason: Optional[:class:`str`]
The reason for creating this channel. Shows up on the audit log.
Raises
@@ -646,19 +667,27 @@ class Guild(Hashable):
:class:`TextChannel`
The channel that was just created.
"""
- data = await self._create_channel(name, overwrites, ChannelType.text, category, reason=reason)
+ data = await self._create_channel(name, overwrites, ChannelType.text, category, reason=reason, **options)
channel = TextChannel(state=self._state, guild=self, data=data)
# temporarily add to the cache
self._channels[channel.id] = channel
return channel
- async def create_voice_channel(self, name, *, overwrites=None, category=None, reason=None):
+ async def create_voice_channel(self, name, *, overwrites=None, category=None, reason=None, **options):
"""|coro|
- Same as :meth:`create_text_channel` except makes a :class:`VoiceChannel` instead.
+ This is similar to :meth:`create_text_channel` except makes a :class:`VoiceChannel` instead, in addition
+ to having the following new parameters.
+
+ Parameters
+ -----------
+ bitrate: :class:`int`
+ The channel's preferred audio bitrate in bits per second.
+ user_limit: :class:`int`
+ The channel's limit for number of members that can be in a voice channel.
"""
- data = await self._create_channel(name, overwrites, ChannelType.voice, category, reason=reason)
+ data = await self._create_channel(name, overwrites, ChannelType.voice, category, reason=reason, **options)
channel = VoiceChannel(state=self._state, guild=self, data=data)
# temporarily add to the cache
diff --git a/discord/http.py b/discord/http.py
index 30b0261a..2441ca67 100644
--- a/discord/http.py
+++ b/discord/http.py
@@ -508,17 +508,16 @@ class HTTPClient:
r = Route('PATCH', '/guilds/{guild_id}/channels', guild_id=guild_id)
return self.request(r, json=data, reason=reason)
- def create_channel(self, guild_id, name, channel_type, parent_id=None, permission_overwrites=None, *, reason=None):
+ def create_channel(self, guild_id, channel_type, *, reason=None, **options):
payload = {
- 'name': name,
'type': channel_type
}
- if permission_overwrites is not None:
- payload['permission_overwrites'] = permission_overwrites
-
- if parent_id is not None:
- payload['parent_id'] = parent_id
+ valid_keys = ('name', 'parent_id', 'topic', 'bitrate', 'nsfw',
+ 'user_limit', 'position', 'permission_overwrites', 'rate_limit_per_user')
+ payload.update({
+ k: v for k, v in options.items() if k in valid_keys and v is not None
+ })
return self.request(Route('POST', '/guilds/{guild_id}/channels', guild_id=guild_id), json=payload, reason=reason)