示例#1
0
        protected override SimpleResponse Respond(AliceRequest request, State state)
        {
            if (!request.HasScreen())
            {
                return(new SimpleResponse
                {
                    Text = "Добавлять вебхуки можно только на устройстве с экраном",
                    Tts = "Добавлять вэбх+уки можно только на устройстве с экраном"
                });
            }

            if (state.User.Webhooks.Count >= 20)
            {
                return(new SimpleResponse
                {
                    Text = "У вас очень много вебхуков, удалите что-нибудь сначала с помощью команды \"Список\"",
                    Tts = "У вас очень много вэбх+уков, удалите что-нибудь сначала с помощью команды - Список",
                    Buttons = new [] { "Список", "Помощь", "Выход" }
                });
            }
            state.Step = Step.AwaitForUrl;
            return(new SimpleResponse
            {
                Text = "Введите URL вебхука:",
                Tts = "Введите URL вэбх+ука",
                Buttons = new [] { "Отмена", "Помощь", "Выход" }
            });
        }
示例#2
0
        protected override SimpleResponse Respond(AliceRequest request, State state)
        {
            if (state.Step == Step.AwaitForKeyword)
            {
                return(new SimpleResponse
                {
                    Text = "Эта ключевая фраза пересекается с одной из команд данного навыка. Выберите, " +
                           "пожалуйста, другую.",
                    Buttons = new [] { "Отмена", "Помощь", "Выход" }
                });
            }

            if (state.User.Webhooks.Count == 0)
            {
                return(new SimpleResponse
                {
                    Text = "У вас пока нет вебхуков. Самое время добавить.",
                    Tts = "У вас пока нет вэбх+уков. Самое время добавить.",
                    Buttons = state.User.Token.IsNullOrEmpty()
                        ? new [] { "Добавить вебхук", "Авторизация", "Помощь", "Выход" }
                        : new [] { "Добавить вебхук", "Помощь", "Выход" }
                });
            }

            var removeFirst = $"Удалить {state.User.Webhooks.First().Phrase.CapitalizeFirst()}";
            var list        = state.User.Webhooks.Select(w => "• " + w.Phrase + ": " + w.Url);

            if (request.HasScreen())
            {
                return(new SimpleResponse
                {
                    Text = $"Вывела на экран ваши вебхуки:\n\n {list.Join("\n")}\n\nДля удаления скажите" +
                           $" \"Удалить\" и ключевую фразу. Например: \"{removeFirst}\"",

                    Tts =
                        $"Вывела на экран ваши вэбх+уки. Для удаления скаж+ите - - \"Удалить\" - - и ключевую фразу. " +
                        $"Например - - {removeFirst}",

                    Buttons = new[] { removeFirst, "Помощь", "Выход" }
                });
            }

            // no screen
            var wCount = state.User.Webhooks.Count.ToPhrase(
                "ключевая фраза",
                "ключевые фразы",
                "ключевых фраз"
                );
            var tts = $"У вас {wCount}: " + state.User.Webhooks.Select(w => w.Phrase).Join(" - - ");

            return(new SimpleResponse
            {
                Text = tts,
                Tts = tts
            });
        }
示例#3
0
        protected override AliceResponse CreateResponse(AliceRequest request)
        {
            AliceResponse response = base.CreateResponse(request);

            if (request.State.Session.Step == Step.None && request.HasScreen())
            {
                AddExamplesTo(response);
            }

            return(response);
        }
示例#4
0
        protected override Phrase Respond(AliceRequest request)
        {
            if (request.State.User.Webhooks.Count > 0)
            {
                return(new Phrase(
                           "Слушаю",
                           new [] { "Добавить вебхук", "Список", "Примеры", "Выход" }
                           ));
            }

            return(ModifierHelp.GetHelp(Step.None, request.HasScreen()));
        }
示例#5
0
        protected override Phrase Respond(AliceRequest request)
        {
            if (request.State.Session.Step == Step.None)
            {
                if (request.HasScreen())
                {
                    return(new Phrase(
                               "Команда не распознана. Вы можете добавить в[screen|е][voice|э]бх[+]ук, " +
                               "или посмотреть список ключевых фраз. Что хотите сделать?",
                               new [] { "Добавить вебхук", "Список", "Помощь", "Выход" }
                               ));
                }

                // no screen
                return(new Phrase(
                           "Команда не распознана. Вы можете прослушать список ключевых фраз либо выйти. " +
                           "Что хотите сделать?"
                           ));
            }
            return(ModifierHelp.GetHelp(request.State.Session.Step, request.HasScreen()));
        }
示例#6
0
        public AliceResponse Proc(AliceRequest request, FillingData fillingData, Random random)
        {
            var facts = fillingData.FillingFactsIsHoroscope(new DateTime(2020, 10, 1));

            if (request.HasScreen())
            {
                ResponseCard responsecard = new ResponseCardBigImage()
                {
                    Title = "День Супер Героя приветствует тебя!", ImageId = "1030494/ec38baf408786fd3d8ed"
                };
                return(request.Reply(responsecard));
            }
            else
            {
                return(request.Reply("День Супер Героя приветствует тебя! " + facts[random.Next(facts.Count)].Fact));
            }
        }
示例#7
0
        protected override SimpleResponse Respond(AliceRequest request, State state)
        {
            state.Clear();

            if (state.User.Webhooks != null && state.User.Webhooks.Any())
            {
                return(new SimpleResponse
                {
                    Text = "Слушаю",
                    Tts = "Слушаю",
                    Buttons = state.User.Token.IsNullOrEmpty()
                        ? new [] { "Добавить вебхук", "Список", "Авторизация", "Помощь", "Выход" }
                        : new [] { "Добавить вебхук", "Список", "Помощь", "Выход" }
                });
            }

            return(ModifierHelp.GetHelp(Step.None, request.HasScreen()));
        }
示例#8
0
        protected override Phrase Respond(AliceRequest request)
        {
            if (!request.HasScreen())
            {
                return(new Phrase("Добавлять в[screen|е][voice|э]бх[+]уки можно только на устройстве с экраном"));
            }

            if (request.State.User.Webhooks.Count >= 20)
            {
                return(new Phrase(
                           "У вас очень много в[screen|е][voice|э]бх[+]уков, удалите что-нибудь сначала с помощью команды \"Список\"",
                           new [] { "Список", "Помощь", "Выход" }
                           ));
            }

            request.State.Session.Step = Step.AwaitForUrl;
            return(new Phrase(
                       "Введите URL в[screen|е][voice|э]бх[+]ука:",
                       new [] { "Отмена", "Помощь", "Выход" }
                       ));
        }
示例#9
0
        protected override Phrase Respond(AliceRequest request)
        {
            if (request.State.Session.Step == Step.AwaitForKeyword)
            {
                return(new Phrase(
                           "Эта ключевая фраза пересекается с одной из команд данного навыка. Выберите, пожалуйста, другую.",
                           new [] { "Отмена", "Помощь", "Выход" }
                           ));
            }

            if (request.State.User.Webhooks.Count == 0)
            {
                return(new Phrase(
                           "У вас пока нет в[screen|е][voice|э]бх[+]уков. Самое время добавить. Можете посмотреть примеры сценариев.",
                           new [] { "Добавить вебхук", "Примеры", "Выход" }
                           ));
            }

            var removeFirst           = $"Удалить {request.State.User.Webhooks.First().Phrase.CapitalizeFirst()}";
            IEnumerable <string> list = request.State.User.Webhooks.Select(w => $"[screen|• {w.Phrase}: {w.Url}]");

            if (request.HasScreen())
            {
                return(new Phrase(
                           $"Вывела на экран ваши в[screen|е][voice|э]бх[+]уки:\n\n {list.Join("\n")}\n\nДля удаления скажите" +
                           $" \"Удалить\" и ключевую фразу. Например: \"{removeFirst}\"",
                           new[] { removeFirst, "Помощь", "Выход" }
                           ));
            }

            // no screen
            string wCount = request.State.User.Webhooks.Count.ToPhrase(
                "ключевая фраза",
                "ключевые фразы",
                "ключевых фраз"
                );
            string tts = $"У вас {wCount}: " + request.State.User.Webhooks.Select(w => w.Phrase).Join(" - - ");

            return(new Phrase(tts));
        }
示例#10
0
        protected override SimpleResponse Respond(AliceRequest request, State state)
        {
            if (state.User == null || state.User.Token.IsNullOrEmpty())
            {
                return(new SimpleResponse
                {
                    Text = "Авторизация отменена пользователем. Что хотите сделать сейчас?",
                    Tts = "Авторизация отменена пользователем. Что хотите сделать сейчас?",
                    Buttons = new [] { "Добавить вебхук", "Список", "Авторизация", "Помощь", "Выход" }
                });
            }

            if (!request.HasScreen())
            {
                // device without screen
                return(new SimpleResponse
                {
                    Text = "Авторизация успешна! Теперь вам нужно авторизоваться под тем же самым аккаунтом на " +
                           "устройстве с экраном, чтобы добавить вебхуки, тогда вы сможете вызывать их с колонки. " +
                           "Для выхода скажите \"Выход\".",
                    Tts = "Авторизация успешна! Теперь вам нужно авторизоваться под тем же самым аккаунтом на " +
                          "устройстве с экраном, чтобы добавить вэбх+уки, тогда вы сможете вызывать их с колонки. " +
                          "Для выхода скаж+ите - Выход.",
                });
            }

            // device with screen
            return(new SimpleResponse
            {
                Text = "Авторизация успешна! Теперь вы можете войти на колонке с того же самого аккаунта и " +
                       "использовать вебхуки, добавленные здесь. Что хотите сделать сейчас?",
                Tts = "Авторизация успешна! Теперь вы можете войти на колонке с того же самого аккаунта и " +
                      "использовать вэбх+уки, добавленные здесь. Что хотите сделать сейчас?",
                Buttons = state.User.Token.IsNullOrEmpty()
                    ? new [] { "Добавить вебхук", "Список", "Авторизация", "Помощь", "Выход" }
                    : new [] { "Добавить вебхук", "Список", "Помощь", "Выход" }
            });
        }
示例#11
0
        private AliceResponse Answer(AliceRequest request)
        {
            SessionState state    = request.State.Session;
            string       word     = state.CurrentWord.Word;
            string       wordSaid = string.Join("", request.Request.Nlu.Tokens);
            AnswerResult result   = _gameplayService.Answer(request.State.User, request.State.Session, wordSaid);
            string       sound    = result == AnswerResult.Right
                ? "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/7fbd83e1-7c22-468d-a8fe-8f0439000fd6.opus]"
                : "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/ac858f28-3c34-403c-81c7-5d64449e4ea7.opus]";

            string prefix = sound;

            if (result == AnswerResult.SeccondAttempt)
            {
                return(Hint(request, prefix));
            }

            if (result == AnswerResult.Wrong)
            {
                prefix += request.HasScreen()
                    ? $"Правильный ответ: {word.ToUpper()}.\n\n[p|300]"
                    : $"Твой ответ: {wordSaid.ToUpper()}, а правильный: {word.ToUpper()}.\n\n[p|300]";
            }

            var phrase = new Phrase(prefix);

            if (state.CurrentWord == null)
            {
                // game finished
                phrase += new Phrase(
                    "[audio|alice-sounds-game-win-3.opus]Игра завершена!\n" +
                    $"{GameplayService.ReadScore(request.State.User, state)}\n\nХочешь начать новую игру?",
                    _yesNoButtons
                    );
                return(phrase.Generate(request));
            }

            // continue game
            if (state.NeedShowScore())
            {
                _gameplayService.SetScoreShown(state);

                // continue game read score
                phrase += new Phrase(
                    GameplayService.ReadScoreOnDemand(state, state.LeftShown),
                    _ingameButtons
                    );

                // read left words
                if (!state.LeftShown)
                {
                    _gameplayService.SetLeftShown(state);
                    phrase += new Phrase(GameplayService.ReadWordsLeft(state));
                }

                // read word
                phrase += new Phrase(GameplayService.ReadWord(request.State.Session, _soundEngine, ReadMode.Normal, true));
            }
            else
            {
                // just continue game
                phrase += new Phrase(
                    GameplayService.ReadWord(request.State.Session, _soundEngine),
                    _ingameButtons
                    );
            }

            return(phrase.Generate(request));
        }
示例#12
0
 protected override SimpleResponse Respond(AliceRequest request, State state)
 {
     return(ModifierHelp.GetHelp(state.Step, request.HasScreen()));
 }
示例#13
0
 protected override Phrase Respond(AliceRequest request)
 {
     return(GetHelp(request.State.Session.Step, request.HasScreen()));
 }
示例#14
0
 protected override bool Check(AliceRequest request)
 {
     return(request.HasScreen() && base.Check(request));
 }
示例#15
0
 protected override bool Check(AliceRequest request)
 {
     return(request.State.Session.Step == Step.AwaitForKeyword && request.HasScreen());
 }
示例#16
0
        public AliceResponse Proc(AliceRequest request, ConcurrentDictionary <string, SuperHeroDaySession> concurrentDictionary, FillingData fillingData, Random random)
        {
            SuperHeroDaySession heroAndDialog = concurrentDictionary[request.Session.SessionId];

            switch (heroAndDialog.Context)
            {
            case EnumDialogueContext.History:
                var history = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x.History).FirstOrDefault();
                return(request.Reply($"{history}"));

            case EnumDialogueContext.Facts:
                Facts facts = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(y => y.Facts[random.Next(1, y.Facts.Count)]).FirstOrDefault();
                if (request.HasScreen())
                {
                    return(request.Reply($"{facts.Fact}"));
                    // todo: add buttom "ещё"
                }
                else
                {
                    return(request.Reply($"{facts.Fact}"));
                }

            case EnumDialogueContext.DebutComicBook:
                if (request.HasScreen())
                {
                    var          superHero    = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = superHero.HeroicName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   Title = $"Дебютировал {superHero.DebutDate.ToLongDateString()}", Descriptin = superHero.DebutComicBook + superHero.DebutComicBookNumber
                                                               } },
                        // todo: format date
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                }
                else
                {
                    var comicBook = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(y => new { y.DebutComicBook, y.DebutComicBookNumber, y.DebutDate }).FirstOrDefault();
                    return(request.Reply($"{comicBook.DebutComicBook}{comicBook.DebutComicBookNumber} {comicBook.DebutDate.Month} {comicBook.DebutDate.Year}"));
                }

            case EnumDialogueContext.Universe:
                if (request.HasScreen())
                {
                    var          superHero    = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = superHero.HeroicName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   Title = superHero.Universe, Descriptin = "Вселенная"
                                                               } },
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                }
                else
                {
                    var universe = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x.Universe).FirstOrDefault();
                    return(request.Reply($"{universe}"));
                }

            case EnumDialogueContext.Nickname:
                if (request.HasScreen())
                {
                    var          superHero    = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = superHero.RealName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   Title = superHero.HeroicName, Descriptin = "Супергеройское имя"
                                                               } },
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                }
                else
                {
                    var nickname = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x.HeroicName).FirstOrDefault();
                    return(request.Reply($"{nickname}"));
                }

            case EnumDialogueContext.RealName:
                if (request.HasScreen())
                {
                    var          superHero    = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = superHero.HeroicName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   Title = superHero.RealName, Descriptin = "Настоящее имя"
                                                               } },
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                }
                else
                {
                    var realName = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x.RealName).FirstOrDefault();
                    return(request.Reply($"{realName}"));
                }

            case EnumDialogueContext.Horoscop:
                //if (request.HasScreen()) {
                //    Facts horoscop = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(y => y.Facts.Where(z => z.IsHoroscope == true).ElementAt(random.Next(0, y.Facts.Count()))).FirstOrDefault();
                //    ResponseCard responseCard = new ResponseCardItemsList()
                //    {
                //        Header = new ResponseItemsListHeader { Text = "Гороскоп" },
                //        Items = new ResponseItemsListImage[] { new ResponseItemsListImage { Title = DateTime.Now.ToLongDateString(), Descriptin = horoscop.Fact } },
                //        Footer = new ResponseCardFooter { Text = "Оценить навык", Button = new ResponseCardButton { Text = "Оценить навык" } }
                //    };
                //    return request.Reply(responseCard);
                //} else {
                Facts horoscop = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(y => y.Facts.Where(z => z.IsHoroscope == true).ElementAt(random.Next(0, y.Facts.Count()))).FirstOrDefault();
                return(request.Reply($"{horoscop.Fact}"));

            //}
            case EnumDialogueContext.All:
                if (request.HasScreen())
                {
                    var          defaultSuperHero = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard     = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = defaultSuperHero.HeroicName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   ImageId = defaultSuperHero.ImageSuperHero, Title = defaultSuperHero.Universe, Descriptin = defaultSuperHero.RealName
                                                               },
                                                               new ResponseItemsListImage {
                                                                   Title = defaultSuperHero.DebutDate.ToLongDateString(), Descriptin = defaultSuperHero.DebutComicBook + defaultSuperHero.DebutComicBookNumber
                                                               } },
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                    // todo: format date && add buttons
                }
                else
                {
                    var defaultSuperHero = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    return(request.Reply($"{defaultSuperHero.HeroicName} из вселенной {defaultSuperHero.Universe} дебютировал {defaultSuperHero.DebutDate.ToLongDateString()} в {defaultSuperHero.DebutComicBook}{defaultSuperHero.DebutComicBookNumber}"));
                }

            default:
                if (request.HasScreen())
                {
                    var          defaultSuperHero = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x).FirstOrDefault();
                    ResponseCard responseCard     = new ResponseCardItemsList()
                    {
                        Header = new ResponseItemsListHeader {
                            Text = defaultSuperHero.HeroicName
                        },
                        Items = new ResponseItemsListImage[] { new ResponseItemsListImage {
                                                                   ImageId = defaultSuperHero.ImageSuperHero, Title = defaultSuperHero.Universe, Descriptin = defaultSuperHero.RealName
                                                               },
                                                               new ResponseItemsListImage {
                                                                   Title = defaultSuperHero.DebutDate.ToLongDateString(), Descriptin = defaultSuperHero.DebutComicBook + defaultSuperHero.DebutComicBookNumber
                                                               } },
                        Footer = new ResponseCardFooter {
                            Text = "Оценить навык", Button = new ResponseCardButton {
                                Text = "Оценить навык"
                            }
                        }
                    };
                    return(request.Reply(responseCard));
                    // todo: format date && add buttons
                }
                else
                {
                    var defaultHistory = fillingData.FillingHero().Where(x => x.Id == heroAndDialog.Hero).Select(x => x.History).FirstOrDefault();
                    return(request.Reply(defaultHistory));
                }
            }
        }