def handle_quick_reply(user_id, context, cmd): # Yelp YES response to "Do you want more result?" if cmd == 'yelp-more-yes': offset = g.user['yelp_offset'] + 5 Mongo.increment_yelp_offset(users, g.user, 5) # actually update result = yelp_search(context['terms'], context['location'], context['coordinates'], 5, offset) if result['status'] == 1: # Successful search FB.send_message(app.config['PAT'], user_id, "Okay, I've found %s places:"%(len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "That's all I found for now :)" # Yelp NO response to "Do you want more result?" elif cmd == 'yelp-more-no': context = g.user['contexts'][-1] Mongo.reset_yelp_offset(users, g.user) if context['location_from_memory'] == 1: Mongo.pop_context(users, g.user) return "Glad I can help :)" if context['context'] == 'find-food' and context['location'] is not None and context['coordinates'] is not None: latest_location = context['location'] FB.send_quick_replies_yelp_save_location(app.config['PAT'], user_id, latest_location) return 'pseudo' elif context['context'] == 'find-food' and context['coordinates'] is not None and context['location'] is None: # Suggest saving this location FB.send_quick_replies_yelp_save_location(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) return "Glad I can help :)" # Yelp YES response to "Do you want to save this location" elif cmd == 'yelp-save-location-yes': context = g.user['contexts'][-1] latest_coords = context['coordinates'] latest_location = context['location'] if context['location'] == None: # A search with only coordinates contextNow = {'context':'yelp-rename', 'name': 'untitled', 'coordinates': latest_coords, } Mongo.pop_context(users, g.user) # pop find-food context Mongo.add_context(users, g.user, contextNow) return "What do you want to call it? :D" else: Mongo.add_yelp_location_history(users, g.user, latest_coords, latest_location) Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "Ta da! I wrote it to my cloudy memory :D" # Yelp NO response to "Do you want to save this location" elif cmd == 'yelp-save-location-no': Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "OK (y) Hope you like those places I found :D" # Yelp RENAME response to "Do you want to save this location" elif cmd == 'yelp-save-location-rename': context = g.user['contexts'][-1] latest_location = context['location'] latest_coords = context['coordinates'] contextNow = {'context':'yelp-rename', 'name': latest_location, 'coordinates': latest_coords, } Mongo.pop_context(users, g.user) # pop find-food context Mongo.add_context(users, g.user, contextNow) return "What do you want to call it? :D" # Yelp choose one of the saved location elif 'yelp-cached-location-' in cmd: idx = int(cmd[-1]) # last character of payload string code location = get_recent_locations_yelp(idx) FB.send_message(app.config['PAT'], user_id, "Looking around %s :D"%(location['name'])) message = {} message['data'] = location['coordinates'] return handle_find_food(user_id, context, None, None, message, None, 'receive_location_gps', 1)
def handle_quick_reply(user_id, context, cmd): # Yelp YES response to "Do you want more result?" if cmd == 'yelp-more-yes': offset = g.user['yelp_offset'] + 5 Mongo.increment_yelp_offset(users, g.user, 5) # actually update result = yelp_search(context['terms'], context['location'], context['coordinates'], 5, offset) if result['status'] == 1: # Successful search FB.send_message( app.config['PAT'], user_id, "Okay, I've found %s places:" % (len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "That's all I found for now :)" # Yelp NO response to "Do you want more result?" elif cmd == 'yelp-more-no': context = g.user['contexts'][-1] Mongo.reset_yelp_offset(users, g.user) if context['location_from_memory'] == 1: Mongo.pop_context(users, g.user) return "Glad I can help :)" if context['context'] == 'find-food' and context[ 'location'] is not None and context['coordinates'] is not None: latest_location = context['location'] FB.send_quick_replies_yelp_save_location(app.config['PAT'], user_id, latest_location) return 'pseudo' elif context['context'] == 'find-food' and context[ 'coordinates'] is not None and context['location'] is None: # Suggest saving this location FB.send_quick_replies_yelp_save_location(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) return "Glad I can help :)" # Yelp YES response to "Do you want to save this location" elif cmd == 'yelp-save-location-yes': context = g.user['contexts'][-1] latest_coords = context['coordinates'] latest_location = context['location'] if context['location'] == None: # A search with only coordinates contextNow = { 'context': 'yelp-rename', 'name': 'untitled', 'coordinates': latest_coords, } Mongo.pop_context(users, g.user) # pop find-food context Mongo.add_context(users, g.user, contextNow) return "What do you want to call it? :D" else: Mongo.add_yelp_location_history(users, g.user, latest_coords, latest_location) Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "Ta da! I wrote it to my cloudy memory :D" # Yelp NO response to "Do you want to save this location" elif cmd == 'yelp-save-location-no': Mongo.pop_context(users, g.user) Mongo.reset_yelp_offset(users, g.user) return "OK (y) Hope you like those places I found :D" # Yelp RENAME response to "Do you want to save this location" elif cmd == 'yelp-save-location-rename': context = g.user['contexts'][-1] latest_location = context['location'] latest_coords = context['coordinates'] contextNow = { 'context': 'yelp-rename', 'name': latest_location, 'coordinates': latest_coords, } Mongo.pop_context(users, g.user) # pop find-food context Mongo.add_context(users, g.user, contextNow) return "What do you want to call it? :D" # Yelp choose one of the saved location elif 'yelp-cached-location-' in cmd: idx = int(cmd[-1]) # last character of payload string code location = get_recent_locations_yelp(idx) FB.send_message(app.config['PAT'], user_id, "Looking around %s :D" % (location['name'])) message = {} message['data'] = location['coordinates'] return handle_find_food(user_id, context, None, None, message, None, 'receive_location_gps', 1)
def handle_find_food(user_id, context, sentence, nounPhrase, message, incomingMessage, stage, location_from_memory=0): if stage == 'receive_request': # "Stage 1" contextNow = {'context':'find-food', 'location': None, 'coordinates': None, 'terms': nounPhrase, 'location_from_memory': location_from_memory } Mongo.add_context(users, g.user, contextNow) FB.send_message(app.config['PAT'], user_id, "Can you send me your location? :D") if len(g.user['yelp_location_history']) > 0: FB.send_quick_replies_yelp_suggest_location(app.config['PAT'], user_id, get_recent_locations_yelp()) return 'pseudo' elif stage == 'receive_location_gps': # "Stage 2-GPS" if location_from_memory == 1: Mongo.update_context(users, g.user, 'find-food', 'location_from_memory', 1) location = message['data'] Mongo.update_context(users, g.user, 'find-food', 'coordinates', location) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) FB.show_typing(app.config['PAT'], user_id) result = yelp_search(context['terms'], None, location) FB.show_typing(app.config['PAT'], user_id, 'typing_off') if result['status'] == 1: FB.send_message(app.config['PAT'], user_id, "Okay, I've found %s places:"%(len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: return "Sorry I couldn't find anything :(" elif stage == 'receive_location_text': # "Stage 2 - Text" if context['location'] == None and context['coordinates'] == None: context['location'] = nounPhrase try: geolocator = Nominatim() location_lookup = geolocator.geocode(nounPhrase) coords = [location_lookup.latitude, location_lookup.longitude] Mongo.update_context(users, g.user, 'find-food', 'coordinates', coords) Mongo.update_context(users, g.user, 'find-food', 'location', nounPhrase) FB.show_typing(app.config['PAT'], user_id) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) result = yelp_search(context['terms'], None, coords) except Exception, e: print e Mongo.update_context(users, g.user, 'find-food', 'location', nounPhrase) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) result = yelp_search(context['terms'], nounPhrase) FB.show_typing(app.config['PAT'], user_id, 'typing_off') if result['status'] == 1: # Successful search FB.send_message(app.config['PAT'], user_id, "Okay, I've found %s places:"%(len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) return "Sorry I can't find any results for that :(" # Follow up? else: Mongo.pop_context(users, g.user) return
def handle_find_food(user_id, context, sentence, nounPhrase, message, incomingMessage, stage, location_from_memory=0): if stage == 'receive_request': # "Stage 1" contextNow = { 'context': 'find-food', 'location': None, 'coordinates': None, 'terms': nounPhrase, 'location_from_memory': location_from_memory } Mongo.add_context(users, g.user, contextNow) FB.send_message(app.config['PAT'], user_id, "Can you send me your location? :D") if len(g.user['yelp_location_history']) > 0: FB.send_quick_replies_yelp_suggest_location( app.config['PAT'], user_id, get_recent_locations_yelp()) return 'pseudo' elif stage == 'receive_location_gps': # "Stage 2-GPS" if location_from_memory == 1: Mongo.update_context(users, g.user, 'find-food', 'location_from_memory', 1) location = message['data'] Mongo.update_context(users, g.user, 'find-food', 'coordinates', location) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) FB.show_typing(app.config['PAT'], user_id) result = yelp_search(context['terms'], None, location) FB.show_typing(app.config['PAT'], user_id, 'typing_off') if result['status'] == 1: FB.send_message( app.config['PAT'], user_id, "Okay, I've found %s places:" % (len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: return "Sorry I couldn't find anything :(" elif stage == 'receive_location_text': # "Stage 2 - Text" if context['location'] == None and context['coordinates'] == None: context['location'] = nounPhrase try: geolocator = Nominatim() location_lookup = geolocator.geocode(nounPhrase) coords = [location_lookup.latitude, location_lookup.longitude] Mongo.update_context(users, g.user, 'find-food', 'coordinates', coords) Mongo.update_context(users, g.user, 'find-food', 'location', nounPhrase) FB.show_typing(app.config['PAT'], user_id) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) result = yelp_search(context['terms'], None, coords) except Exception, e: print e Mongo.update_context(users, g.user, 'find-food', 'location', nounPhrase) FB.send_message(app.config['PAT'], user_id, NLP.oneOf(NLP.looking_replies)) result = yelp_search(context['terms'], nounPhrase) FB.show_typing(app.config['PAT'], user_id, 'typing_off') if result['status'] == 1: # Successful search FB.send_message( app.config['PAT'], user_id, "Okay, I've found %s places:" % (len(result['businesses']))) FB.send_yelp_results(app.config['PAT'], user_id, result['businesses']) FB.send_quick_replies_yelp_search(app.config['PAT'], user_id) return 'pseudo' else: Mongo.pop_context(users, g.user) return "Sorry I can't find any results for that :(" # Follow up? else: Mongo.pop_context(users, g.user) return