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()
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
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)
def __init__(self): self.sql_handler = SqlHandler() self.bot_utility = BotUtility() self.basic_nlp = BasicNLP() self.messenger_utility = MessengerUtility()
def __init__(self): self.bot_config = BotConfig() self.messenger_utility = MessengerUtility() self.url = self.bot_config.facebook_graph_api + self.bot_config.access_token