예제 #1
0
 def standup_mode(self, req: Request):
     if 'end.report' in req.intents():
         self.call_next(req.user_id())
     elif req.command().startswith('запомни тему '):
         self.add_theme(req)
     elif self.end_standup_re.match(req.command()):
         self.end_standup(req.user_id())
     elif req.command() == 'продолжить':
         self.response['text'] = ' '  # Игнорируем не команды
         self.response['tts'] = self.tts()
     elif 'skip.person' in req.intents():
         self.response['text'] = 'Хорошо, пропускаю.\n'
         self.response['tts'] = 'хорошо , пропускаю .'
         self.call_next(req.user_id())
     else:
         self.response['text'] = 'Не смогла распознать команду. Во время проведения стендапа могу ' \
                                 'распознать следующие команды: "у меня всё", "продолжить", ' \
                                 '"его|её сегодня нет", "запомнить тему ТЕМА", "закончи стендап"'
예제 #2
0
 def add_team_member_no_intent(self, req: Request):
     # command should be: Добавь в команду человека с именем ИМЯ и фамилией ФАМИЛИЯ
     split_lastname = req.command().split(' и фамилией ')
     names = {}
     if len(split_lastname) > 1:
         names['last_name'] = split_lastname[1]
     split_name = split_lastname[0].split(' с именем ')
     if len(split_name) != 2:
         self.response[
             'text'] = 'К сожалению я не смогла распознать имя, попробуйте ещё раз'
         return
     names['first_name'] = split_name[1]
     self.connection.add_team_member(req.user_id(), names)
     logging.info('Added %r to %r\'s storage', names, req.user_id())
     self.response['text'] = f'Запомнила человека {names.get("last_name", "").capitalize()} ' \
                             f'{names["first_name"].capitalize()}'
예제 #3
0
    def handle_dialog(self, req: Request):
        if not req.is_authorized(
        ):  # Не умеем работать с неавторизованными пользователями
            self.response['text'] = 'Привет. К сожалению, я не могу работать с неавторизованными пользователями. ' \
                                    'Пожалуйста, зайдите в свой аккаунт и попробуйте снова'
            self.response['end_session'] = True
            return

        # Этот context manager закоммитит транзакцию и вернет соединение в пул
        with self.connection_factory.create_conn() as connection:
            self.connection = connection
            req.user = self.connection.get_user(req.user_id())
            if not req.user:  # Новый пользователь
                self.new_user(req.user_id())
                return

            self.silence_enabled = req.user.silence_enabled

            if 'account_linking_complete_event' in req._req:
                self.response['text'] = 'Вы успешно авторизованны'
                return

            if req.is_session_new():
                self.returning_greeting(req.user_id())
                return

            if req.command() == 'покажи тикеты гитхаб':
                self.list_issues(req, 'github')
                return

            if req.command() == 'покажи тикеты трекер':
                self.list_issues(req, 'tracker')
                return

            if close_issue_command := self.close_issue_re.match(req.command()):
                self.close_issue(req, int(close_issue_command.group(2)),
                                 close_issue_command.group(3))
                return

            if self.connection.check_standup(req.user_id(
            )):  # user_id в текущий момент проводит стендап
                self.standup_mode(req)
                return

            if req.command().startswith('запомни гитхаб'):
                # Original utterance здесь, так как нам нужно именно то,
                # что передали
                self.register_github(req.user_id(), req.original_utterance())
                return

            if req.command().startswith('запомни трекер'):
                self.register_tracker(req.user_id(), req.original_utterance())
                return

            if req.command() == 'авторизуй трекер':
                if 'access_token' in req._req['session']['user']:
                    self.response['text'] = 'Вы уже авторизованны'
                    return
                else:
                    raise AuthorizationRequest()

            if req.command() == 'помощь' or req.command() == 'что ты умеешь':
                self.response['text'] = self.help_message()
                return

            if req.command() == 'помощь продолжение':
                self.response['text'] = self.help_next()
                return

            if req.command() == 'помощь стендап':
                self.response['text'] = self.standup_help()
                return

            if req.command().startswith('добавь в команду человека с именем'):
                self.add_team_member_no_intent(req)
                return

            if req.command() == 'напомни команду':
                self.remind_team(req.user_id())
                return

            if self.begin_standup_re.match(req.command()):
                self.start_standup(req.user_id())
                return

            if req.command() == 'включи тишину':
                self.connection.modify_silence(req.user_id(), True)
                self.response['text'] = 'Тишина включена'
                return
            elif req.command() == 'выключи тишину':
                self.connection.modify_silence(req.user_id(), False)
                self.response['text'] = 'Тишина выключена'
                return

            if req.command() == 'удали команду':
                self.clean_team(req.user_id())
                return

            intents = req.intents()
            if 'team.newmember' in intents:
                self.add_team_member(
                    req.user_id(),
                    intents['team.newmember']['slots']['name']['value'])
                return

            if 'team.delmember' in intents:
                self.del_team_member(
                    req.user_id(),
                    intents['team.delmember']['slots']['name']['value'])
                return

            self.response['text'] = 'Неизвестная команда.'
예제 #4
0
 def add_theme(self, req: Request):
     theme = req.command()[13:]
     self.connection.set_theme_for_current_speaker(req.user_id(), theme)
     self.response['text'] = f'Запомнила тему "{theme}"'
     self.response['tts'] = f'запомнила тему {theme} . {self.tts()}'