from .base_api import BaseAPI
[docs]class Groups(BaseAPI):
"""Follows the Slack Groups API. See https://api.slack.com/methods"""
[docs] def create(self, name):
"""
Creates a group with the name
:param name: The group's name
:type name: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.create', data={'name': name})
[docs] def create_child(self, channel):
"""
Takes an existing private channel and performs the following steps:
* Renames the existing private channel (from "example" to "example-archived").
* Archives the existing private channel.
* Creates a new private channel with the name of the existing private channel.
* Adds all members of the existing private channel to the new private channel.
:param channel: Private channel to clone and archive
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.createChild', data={'channel': channel})
[docs] def info(self, channel):
"""
Returns the private channel's information
:param channel: The private channel's ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.get('groups.info', params={'channel': channel})
[docs] def list(self, exclude_archived=True, exclude_members=False):
"""
Lists the private channels that the user has access to
:param exclude_archived: Don't include archived private channels in the returned list
:type exclude_archived: bool
:param exclude_members: Don't include members in the returned list
:type exclude_members: bool
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
yield self.get('groups.list',
params={'exclude_archived': str(exclude_archived).lower(),
'exclude_members': str(exclude_members).lower()})
[docs] def history(self, channel, latest=None, oldest=None, count=None,
inclusive=True):
"""
Fetches history of messages and events from a private channel
:param channel: The private channel ID
:type channel: str
:param latest: End of time range to include in results
:type latest: str
:param oldest: Start of time range to include in results
:type oldest: str
:param count: The number of messages to return
:type count: int
:param inclusive: Include messages with latest or oldest timestamp in results
:type inclusive: bool
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.get('groups.history',
params={
'channel': channel,
'latest': latest,
'oldest': oldest,
'count': count,
'inclusive': int(inclusive)
})
[docs] def invite(self, channel, user):
"""
Invites a user to a private channel
:param channel: The private channel ID
:type channel: str
:param user: The user ID
:type user: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.invite',
data={'channel': channel, 'user': user})
[docs] def kick(self, channel, user):
"""
Removes a user from a private channel
:param channel: The private channel ID
:type channel: str
:param user: The user ID
:type user: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.kick',
data={'channel': channel, 'user': user})
[docs] def leave(self, channel):
"""
Allows a user object to remove themselves from a private channel
:param channel: The private channel ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.leave', data={'channel': channel})
[docs] def mark(self, channel, time_stamp):
"""
Moves the read cursor in a private channel
:param channel: The private channel ID
:type channel: str
:param time_stamp: The timestamp of the most recently seen message
:type time_stamp: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.mark', data={'channel': channel, 'ts': time_stamp})
[docs] def rename(self, channel, name):
"""
Renames a private channel
:param channel: The private channel ID
:type channel: str
:param name: The new user-friendly name of the private channel
:type name: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.rename',
data={'channel': channel, 'name': name})
[docs] def replies(self, channel, thread_ts):
"""
Retrieve a thread of messages posted to a private channel
:param channel: The private channel ID
:type channel: str
:param thread_ts: Unique identifier of a thread's parent message
:type thread_ts: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.get('groups.replies',
params={'channel': channel, 'thread_ts': thread_ts})
[docs] def archive(self, channel):
"""
Archives a private channel
:param channel: The private channel ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.archive', data={'channel': channel})
[docs] def unarchive(self, channel):
"""
Unarchives a private channel
:param channel: The private channel ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.unarchive', data={'channel': channel})
[docs] def open(self, channel):
"""
Opens a private channel
:param channel: The private channel ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.open', data={'channel': channel})
[docs] def close(self, channel):
"""
Closes a private channel
:param channel: The private channel ID
:type channel: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.close', data={'channel': channel})
[docs] def set_purpose(self, channel, purpose):
"""
Sets the purpose of a private channel
:param channel: The private channel ID
:type channel: str
:param purpose: The purpose
:type purpose: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.setPurpose',
data={'channel': channel, 'purpose': purpose})
[docs] def set_topic(self, channel, topic):
"""
Sets the topic of a private channel
:param channel: The private channel ID
:type channel: str
:param topic: The topic
:type topic: str
:return: A response object to run the API request.
:rtype: :class:`Response <Response>` object
"""
return self.post('groups.setTopic',
data={'channel': channel, 'topic': topic})