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