Better group DM support.
This commit is contained in:
		@@ -359,7 +359,6 @@ class GroupChannel(discord.abc.Messageable, Hashable):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, *, me, state, data):
 | 
			
		||||
        self._state = state
 | 
			
		||||
        self.recipients = [state.store_user(u) for u in data['recipients']]
 | 
			
		||||
        self.id = int(data['id'])
 | 
			
		||||
        self.me = me
 | 
			
		||||
        self._update_group(data)
 | 
			
		||||
@@ -369,6 +368,11 @@ class GroupChannel(discord.abc.Messageable, Hashable):
 | 
			
		||||
        self.icon = data.get('icon')
 | 
			
		||||
        self.name = data.get('name')
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            self.recipients = [state.store_user(u) for u in data['recipients']]
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
        if owner_id == self.me.id:
 | 
			
		||||
            self.owner = self.me
 | 
			
		||||
        else:
 | 
			
		||||
@@ -438,6 +442,105 @@ class GroupChannel(discord.abc.Messageable, Hashable):
 | 
			
		||||
 | 
			
		||||
        return base
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def add_recipients(self, *recipients):
 | 
			
		||||
        """|coro|
 | 
			
		||||
 | 
			
		||||
        Adds recipients to this group.
 | 
			
		||||
 | 
			
		||||
        A group can only have a maximum of 10 members.
 | 
			
		||||
        Attempting to add more ends up in an exception. To
 | 
			
		||||
        add a recipient to the group, you must have a relationship
 | 
			
		||||
        with the user of type :attr:`RelationshipType.friend`.
 | 
			
		||||
 | 
			
		||||
        Parameters
 | 
			
		||||
        -----------
 | 
			
		||||
        \*recipients: :class:`User`
 | 
			
		||||
            An argument list of users to add to this group.
 | 
			
		||||
 | 
			
		||||
        Raises
 | 
			
		||||
        -------
 | 
			
		||||
        HTTPException
 | 
			
		||||
            Adding a recipient to this group failed.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        # TODO: wait for the corresponding WS event
 | 
			
		||||
 | 
			
		||||
        req = self._state.http.add_group_recipient
 | 
			
		||||
        for recipient in recipients:
 | 
			
		||||
            yield from req(self.id, recipient.id)
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def remove_recipients(self, *recipients):
 | 
			
		||||
        """|coro|
 | 
			
		||||
 | 
			
		||||
        Removes recipients from this group.
 | 
			
		||||
 | 
			
		||||
        Parameters
 | 
			
		||||
        -----------
 | 
			
		||||
        \*recipients: :class:`User`
 | 
			
		||||
            An argument list of users to remove from this group.
 | 
			
		||||
 | 
			
		||||
        Raises
 | 
			
		||||
        -------
 | 
			
		||||
        HTTPException
 | 
			
		||||
            Removing a recipient from this group failed.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        # TODO: wait for the corresponding WS event
 | 
			
		||||
 | 
			
		||||
        req = self._state.http.remove_group_recipient
 | 
			
		||||
        for recipient in recipients:
 | 
			
		||||
            yield from req(self.id, recipient.id)
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def edit(self, **fields):
 | 
			
		||||
        """|coro|
 | 
			
		||||
 | 
			
		||||
        Edits the group.
 | 
			
		||||
 | 
			
		||||
        Parameters
 | 
			
		||||
        -----------
 | 
			
		||||
        name: Optional[str]
 | 
			
		||||
            The new name to change the group to.
 | 
			
		||||
            Could be ``None`` to remove the name.
 | 
			
		||||
        icon: Optional[bytes]
 | 
			
		||||
            A bytes-like object representing the new icon.
 | 
			
		||||
            Could be ``None`` to remove the icon.
 | 
			
		||||
 | 
			
		||||
        Raises
 | 
			
		||||
        -------
 | 
			
		||||
        HTTPException
 | 
			
		||||
            Editing the group failed.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            icon_bytes = fields['icon']
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
            if icon_bytes is not None:
 | 
			
		||||
                fields['icon'] = utils._bytes_to_base64_data(icon_bytes)
 | 
			
		||||
 | 
			
		||||
        data = yield from self._state.http.edit_group(self.id, **fields)
 | 
			
		||||
        self._update_group(data)
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
    def leave(self):
 | 
			
		||||
        """|coro|
 | 
			
		||||
 | 
			
		||||
        Leave the group.
 | 
			
		||||
 | 
			
		||||
        If you are the only one in the group, this deletes it as well.
 | 
			
		||||
 | 
			
		||||
        Raises
 | 
			
		||||
        -------
 | 
			
		||||
        HTTPException
 | 
			
		||||
            Leaving the group failed.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        yield from self._state.http.leave_group(self.id)
 | 
			
		||||
 | 
			
		||||
def _channel_factory(channel_type):
 | 
			
		||||
    value = try_enum(ChannelType, channel_type)
 | 
			
		||||
    if value is ChannelType.text:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user