def within_kremlin(appState, sessionState): txt = 'Вы на территории Новгодоского Кремля. Рассказать про Кремль?' sessionState['context'] = 'within_kremlin' return make_only_response( text=txt, buttons=ph.hi['buttons'] )
def around_kremlin(appState, sessionState): txt = 'Вы рядом с Новгородским Кремлём. Подойдите к Кремлёвским воротам и скажите "Я возле ворот"' sessionState['context'] = 'around_kremlin' return make_only_response( text=txt, buttons=[{ 'title': "Я возле ворот", 'hide': True }] )
def kupol_story(state): txt = 'Купол этот не простой...Идём к Кащею?' state['context'] = 'kupol_story' return make_only_response( text=txt, buttons=ph.hi['buttons'] )
def begin(state): txt = 'Жил был Сдако... Рассказать про купол?' state['context'] = 'begin' return make_only_response( text=txt, buttons=ph.hi['buttons'] )
def give_direction(data, sessionState, appState): # Контент для ответа txt = data[0] tts = data[1] # картинка?? buttons = [ { 'title': "Повтори", 'hide': False }, { 'title': "Да", 'hide': False }, { 'title': "Нет", 'hide': False }, ] # Работа со стейтом sessionState['nav_context'] = 'give_direction' nav_step = sessionState.get('nav_step') if nav_step is None or nav_step == 'null': sessionState['nav_step'] = 1 else: sessionState['nav_step'] += 1 return make_only_response( text=txt, # tts=tts, buttons=buttons)
def ask_geo(state): state['geo_asked'] = True; state['context'] = 'ask_geo'; return make_only_response( text = ph.needgeo['txt'], tts = ph.needgeo['tts'], directives = True, )
def somewhere(appState, sessionState): txt = 'Вы очень далеко от Новгородского Кремля. Продолжить в режиме повествования?' sessionState['context'] = 'somewhere' sessionState['story_mode'] = True appState['step'] = 0 return make_only_response( text=txt, buttons=ph.hi['buttons'] )
def welcome(state, appStateClear=False, appState=False): state['context'] = 'welcome' if appStateClear: for key in appState: appState[key]='null' return make_only_response( text=ph.hi['txt'], buttons=ph.hi['buttons'] )
def quest(appState, sessionState): sessionState['context'] = 'quest' appState['step'] = 0 appState['place_seen'] = 'kupol' to_target = sights['kupol']['to_tip_name'] txt = 'Покатился клубок к {}. Следуй за ним. Как дойдешь - скажи "Я на месте". А пока идём могу тебе про это место рассказать. Интересно?'.format(to_target) return make_only_response( text=txt, buttons=ph.quest['buttons'] )
def give_direction_last(data, sessionState, appState, add_text=None): # Контент для ответа if add_text is not None: txt = add_text[0] + '\n' + data[0] tts = add_text[1] + '\n' + data[1] else: txt = data[0] tts = data[1] # картинка?? buttons = [ { 'title': "Где я?", 'hide': False }, { 'title': "Я на месте", 'hide': False }, { 'title': "Повтори", 'hide': False }, ] # Работа со стейтом sessionState['nav_context'] = 'give_direction_last' nav_step = sessionState.get('nav_step') if nav_step is None or nav_step == 'null': sessionState['nav_step'] = 1 else: sessionState['nav_step'] += 1 return make_only_response( text=txt, # tts=tts, buttons=buttons)
def bye(): return make_only_response( text='Пока-пока', end_session=True )
def fallback(command): txt='Вы молвили {}. Команда не распознана. Поробуйте ещё раз'.format(command) return make_only_response( text = txt, )
def continue_game(state): state['context'] = 'continue_game'; return make_only_response( text = 'У вас есть сохранённый прогресс. Продолжить?', buttons=ph.hi['buttons'] )
def say_help(): txt=ph.help_['txt'] return make_only_response( text=txt )
def say(txt="wawa"): return make_only_response( text=txt )
def navigation(appState, sessionState, intents, user_location, event={}): # Запоминаем ключевые данные из state step = sessionState.get('nav_step', 0) place_seen = appState.get('place_seen') place = quest_order[ 0] if place_seen is None or place_seen == 'null' else place_seen nav_context = sessionState.get('nav_context') story_mode = sessionState.get('story_mode') sessionState['context'] = 'navigation' appState['place_seen'] = place data = find_object[place] # Сказать полюзователю куда идти if step == 0: return give_direction(data[0], sessionState, appState) # Рассказать про место, куда он идёт if nav_context == 'give_direction': if 'YANDEX.CONFIRM' in intents: return tell_story(data[1], sessionState, appState) if 'YANDEX.REJECT' in intents: return give_direction_last(data[3], sessionState, appState) # Историческая справка, про то куда он идёт if nav_context == 'tell_story': if 'YANDEX.CONFIRM' in intents: return give_direction_last(data[3], sessionState, appState, add_text=data[2]) if 'YANDEX.REJECT' in intents: return give_direction_last(data[3], sessionState, appState) # обработка "Где я?" if 'where_am_i' in intents: if user_location is not None and user_location[ 'accuracy'] < 50 and story_mode == False: # если геолокация есть и погрешность не больше 50 метров мы не в режиме истории target = sights[place] distance = get_distance_to_object(user_location, target['location']) if distance > 50: return give_direction_last(data[4], sessionState, appState) if distance < 50: return give_direction_last(data[5], sessionState, appState) else: if story_mode == True: # если мы в режиме истории, то переходим к следующему объекту return give_direction_last(data[5], sessionState, appState) else: # если геолокации нет или слишком большая погредшность, то даём подсказку return give_direction_last(data[4], sessionState, appState) # обработка "Я на месте" if 'i_am_here' in intents: return person(event=event, step=appState['step'], place=appState['place_seen'], status=appState.get('status')) return make_only_response(text='жопа-жопа-жопа-жопа', )