diff --git a/rasa/actions/daily_breakfast.py b/rasa/actions/daily_breakfast.py index 08f4e07..0b95784 100644 --- a/rasa/actions/daily_breakfast.py +++ b/rasa/actions/daily_breakfast.py @@ -15,20 +15,10 @@ def name(self): return "action_daily_breakfast" def run(self, dispatcher, tracker, domain): - messages = [] - - day = time.strftime('%A', time.localtime()) - - tracker_state = tracker.current_state() - logging.warning(tracker_state) - sender_id = tracker_state['sender_id'] + day = self.get_current_day() try: - response = requests.get( - 'http://webcrawler-ru.botlino.com.br/cardapio/{}/desjejum' - .format(day), - timeout=1 - ).json() + menu = self.request_menu(day) except TimeoutError as timeouterror: dispatcher.utter_message( "Tentei pegar o cardápio mas minha net não cooperou..." @@ -43,47 +33,74 @@ def run(self, dispatcher, tracker, domain): ) return [] - lunch_menu = "" + menu_messages = self.format_menu(menu) + + welcome_message = 'Eai! Então... Pro café, nós teremos: ' + + sender_id = self.get_sender_id(tracker) + + data = self.request_user_data(sender_id, welcome_message) + + if not data['ok']: + dispatcher.utter_message(welcome_message) + self.send_messages_to_facebook(dispatcher, menu_messages) + else: + self.send_messages_to_telegram(sender_id, menu_messages) + + return [] + + def get_current_day(self): + return time.strftime('%A', time.localtime()) - for label in response: + def get_sender_id(self, tracker): + tracker_state = tracker.current_state() + logging.warning(tracker_state) + return tracker_state['sender_id'] + + def request_menu(self, day): + return requests.get( + 'http://webcrawler-ru.botlino.com.br/cardapio/{}/desjejum' + .format(day), + timeout=1 + ).json() + + def format_menu(self, menu): + formatted_menu = "" + messages = [] + + for label in menu: dish = str( '*' + label + '*' + ': ' + - response[label] + '\n') - lunch_menu += dish - - messages.append(lunch_menu) + menu[label] + '\n') + formatted_menu += dish - welcome_message = 'Eai! Então... Pro café, nós teremos: ' + messages.append(formatted_menu) + return messages + def request_user_data(self, sender_id, message): data = requests.post( '{}/bot{}/sendMessage' .format(API_URL, ACCESS_TOKEN), data={ 'chat_id': sender_id, - 'text': welcome_message + 'text': message } ).json() - messenger = "" - # Check user is from Telegram or Facebook - if not data['ok']: - dispatcher.utter_message(welcome_message) - messenger = "Facebook" - else: - messenger = "Telegram" - - if(messenger == "Telegram"): - for message in messages: - requests.post( - '{}/bot{}/sendMessage' - .format(API_URL, ACCESS_TOKEN), - data={ - 'chat_id': sender_id, - 'text': message, - 'parse_mode': PARSE - } - ) - elif(messenger == "Facebook"): - for message in messages: - dispatcher.utter_message(message) - return [] + return data + + def send_messages_to_telegram(self, sender_id, messages): + for message in messages: + requests.post( + '{}/bot{}/sendMessage' + .format(API_URL, ACCESS_TOKEN), + data={ + 'chat_id': sender_id, + 'text': message, + 'parse_mode': PARSE + } + ) + + def send_messages_to_facebook(self, dispatcher, messages): + for message in messages: + dispatcher.utter_message(message) diff --git a/rasa/actions/daily_dinner.py b/rasa/actions/daily_dinner.py index 27ebcfc..0817afd 100644 --- a/rasa/actions/daily_dinner.py +++ b/rasa/actions/daily_dinner.py @@ -15,20 +15,10 @@ def name(self): return "action_daily_dinner" def run(self, dispatcher, tracker, domain): - messages = [] - - day = time.strftime('%A', time.localtime()) - - tracker_state = tracker.current_state() - logging.warning(tracker_state) - sender_id = tracker_state['sender_id'] + day = self.get_current_day() try: - response = requests.get( - 'http://webcrawler-ru.botlino.com.br/cardapio/{}/jantar' - .format(day), - timeout=3 - ).json() + menu = self.request_menu(day) except TimeoutError as timeouterror: dispatcher.utter_message( "Tentei pegar o cardápio mas minha net não cooperou..." @@ -43,47 +33,74 @@ def run(self, dispatcher, tracker, domain): ) return [] - lunch_menu = "" + menu_messages = self.format_menu(menu) + + welcome_message = 'Eai! Então... Pro jantar, nós teremos: ' + + sender_id = self.get_sender_id(tracker) + + data = self.request_user_data(sender_id, welcome_message) - for label in response: + if not data['ok']: + dispatcher.utter_message(welcome_message) + self.send_messages_to_facebook(dispatcher, menu_messages) + else: + self.send_messages_to_telegram(sender_id, menu_messages) + + return [] + + def get_current_day(self): + return time.strftime('%A', time.localtime()) + + def get_sender_id(self, tracker): + tracker_state = tracker.current_state() + logging.warning(tracker_state) + return tracker_state['sender_id'] + + def request_menu(self, day): + return requests.get( + 'http://webcrawler-ru.botlino.com.br/cardapio/{}/jantar' + .format(day), + timeout=3 + ).json() + + def format_menu(self, menu): + formatted_menu = "" + messages = [] + + for label in menu: dish = str( - '*' + label + '*' + ' ' + response[label] + '\n' + '*' + label + '*' + ' ' + menu[label] + '\n' ) - lunch_menu += dish + formatted_menu += dish - messages.append(lunch_menu) - - welcome_message = 'Eai! Então... Pro jantar, nós teremos: ' + messages.append(formatted_menu) + return messages + def request_user_data(self, sender_id, message): data = requests.post( '{}/bot{}/sendMessage' .format(API_URL, ACCESS_TOKEN), data={ 'chat_id': sender_id, - 'text': welcome_message + 'text': message } ).json() - messenger = "" - # Check user is from Telegram or Facebook - if not data['ok']: - dispatcher.utter_message(welcome_message) - messenger = "Facebook" - else: - messenger = "Telegram" - - if(messenger == "Telegram"): - for message in messages: - requests.post( - '{}/bot{}/sendMessage' - .format(API_URL, ACCESS_TOKEN), - data={ - 'chat_id': sender_id, - 'text': message, - 'parse_mode': PARSE - } - ) - elif(messenger == "Facebook"): - for message in messages: - dispatcher.utter_message(message) - return [] + return data + + def send_messages_to_telegram(self, sender_id, messages): + for message in messages: + requests.post( + '{}/bot{}/sendMessage' + .format(API_URL, ACCESS_TOKEN), + data={ + 'chat_id': sender_id, + 'text': message, + 'parse_mode': PARSE + } + ) + + def send_messages_to_facebook(self, dispatcher, messages): + for message in messages: + dispatcher.utter_message(message) diff --git a/rasa/actions/daily_lunch.py b/rasa/actions/daily_lunch.py index 47da765..ec3b87c 100644 --- a/rasa/actions/daily_lunch.py +++ b/rasa/actions/daily_lunch.py @@ -15,20 +15,14 @@ def name(self): return "action_daily_lunch" def run(self, dispatcher, tracker, domain): - messages = [] - - day = time.strftime('%A', time.localtime()) + day = self.get_current_day() tracker_state = tracker.current_state() logging.warning(tracker_state) sender_id = tracker_state['sender_id'] try: - response = requests.get( - 'http://webcrawler-ru.botlino.com.br/cardapio/{}/almoço' - .format(day), - timeout=3 - ).json() + menu = self.request_menu(day) except TimeoutError as timeouterror: dispatcher.utter_message( "Tentei pegar o cardápio mas minha net não cooperou..." @@ -43,47 +37,74 @@ def run(self, dispatcher, tracker, domain): ) return [] - lunch_menu = "" + menu_messages = self.format_menu(menu) + + welcome_message = 'Eai! Então... Pro almoço, nós teremos: ' + + sender_id = self.get_sender_id(tracker) + + data = self.request_user_data(sender_id, welcome_message) + + if not data['ok']: + dispatcher.utter_message(welcome_message) + self.send_messages_to_facebook(dispatcher, menu_messages) + else: + self.send_messages_to_telegram(sender_id, menu_messages) + + return [] + + def get_current_day(self): + return time.strftime('%A', time.localtime()) + + def get_sender_id(self, tracker): + tracker_state = tracker.current_state() + logging.warning(tracker_state) + return tracker_state['sender_id'] + + def request_menu(self, day): + return requests.get( + 'http://webcrawler-ru.botlino.com.br/cardapio/{}/almoço' + .format(day), + timeout=3 + ).json() + + def format_menu(self, menu): + formatted_menu = "" + messages = [] - for label in response: + for label in menu: dish = str( - '*' + label + '*' + ' ' + response[label] + '\n' + '*' + label + '*' + ' ' + menu[label] + '\n' ) - lunch_menu += dish - - messages.append(lunch_menu) + formatted_menu += dish - welcome_message = 'Eai! Então... Pro almoço, nós teremos: ' + messages.append(formatted_menu) + return messages + def request_user_data(self, sender_id, message): data = requests.post( '{}/bot{}/sendMessage' .format(API_URL, ACCESS_TOKEN), data={ 'chat_id': sender_id, - 'text': welcome_message + 'text': message } ).json() - messenger = "" - # Check user is from Telegram or Facebook - if not data['ok']: - dispatcher.utter_message(welcome_message) - messenger = "Facebook" - else: - messenger = "Telegram" - - if(messenger == "Telegram"): - for message in messages: - requests.post( - '{}/bot{}/sendMessage' - .format(API_URL, ACCESS_TOKEN), - data={ - 'chat_id': sender_id, - 'text': message, - 'parse_mode': PARSE - } - ) - elif(messenger == "Facebook"): - for message in messages: - dispatcher.utter_message(message) - return [] + return data + + def send_messages_to_telegram(self, sender_id, messages): + for message in messages: + requests.post( + '{}/bot{}/sendMessage' + .format(API_URL, ACCESS_TOKEN), + data={ + 'chat_id': sender_id, + 'text': message, + 'parse_mode': PARSE + } + ) + + def send_messages_to_facebook(self, dispatcher, messages): + for message in messages: + dispatcher.utter_message(message) diff --git a/rasa/actions/daily_menu.py b/rasa/actions/daily_menu.py index f4d398a..eb6b52e 100644 --- a/rasa/actions/daily_menu.py +++ b/rasa/actions/daily_menu.py @@ -11,15 +11,10 @@ def name(self): def run(self, dispatcher, tracker, domain): messages = [] - day = time.strftime('%A', time.localtime()) + day = self.get_current_day() - # Change the url if you have your own webcrawler server try: - response = requests.get( - 'http://webcrawler-ru.botlino.com.br/cardapio/{}' - .format(day), - timeout=3 - ).json() + full_menu = self.request_menu(day) except TimeoutError as timeouterror: dispatcher.utter_message( "Tentei pegar o cardápio mas minha net não cooperou..." @@ -35,44 +30,44 @@ def run(self, dispatcher, tracker, domain): return [] messages.append('Eai! Então... Pro café da manhã, nós teremos: ') - - breakfast_block = "" - - for label in response['DESJEJUM']: - cell = str(label + ': ' + response['DESJEJUM'][label] + '\n') - breakfast_block += cell - - messages.append(breakfast_block) + meal_name = 'DESJEJUM' + breakfast_menu = self.format_menu(full_menu, meal_name) + messages.append(breakfast_menu) messages.append('Já, para o almoço, teremos: ') - - lunch_block = "" - - for label in response['ALMOÇO']: - cell = str(label + ' ' + response['ALMOÇO'][label] + '\n') - lunch_block += cell - - messages.append(lunch_block) + meal_name = 'ALMOÇO' + lunch_menu = self.format_menu(full_menu, meal_name) + messages.append(lunch_menu) messages.append('E para a janta...') + meal_name = 'JANTAR' + dinner_menu = self.format_menu(full_menu, meal_name) + messages.append(dinner_menu) - dinner_block = "" + self.send_messages(dispatcher, messages) - for label in response['JANTAR']: - cell = str(label + ' ' + response['JANTAR'][label] + '\n') - dinner_block += cell + return [] - messages.append(dinner_block) + def get_current_day(self): + return time.strftime('%A', time.localtime()) - for message in messages: - dispatcher.utter_message(message) + def request_menu(self, day): + # Change the url if you have your own webcrawler server + return requests.get( + 'http://webcrawler-ru.botlino.com.br/cardapio/{}' + .format(day), + timeout=3 + ).json() - return [] + def format_menu(self, full_menu, meal_name): + menu = "" + for label in full_menu[meal_name]: + dish = str(label + ' ' + full_menu[meal_name][label] + '\n') + menu += dish -class ActionNextMeal(Action): - def name(self): - return "action_next_meal" + return menu - def run(self, dispatcher, tracker, domain): - pass + def send_messages(self, dispatcher, messages): + for message in messages: + dispatcher.utter_message(message)