Ejemplo n.º 1
0
 def __init__(self, user_id: str):
     """
     :type user_id: str
     :param user_id: current user_id of the particular user from Facebook
     """
     self.user_id = user_id
     self.utility = MessengerUtility()
Ejemplo n.º 2
0
class BotUtility:

    def __init__(self):
        self.bot_config = BotConfig()
        self.messenger_utility = MessengerUtility()
        self.url = self.bot_config.facebook_graph_api + self.bot_config.access_token

    def send_typing_on(self, user_id, typing_on: float = 2) -> None:
        """
        sends typing_on message on messenger. by default typing_on is 2 seconds
        """
        typing_on_payload = self.messenger_utility.typing_on(
            user_id, typing_on)
        self.send_message(typing_on_payload)
        import time
        time.sleep(typing_on)

    def send_message(self, payload) -> None:
        """
        This functions handels the messaging!
        """
        if payload is not None:
            status = requests.post(self.url, json=payload)
            if status is None:
                logging.error("Error - status is None")
            else:
                if status.status_code != 200:
                    logging.critical(status.text)

    def get_user_name(self, user_id: str) -> tuple:
        """
        gets the user details (first, last and middle name) from facebook's graph API using user_id
        """
        error_payload = (None,) * 3
        get_user_details_url = self.bot_config.facebook_profile_url + \
            user_id + '?access_token=' + self.bot_config.access_token

        user_details = requests.get(get_user_details_url)
        if user_details is None:
            return error_payload
        elif user_details.status_code == 200:
            user_details = user_details.json()
            print(user_details)

            first_name = user_details['first_name'] if 'first_name' in user_details else ''
            last_name = user_details['last_name'] if 'last_name' in user_details else ''
            gender = user_details['gender'] if 'gender' in user_details else ''
            return (first_name, last_name, gender)
        else:
            return error_payload
Ejemplo n.º 3
0
class BasicReply:
    def __init__(self):
        self.sql_handler = SqlHandler()
        self.bot_utility = BotUtility()
        self.basic_nlp = BasicNLP()
        self.messenger_utility = MessengerUtility()

    def basic_reply(self, message):
        """
        handles basic text reply from the USER!
        :param message:
        :return:
        """
        sender_id = message[Constant.FB_SENDER][Constant.FB_ID]
        timestamp = message["timestamp"]
        uniqueness_test = self.sql_handler.set_last_contacted_and_watermark(
            sender_id, timestamp)

        if not uniqueness_test:
            return JsonResponse({})

        if 'message' in message:
            nlp = message['message']['nlp'] if 'nlp' in message[
                'message'] else None
            nlp_state = None
            if nlp is not None:
                text, nlp_state = self.basic_nlp.messenger_nlp(nlp)
                if text is not None:
                    text += " {}".format(
                        self.sql_handler.get_first_name(sender_id))
                    payload = self.messenger_utility.basic_text_reply_payload(
                        sender_id, text)
                    self.bot_utility.send_typing_on(sender_id, 2.5)
                    self.bot_utility.send_message(payload)

            if nlp_state in (None, "greetings"):
                """
                Only send the menu if it's a greeting or user sent a random message on board.
                """
                self.bot_utility.send_typing_on(sender_id, 2.5)
                # ---- TODO ----
                # payload = self.payload_generator.intro_generic_template(
                #     facebook_id=sender_id)
                # self.bot_utility.send_message(payload)
        else:
            print(message)
Ejemplo n.º 4
0
 def __init__(self):
     self.sql_handler = SqlHandler()
     self.bot_utility = BotUtility()
     self.basic_nlp = BasicNLP()
     self.messenger_utility = MessengerUtility()
Ejemplo n.º 5
0
 def __init__(self):
     self.bot_config = BotConfig()
     self.messenger_utility = MessengerUtility()
     self.url = self.bot_config.facebook_graph_api + self.bot_config.access_token