def join(self, username=None, password=None): log.info("Joining channel %s", str(self)) try: self._bot.api_call("conversations.join", data={"channel": self.id}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError(f"Unable to join channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e)
def join(self, username=None, password=None): log.info("Joining channel %s", str(self)) try: self._bot.api_call('channels.join', data={'name': self.name}) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f'Unable to join channel. {USER_IS_BOT_HELPTEXT}') else: raise RoomError(e)
def create(self, private=False): try: if private: log.info('Creating group %s.', self) self._bot.webclient.groups_create(name=self.name) else: log.info('Creating channel %s.', self) self._bot.webclient.channels_create(name=self.name) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f"Unable to create channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e)
def create(self, private=False): try: if private: log.info('Creating group %s.', self) self._bot.api_call('groups.create', data={'name': self.name}) else: log.info('Creating channel %s.', self) self._bot.api_call('channels.create', data={'name': self.name}) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f"Unable to create channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e)
def leave(self, reason=None): try: if self.id.startswith('C'): log.info('Leaving channel %s (%s)', self, self.id) self._bot.api_call('conversations.leave', data={'channel': self.id}) else: log.info('Leaving group %s (%s)', self, self.id) self._bot.api_call('conversations.leave', data={'channel': self.id}) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f'Unable to leave channel. {USER_IS_BOT_HELPTEXT}') else: raise RoomError(e) self._id = None
def leave(self, reason=None): try: if self.id.startswith('C'): log.info('Leaving channel %s (%s)', self, self.id) self._bot.webclient.channels_leave(channel=self.id) else: log.info('Leaving group %s (%s)', self, self.id) self._bot.webclient.groups_leave(channel=self.id) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f'Unable to leave channel. {USER_IS_BOT_HELPTEXT}') else: raise RoomError(e) self._id = None
def destroy(self): try: if self.id.startswith("C"): log.info("Archiving channel %s (%s)", self, self.id) self._bot.api_call("channels.archive", data={"channel": self.id}) else: log.info("Archiving group %s (%s)", self, self.id) self._bot.api_call("groups.archive", data={"channel": self.id}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError(f"Unable to archive channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e) self._id = None
def leave(self, reason=None): try: if self.id.startswith('C'): log.info("Leaving channel %s (%s)" % (str(self), self.id)) self._bot.api_call('channels.leave', data={'channel': self.id}) else: log.info("Leaving group %s (%s)" % (str(self), self.id)) self._bot.api_call('groups.leave', data={'channel': self.id}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError("Unable to leave channel. " + USER_IS_BOT_HELPTEXT) else: raise RoomError(e) self._id = None
def destroy(self): try: if self.id.startswith('C'): log.info('Archiving channel %s (%s)', self, self.id) self._bot.api_call('channels.archive', data={'channel': self.id}) else: log.info('Archiving group %s (%s)', self, self.id) self._bot.api_call('groups.archive', data={'channel': self.id}) except SlackAPIResponseError as e: if e.error == 'user_is_bot': raise RoomError(f'Unable to archive channel. {USER_IS_BOT_HELPTEXT}') else: raise RoomError(e) self._id = None
def leave(self, reason=None): try: if self.id.startswith("C"): log.info("Leaving channel %s (%s)", self, self.id) self._bot.api_call("conversations.leave", data={"channel": self.id}) else: log.info("Leaving group %s (%s)", self, self.id) self._bot.api_call("conversations.leave", data={"channel": self.id}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError(f"Unable to leave channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e) self._id = None
def create(self, private=False): try: if private: log.info("Creating private channel %s.", self) self._bot.api_call( "conversations.create", data={"name": self.name, "is_private": True} ) else: log.info("Creating channel %s.", self) self._bot.api_call("conversations.create", data={"name": self.name}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError(f"Unable to create channel. {USER_IS_BOT_HELPTEXT}") else: raise RoomError(e)
def purpose(self, purpose): try: self.client.api.updateChannel(self.teamid, self.id, purpose=purpose) except MattermostApiResponseError as e: raise RoomError("Could not update room purpose. {}".format(e))
def invite(self, *args): user_count = self.driver.teams.get_team_stats( team_id=self.teamid)["total_member_count"] user_page_limit = 200 users_not_in_channel = [] for start in range(0, user_count, user_page_limit): users_not_in_channel.extend( self.driver.users.get_users( params={ "page": start, "per_page": user_page_limit, "in_team": self.teamid, "not_in_channel": self.id, })) users = {} for user in users_not_in_channel: users.update({user["username"]: user["id"]}) for user in args: if user not in users: raise UserDoesNotExistError("User '{}' not found".format(user)) log.info("Inviting {} into {} ({})".format(user, str(self), self.id)) try: self.driver.channels.add_user(channel_id=self.id, options={"user_id": users[user]}) except (InvalidOrMissingParameters, NotEnoughPermissions): raise RoomError( "Unable to invite {} to channel {} ({})".format( user, str(self), self.id))
def invite(self, *args): users = { user['name']: user['id'] for user in self._bot.api_call('users.list')['members'] } for user in args: if user not in users: raise UserDoesNotExistError("User '%s' not found" % user) log.info("Inviting %s into %s (%s)" % (user, str(self), self.id)) method = 'groups.invite' if self.private else 'channels.invite' response = self._bot.api_call(method, data={ 'channel': self.id, 'user': users[user] }, raise_errors=False) if not response['ok']: if response['error'] == "user_is_bot": raise RoomError("Unable to invite people. " + USER_IS_BOT_HELPTEXT) elif response['error'] != "already_in_channel": raise SlackAPIResponseError( error="Slack API call to %s failed: %s" % (method, response['error']))
def invite(self, *args): user_count = self.driver.teams.get_team_stats( team_id=self.teamid)['total_member_count'] user_page_limit = 200 users_not_in_channel = [] for start in range(0, user_count, user_page_limit): users_not_in_channel.extend( self.driver.users.get_users( params={ 'page': start, 'per_page': user_page_limit, 'in_team': self.teamid, 'not_in_channel': self.id })) users = {} for user in users_not_in_channel: users.update({user['username']: user['id']}) for user in args: if user not in users: raise UserDoesNotExistError( 'User \'{}\' not found'.format(user)) log.info('Inviting {} into {} ({})'.format(user, str(self), self.id)) try: self.driver.channels.add_user(channel_id=self.id, options={'user_id': users[user]}) except (InvalidOrMissingParameters, NotEnoughPermissions): raise RoomError( "Unable to invite {} to channel {} ({})".format( user, str(self), self.id))
def invite(self, *args): users = { user['name']: user['id'] for user in self._bot.api_call('users.list')['members'] } for user in args: if user not in users: raise UserDoesNotExistError(f'User "{user}" not found.') log.info('Inviting %s into %s (%s)', user, self, self.id) method = 'groups.invite' if self.private else 'channels.invite' response = self._bot.api_call(method, data={ 'channel': self.id, 'user': users[user] }, raise_errors=False) if not response['ok']: if response['error'] == 'user_is_bot': raise RoomError( f'Unable to invite people. {USER_IS_BOT_HELPTEXT}') elif response['error'] != 'already_in_channel': raise SlackAPIResponseError( error= f'Slack API call to {method} failed: {response["error"]}.' )
def invite(self, *args): users = { user["name"]: user["id"] for user in self._bot.api_call("users.list")["members"] } for user in args: if user not in users: raise UserDoesNotExistError(f'User "{user}" not found.') log.info("Inviting %s into %s (%s)", user, self, self.id) method = "conversations.invite" response = self._bot.api_call( method, data={ "channel": self.id, "user": users[user] }, raise_errors=False, ) if not response["ok"]: if response["error"] == "user_is_bot": raise RoomError( f"Unable to invite people. {USER_IS_BOT_HELPTEXT}") elif response["error"] != "already_in_channel": raise SlackAPIResponseError( error= f'Slack API call to {method} failed: {response["error"]}.' )
def leave(self, reason: str = None): log.info('Leaving channel {} ({})'.format(str(self), self.id)) try: self.client.api.leaveChannel(self.teamid, self.id) self._bot.callback_room_left(self) except MattermostApiResponseError as e: raise RoomError(e)
def leave(self, reason: str = None): log.info("Leaving channel {} ({})".format(str(self), self.id)) try: self.driver.channels.remove_user_from_channel(channel_id=self.id, user_id=self._bot.id) self._bot.callback_room_left(self) except (InvalidOrMissingParameters, NotEnoughPermissions) as e: raise RoomError(e)
def destroy(self): try: if self.id.startswith('C'): log.info("Archiving channel %s (%s)" % (str(self), self.id)) self._bot.api_call('conversations.archive', data={'channel': self.id}) else: log.info("Archiving group %s (%s)" % (str(self), self.id)) self._bot.api_call('conversations.archive', data={'channel': self.id}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError("Unable to archive channel. " + USER_IS_BOT_HELPTEXT) else: raise RoomError(e) self._id = None
def destroy(self) -> None: if not self.exists: log.warning("Trying to destory a non-existing channel {}".format( self._channel_name)) raise RoomError("Room doesn't exist") asyncio.run_coroutine_threadsafe( self.discord_channel().delete(reason="Bot deletion command"), loop=DiscordBackend.client.loop).result(timeout=5)
def create(self) -> None: if self.exists: log.warning( f"Tried to create {self._channel_name} which already exists.") raise RoomError("Room exists") asyncio.run_coroutine_threadsafe( self.create_room(), loop=DiscordBackend.client.loop).result(timeout=5)
def create(self) -> None: if self.exists: log.warning( "Trying to create an already existing channel {}".format( self._channel_name)) raise RoomError("Room exists") asyncio.run_coroutine_threadsafe( self.create_room(), loop=DiscordBackend.client.loop).result(timeout=5)
def destroy(self) -> None: if not self.exists: log.warning( f"Tried to destory {self._channel_name} which doesn't exist.") raise RoomError("Room doesn't exist") asyncio.run_coroutine_threadsafe( self.discord_channel().delete(reason="Bot deletion command"), loop=DiscordBackend.client.loop, ).result(timeout=5)
def destroy(self): try: self.driver.channels.delete_channel(channel_id=self.id) self._bot.callback_room_left(self) except (InvalidOrMissingParameters, NotEnoughPermissions) as e: log.debug( "Could not delete the channel. Are you a member of the channel?" ) raise RoomError(e) self._id = None
def create(self, private=False): try: if private: log.info("Creating group %s" % str(self)) self._bot.api_call('conversations.create', data={ 'name': self.name, 'is_private': True }) else: log.info("Creating channel %s" % str(self)) self._bot.api_call('conversations.create', data={'name': self.name}) except SlackAPIResponseError as e: if e.error == "user_is_bot": raise RoomError("Unable to create channel. " + USER_IS_BOT_HELPTEXT) else: raise RoomError(e)
def destroy(self): try: self.client.api.deleteChannel(self.teamid, self.id) self._bot.callback_room_left(self) except MattermostApiResponseError as e: log.debug( 'Could not delete the channel. Are you a member of the channel?' ) raise RoomError(e) self._id = None
def join(self, username: str = None, password: str = None): if not self.exists: log.info( "Channel {} doesn't seem exist, trying to create it.".format( str(self))) self.create() # This always creates a public room! log.info("Joining channel {}".format(str(self))) try: self.client.api.joinChannelByName(self.teamid, self.name) self.client.api.joinChannel(self.teamid, self.id) self._bot.callback_room_joined(self) except MattermostApiResponseError as e: raise RoomError(e)
def join(self, username: str = None, password: str = None): if not self.exists: log.info( "Channel {} doesn't seem exist, trying to create it.".format( str(self))) self.create() # This always creates a public room! log.info("Joining channel {}".format(str(self))) try: self.driver.channels.add_user( channel_id=self._id, options={"user_id": self._bot.userid}) self._bot.callback_room_joined(self) except (InvalidOrMissingParameters, NotEnoughPermissions) as e: raise RoomError(e)
def create(self, private=False): type = 'O' if private: log.info("Creating private group {}".format(str(self))) type = 'P' else: log.info("Creating public channel {}".format(str(self))) try: self.client.api.createChannel(self.teamid, self.name, display_name=self.name, type=type) self.client.api.getChannelByName(self.teamid, self.name) self._bot.callback_room_joined(self) except MattermostApiResponseError as e: raise RoomError(e)