def test_add_words(self):
        with open("../examples/message.json") as json_file:
            data = json.load(json_file)

        result = add_words_values_to_message(data.get("message"))

        self.assertTrue("words" in result.keys())
        self.assertTrue("first_word" in result.keys())
        self.assertEqual(result.get("first_word"), "Hello")
        self.assertEqual(result.get("words"),
                         ["Hello", "from", "a", "command", "line", "test!"])
    def test_add_words(self):
        with open("../examples/message.json") as json_file:
            data = json.load(json_file)

        result = add_words_values_to_message(data.get("message"))

        self.assertTrue("words" in result.keys())
        self.assertTrue("first_word" in result.keys())
        self.assertEqual(result.get("first_word"), "Hello")
        self.assertEqual(result.get("words"),
                         ['Hello', 'from', 'a', 'command', 'line', 'test!'])
Esempio n. 3
0
    def run(self, params={}):
        team_guid = params.get(Input.TEAM_GUID)
        channel_guid = params.get(Input.CHANNEL_GUID)
        is_html = params.get(Input.IS_HTML)
        message_content = params.get(Input.MESSAGE)

        if is_html:
            message = send_html_message(self.logger, self.connection,
                                        message_content, team_guid,
                                        channel_guid)
        else:
            message = send_message(self.logger, self.connection,
                                   message_content, team_guid, channel_guid)

        clean_message = remove_null_and_clean(message)
        clean_message = add_words_values_to_message(clean_message)

        return {Output.MESSAGE: clean_message}
    def run(self, params={}):
        message = params.get(Input.MESSAGE)

        teams = get_teams_from_microsoft(self.logger, self.connection,
                                         params.get(Input.TEAM_NAME))
        team_id = teams[0].get("id")
        channels = get_channels_from_microsoft(self.logger, self.connection,
                                               team_id,
                                               params.get(Input.CHANNEL_NAME))

        message = send_message(self.logger,
                               self.connection,
                               message,
                               team_id,
                               channels[0].get("id"),
                               thread_id=params.get(Input.THREAD_ID, None))

        message = remove_null_and_clean(message)
        message = add_words_values_to_message(message)

        return {Output.MESSAGE: message}
Esempio n. 5
0
    def run(self, params={}):
        """Run the trigger"""
        team_name = params.get(Input.TEAM_NAME)
        channel_name = params.get(Input.CHANNEL_NAME)
        message_content = params.get(Input.MESSAGE_CONTENT)

        # Check for valid regex
        compiled_message_content = self.compile_message_content(message_content)

        # Setup the messages endpoint
        messages_endpoint = self.setup_endpoint(channel_name, team_name)

        # Get our initial set of messages
        sorted_messages = self.get_sorted_messages(messages_endpoint)

        # Get our most recent message date:
        try:
            last_time_we_checked = maya.parse(sorted_messages[0].get("createdDateTime"))
        except Exception as e:
            raise PluginException(PluginException.Preset.INVALID_JSON) from e

        time.sleep(1)  # Make sure we don't kill the API. It's limited to 3 calls a second

        while True:
            # Get messages
            sorted_messages = self.get_sorted_messages(messages_endpoint)
            most_recent_message_time = maya.parse(sorted_messages[0].get("createdDateTime"))

            if most_recent_message_time > last_time_we_checked:  # We have new messages
                self.logger.info("New messages found.")
                temp_time = most_recent_message_time

                for message in sorted_messages:  # For each new message
                    message = remove_null_and_clean(message)
                    message = add_words_values_to_message(message)
                    if maya.parse(message.get("createdDateTime")) > last_time_we_checked:
                        self.logger.info("Analyzing message...")
                        if message_content:  # Do we have a reg ex
                            self.logger.info("Checking message content.")
                            ms_message_content = message.get("body", {}).get("content", "")
                            if message.get("body", {}).get("contentType", "").lower() == "html":
                                ms_message_content = strip_html(ms_message_content)
                            self.logger.info(f"Testing message: {ms_message_content}")
                            if compiled_message_content.search(ms_message_content):
                                self.logger.info("Returning new message.")
                                self.send({
                                    Output.MESSAGE: message,
                                    Output.TEAM_NAME: team_name,
                                    Output.CHANNEL_NAME: channel_name,
                                    Output.INDICATORS: self.get_indicators(message.get("body", {}).get("content", ""))
                                })
                            else:
                                self.logger.info(
                                    f"Message did not match regex.\nMessage: {ms_message_content}\nRegex: {message_content}")
                        else:  # we did not have a regex
                            self.logger.info("Returning new message.")
                            self.send({
                                Output.MESSAGE: message,
                                Output.INDICATORS: self.get_indicators(message.get("body", {}).get("content", ""))
                            })
                    else:
                        # This speeds up execution a ton. The Beta endpoint doesn't limit how many messages are returned.
                        # Thus, get out of the loop as soon as we see an old message
                        self.logger.info("End of new messages")
                        break

                last_time_we_checked = temp_time
            else:
                self.logger.info("No new messages found...\n\n")
            time.sleep(params.get("interval", 10))