diff --git a/discord/abc.py b/discord/abc.py index bebe8f218..dc69ff27b 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -259,6 +259,28 @@ class GuildChannel: options['permission_overwrites'] = [c._asdict() for c in category._overwrites] else: await self._move(position, parent_id=parent_id, lock_permissions=lock_permissions, reason=reason) + + overwrites = options.get('overwrites', None) + if overwrites: + perms = [] + for target, perm in overwrites.items(): + if not isinstance(perm, PermissionOverwrite): + raise InvalidArgument('Expected PermissionOverwrite received {0.__name__}'.format(type(perm))) + + allow, deny = perm.pair() + payload = { + 'allow': allow.value, + 'deny': deny.value, + 'id': target.id + } + + if isinstance(target, Role): + payload['type'] = 'role' + else: + payload['type'] = 'member' + + perms.append(payload) + options['permission_overwrites'] = perms if options: data = await self._state.http.edit_channel(self.id, reason=reason, **options) diff --git a/discord/channel.py b/discord/channel.py index e8e56154f..0456a1d39 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -215,11 +215,17 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable): A value of `0` disables slowmode. The maximum value possible is `21600`. reason: Optional[:class:`str`] The reason for editing this channel. Shows up on the audit log. + overwrites: :class:`dict` + A :class:`dict` of target (either a role or a member) to + :class:`PermissionOverwrite` to apply to the channel. + + .. versionadded:: 1.3.0 Raises ------ InvalidArgument - If position is less than 0 or greater than the number of channels. + If position is less than 0 or greater than the number of channels, or if + the permission overwrite information is not in proper form. Forbidden You do not have permissions to edit the channel. HTTPException @@ -654,9 +660,16 @@ class VoiceChannel(discord.abc.Connectable, discord.abc.GuildChannel, Hashable): category. reason: Optional[:class:`str`] The reason for editing this channel. Shows up on the audit log. + overwrites: :class:`dict` + A :class:`dict` of target (either a role or a member) to + :class:`PermissionOverwrite` to apply to the channel. + + .. versionadded:: 1.3.0 Raises ------ + InvalidArgument + If the permission overwrite information is not in proper form. Forbidden You do not have permissions to edit the channel. HTTPException @@ -933,11 +946,17 @@ class StoreChannel(discord.abc.GuildChannel, Hashable): category. reason: Optional[:class:`str`] The reason for editing this channel. Shows up on the audit log. + overwrites: :class:`dict` + A :class:`dict` of target (either a role or a member) to + :class:`PermissionOverwrite` to apply to the channel. + + .. versionadded:: 1.3 Raises ------ InvalidArgument - If position is less than 0 or greater than the number of channels. + If position is less than 0 or greater than the number of channels, or if + the permission overwrite information is not in proper form. Forbidden You do not have permissions to edit the channel. HTTPException