Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
 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))
Ejemplo n.º 13
0
    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))
Ejemplo n.º 14
0
    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']))
Ejemplo n.º 15
0
    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))
Ejemplo n.º 16
0
    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"]}.'
                    )
Ejemplo n.º 17
0
    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"]}.'
                    )
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
0
 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)
Ejemplo n.º 20
0
 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
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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)
Ejemplo n.º 23
0
    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)
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
 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
Ejemplo n.º 26
0
 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)
Ejemplo n.º 27
0
 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
Ejemplo n.º 28
0
 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)
Ejemplo n.º 29
0
 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)
Ejemplo n.º 30
0
 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)