Allow additional parameters on channel creation
This commit is contained in:
		| @@ -555,7 +555,7 @@ class Guild(Hashable): | |||||||
|  |  | ||||||
|         return utils.find(pred, members) |         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: |         if overwrites is None: | ||||||
|             overwrites = {} |             overwrites = {} | ||||||
|         elif not isinstance(overwrites, dict): |         elif not isinstance(overwrites, dict): | ||||||
| @@ -580,11 +580,16 @@ class Guild(Hashable): | |||||||
|  |  | ||||||
|             perms.append(payload) |             perms.append(payload) | ||||||
|  |  | ||||||
|         parent_id = category.id if category else None |         try: | ||||||
|         return self._state.http.create_channel(self.id, name, channel_type.value, parent_id=parent_id, |             options['rate_limit_per_user'] = options.pop('slowmode_delay') | ||||||
|                                                permission_overwrites=perms, reason=reason) |         except KeyError: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|     async def create_text_channel(self, name, *, overwrites=None, category=None, reason=None): |         parent_id = category.id if category else None | ||||||
|  |         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, **options): | ||||||
|         """|coro| |         """|coro| | ||||||
|  |  | ||||||
|         Creates a :class:`TextChannel` for the guild. |         Creates a :class:`TextChannel` for the guild. | ||||||
| @@ -596,6 +601,12 @@ class Guild(Hashable): | |||||||
|         channel upon creation. This parameter expects a :class:`dict` of |         channel upon creation. This parameter expects a :class:`dict` of | ||||||
|         overwrites with the target (either a :class:`Member` or a :class:`Role`) |         overwrites with the target (either a :class:`Member` or a :class:`Role`) | ||||||
|         as the key and a :class:`PermissionOverwrite` as the value. |         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 |         Examples | ||||||
|         ---------- |         ---------- | ||||||
| @@ -619,7 +630,7 @@ class Guild(Hashable): | |||||||
|  |  | ||||||
|         Parameters |         Parameters | ||||||
|         ----------- |         ----------- | ||||||
|         name: str |         name: :class:`str` | ||||||
|             The channel's name. |             The channel's name. | ||||||
|         overwrites |         overwrites | ||||||
|             A :class:`dict` of target (either a role or a member) to |             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 category to place the newly created channel under. | ||||||
|             The permissions will be automatically synced to category if no |             The permissions will be automatically synced to category if no | ||||||
|             overwrites are provided. |             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. |             The reason for creating this channel. Shows up on the audit log. | ||||||
|  |  | ||||||
|         Raises |         Raises | ||||||
| @@ -646,19 +667,27 @@ class Guild(Hashable): | |||||||
|         :class:`TextChannel` |         :class:`TextChannel` | ||||||
|             The channel that was just created. |             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) |         channel = TextChannel(state=self._state, guild=self, data=data) | ||||||
|  |  | ||||||
|         # temporarily add to the cache |         # temporarily add to the cache | ||||||
|         self._channels[channel.id] = channel |         self._channels[channel.id] = channel | ||||||
|         return 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| |         """|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) |         channel = VoiceChannel(state=self._state, guild=self, data=data) | ||||||
|  |  | ||||||
|         # temporarily add to the cache |         # temporarily add to the cache | ||||||
|   | |||||||
| @@ -508,17 +508,16 @@ class HTTPClient: | |||||||
|         r = Route('PATCH', '/guilds/{guild_id}/channels', guild_id=guild_id) |         r = Route('PATCH', '/guilds/{guild_id}/channels', guild_id=guild_id) | ||||||
|         return self.request(r, json=data, reason=reason) |         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 = { |         payload = { | ||||||
|             'name': name, |  | ||||||
|             'type': channel_type |             'type': channel_type | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if permission_overwrites is not None: |         valid_keys = ('name', 'parent_id', 'topic', 'bitrate', 'nsfw', | ||||||
|             payload['permission_overwrites'] = permission_overwrites |                       'user_limit', 'position', 'permission_overwrites', 'rate_limit_per_user') | ||||||
|  |         payload.update({ | ||||||
|         if parent_id is not None: |             k: v for k, v in options.items() if k in valid_keys and v is not None | ||||||
|             payload['parent_id'] = parent_id |         }) | ||||||
|  |  | ||||||
|         return self.request(Route('POST', '/guilds/{guild_id}/channels', guild_id=guild_id), json=payload, reason=reason) |         return self.request(Route('POST', '/guilds/{guild_id}/channels', guild_id=guild_id), json=payload, reason=reason) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user