def ask_city(): yield say('А в каком городе ты живёшь?') while True: if names_repository.try_get_city(request.command) is not None: return request.command yield say('Я не знаю такого города. Назови его полное название.')
def ask_if_greater_than(number): yield say(f'Ваше число больше {number}?', suggest('Ну да', 'Вроде нет')) while not request.has_lemmas('да', 'ага', 'нет', 'не'): yield say('Я вас не поняла. Скажите "да" или "нет"') return not request.has_lemmas('нет', 'не')
def add_tags(profile): yield say('Расскажи, где ты работаешь или учишься?') profile['occupation'] = filter_stop_words(request.lemmas) yield say('Чем ты занимаешься в свободное время? Какие у тебя хобби?') profile['hobbies'] = filter_stop_words(request.lemmas) yield say('Какую музыку ты слушаешь? Назови пару исполнителей.') profile['music'] = filter_stop_words(request.lemmas)
def ask_name(): yield say('Я смогу тебе помочь! Как тебя зовут?', 'Отлично! Назови свое имя.') while True: name = names_repository.try_get_name(request.command) if name is not None: return name yield say('Первый раз слышу такое имя. Назови как в паспорте написано.')
def ask_gender(): yield say('Привет! Кого ты ищешь - девушку или парня?', 'Привет, кого будем искать? Девушку или парня?', suggest('Девушку', 'Парня')) while True: if request.has_lemmas('парень', 'человек', 'мч', 'мужчина'): return 'female' if request.has_lemmas('девушка', 'женщина'): return 'male' yield say('Скажи или слово "девушка", или слово "парень"', suggest('Девушка', 'Парень'))
def ask_phone(): yield say('Отлично! Тебе осталось сообщить свой номер телефона. Начинай с "восьмёрки". ' + 'Я проигнорирую все слова в твоей фразе, кроме чисел.') while True: phone = re.sub(r'\D', r'', request.command) yield say('Я правильно распознала твой номер телефона?', suggest('Правильно', 'Давай ещё раз')) if request.has_lemmas('да', 'правильно'): return phone yield say('Скажи свой номер ещё раз')
def ask_age(): yield say('Сколько тебе лет?', 'Назови свой возраст.') while True: if not re.fullmatch(r'\d+', request.command): yield say('Назови число') continue age = int(request.command) if age < 18: yield say('Навык доступен только для людей не младше 18 лет, сорри :(', end_session=True) return None if age > 100: yield say('Выглядишь моложе. Назови свой настоящий возраст :)') continue return age
def run_script(): yield say('Загадайте число от 1 до 100, а я его отгадаю. Готовы?') lo, hi = 1, 100 while lo < hi: middle = (lo + hi) // 2 yield say(f'Ваше число больше {middle}?', suggest('Ну да', 'Вроде нет')) while not request.has_lemmas('да', 'ага', 'нет', 'не'): yield say('Я вас не поняла. Скажите "да" или "нет"') if request.has_lemmas('нет', 'не'): hi = middle else: lo = middle + 1 yield say(f'Думаю, вы загадали число {lo}!', end_session=True)
def run_script(): yield from say_hi() lo, hi = 1, 100 while lo < hi: middle = (lo + hi) // 2 if (yield from ask_if_greater_than(middle)): lo = middle + 1 else: hi = middle yield say(f'Думаю, вы загадали число {lo}!', end_session=True)
def add_to_db(profile): session_id = request.session_id with profile_lock: profiles[session_id] = profile with open('profiles.json', 'w') as f: json.dump(profiles, f) if profile['gender'] == 'male': text = 'Ура, я добавила тебя в базу! ' + \ 'Как только навыком воспользуется подходящая тебе девушка, я сообщу ей твои контакты!' else: text = 'Ура, я добавила тебя в базу! ' + \ 'Как только навыком воспользуется подходящий тебе парень, я сообщу ему твои контакты!' yield say(text, end_session=True)
def show_match(profile, best_candidate): if profile['gender'] == 'male': text = 'Кажется, я знаю одну девушку, которая может тебе понравиться. Её зовут {}, ей {}. ' \ 'Ты можешь позвонить ей по номеру: {}.'.format( best_candidate['name'].capitalize(), best_candidate['age'], best_candidate['phone']) else: text = 'Кажется, я знаю одного парня, который может тебе понравиться. Его зовут {}, ему {}. ' \ 'Ты можешь позвонить ему по номеру: {}.'.format( best_candidate['name'].capitalize(), best_candidate['age'], best_candidate['phone']) commons = set(profile['hobbies']) & set(best_candidate['hobbies']) if commons: text += '\n\nУ вас есть общие хобби: {}.'.format(', '.join(commons)) commons = set(profile['music']) & set(best_candidate['music']) if commons: text += '\n\nВы любите одну и ту же музыку, например: {}.'.format(', '.join(commons)) yield say(text, end_session=True)
def run_script(): yield say('Добрый день! Как вас зовут?') name = request.command yield say('Сколько вам лет?') while not request.matches(r'\d+'): yield say('Я вас не поняла. Скажите число') age = int(request.command) yield say('Вы любите кошек или собак?', suggest('Обожаю кошечек', 'Люблю собак')) while not request.has_lemmas('кошка', 'кошечка', 'собака', 'собачка'): yield say('У вас только два варианта - кошки или собаки') loves_cats = request.has_lemmas('кошка', 'кошечка') yield say( f'Рада познакомиться, {name}! Когда вам ' f'исполнится {age + 1}, я могу подарить ' f'{"котёнка" if loves_cats else "щенка"}!', end_session=True)
def run_script(): yield say('Добрый день! Как вас зовут?') name = request.command
def say_hi(): yield say('Загадайте число от 1 до 100, а я его отгадаю. Готовы?')
def say_text(text, text_tts='', end_session=False): # say text and check answer for help tts = text_tts if text_tts else text yield say(text, tts=tts, end_session=end_session) if is_request_help(request): yield from say_help()