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 [] { "Отмена", "Помощь", "Выход" } }); }
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 }); }
protected override AliceResponse CreateResponse(AliceRequest request) { AliceResponse response = base.CreateResponse(request); if (request.State.Session.Step == Step.None && request.HasScreen()) { AddExamplesTo(response); } return(response); }
protected override Phrase Respond(AliceRequest request) { if (request.State.User.Webhooks.Count > 0) { return(new Phrase( "Слушаю", new [] { "Добавить вебхук", "Список", "Примеры", "Выход" } )); } return(ModifierHelp.GetHelp(Step.None, request.HasScreen())); }
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())); }
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)); } }
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())); }
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 [] { "Отмена", "Помощь", "Выход" } )); }
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)); }
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 [] { "Добавить вебхук", "Список", "Помощь", "Выход" } }); }
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)); }
protected override SimpleResponse Respond(AliceRequest request, State state) { return(ModifierHelp.GetHelp(state.Step, request.HasScreen())); }
protected override Phrase Respond(AliceRequest request) { return(GetHelp(request.State.Session.Step, request.HasScreen())); }
protected override bool Check(AliceRequest request) { return(request.HasScreen() && base.Check(request)); }
protected override bool Check(AliceRequest request) { return(request.State.Session.Step == Step.AwaitForKeyword && request.HasScreen()); }
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)); } } }