Allow editing of channel types for news and text channels

This commit is contained in:
NCPlayz 2020-05-18 00:39:22 +01:00 committed by Rapptz
parent 12e31bb933
commit bd1420b5f0
3 changed files with 19 additions and 1 deletions

View File

@ -31,6 +31,7 @@ from collections import namedtuple
from .iterators import HistoryIterator from .iterators import HistoryIterator
from .context_managers import Typing from .context_managers import Typing
from .enums import ChannelType
from .errors import InvalidArgument, ClientException, HTTPException from .errors import InvalidArgument, ClientException, HTTPException
from .permissions import PermissionOverwrite, Permissions from .permissions import PermissionOverwrite, Permissions
from .role import Role from .role import Role
@ -280,6 +281,15 @@ class GuildChannel:
perms.append(payload) perms.append(payload)
options['permission_overwrites'] = perms options['permission_overwrites'] = perms
try:
ch_type = options['type']
except KeyError:
pass
else:
if not isinstance(ch_type, ChannelType):
raise InvalidArgument('type field must be of type ChannelType')
options['type'] = ch_type.value
if options: if options:
data = await self._state.http.edit_channel(self.id, reason=reason, **options) data = await self._state.http.edit_channel(self.id, reason=reason, **options)
self._update(self.guild, data) self._update(self.guild, data)

View File

@ -197,6 +197,9 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
.. versionchanged:: 1.3 .. versionchanged:: 1.3
The ``overwrites`` keyword-only parameter was added. The ``overwrites`` keyword-only parameter was added.
.. versionchanged:: 1.4
The ``type`` keyword-only parameter was added.
Parameters Parameters
---------- ----------
name: :class:`str` name: :class:`str`
@ -216,6 +219,10 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
slowmode_delay: :class:`int` slowmode_delay: :class:`int`
Specifies the slowmode rate limit for user in this channel, in seconds. Specifies the slowmode rate limit for user in this channel, in seconds.
A value of `0` disables slowmode. The maximum value possible is `21600`. A value of `0` disables slowmode. The maximum value possible is `21600`.
type: :class:`ChannelType`
Change the type of this text channel. Currently, only conversion between
:attr:`ChannelType.text` and :attr:`ChannelType.news` is supported. This
is only available to guilds that contain ``NEWS`` in :attr:`Guild.features`.
reason: Optional[:class:`str`] reason: Optional[:class:`str`]
The reason for editing this channel. Shows up on the audit log. The reason for editing this channel. Shows up on the audit log.
overwrites: :class:`dict` overwrites: :class:`dict`

View File

@ -529,7 +529,8 @@ class HTTPClient:
def edit_channel(self, channel_id, *, reason=None, **options): def edit_channel(self, channel_id, *, reason=None, **options):
r = Route('PATCH', '/channels/{channel_id}', channel_id=channel_id) r = Route('PATCH', '/channels/{channel_id}', channel_id=channel_id)
valid_keys = ('name', 'parent_id', 'topic', 'bitrate', 'nsfw', valid_keys = ('name', 'parent_id', 'topic', 'bitrate', 'nsfw',
'user_limit', 'position', 'permission_overwrites', 'rate_limit_per_user') 'user_limit', 'position', 'permission_overwrites', 'rate_limit_per_user',
'type')
payload = { payload = {
k: v for k, v in options.items() if k in valid_keys k: v for k, v in options.items() if k in valid_keys
} }