Returns all of the channel's overwrites.

        This is returned as a dictionary where the key contains the target which
        can be either a :class:`Role` or a :class:`Member` and the key is the
        overwrite as a :class:`PermissionOverwrite`.

        Returns
        --------
        Mapping[Union[:class:`Role`, :class:`Member`], :class:`PermissionOverwrite`]:
            The channel's permission overwrites.

def overwrites(self):
        """Returns all of the channel's overwrites.

        This is returned as a dictionary where the key contains the target which
        can be either a :class:`Role` or a :class:`Member` and the key is the
        overwrite as a :class:`PermissionOverwrite`.

        Returns
        --------
        Mapping[Union[:class:`Role`, :class:`Member`], :class:`PermissionOverwrite`]:
            The channel's permission overwrites.
        """
        ret = {}
        for ow in self._overwrites:
            allow = Permissions(ow.allow)
            deny = Permissions(ow.deny)
            overwrite = PermissionOverwrite.from_pair(allow, deny)

            if ow.type == 'role':
                target = self.guild.get_role(ow.id)
            elif ow.type == 'member':
                target = self.guild.get_member(ow.id)

            # TODO: There is potential data loss here in the non-chunked
            # case, i.e. target is None because get_member returned nothing.
            # This can be fixed with a slight breaking change to the return type,
            # i.e. adding discord.Object to the list of it
            # However, for now this is an acceptable compromise.
            if target is not None:
                ret[target] = overwrite
        return ret