예제 #1
0
        private async Task AskProvideAdditionalInfo(DialogContext dialogContext, object args, SkipStepFunction next)
        {
            var inquiry = new EpisodeInquiry(dialogContext.ActiveDialog.State);

            if (inquiry.Episode == null)
            {
                await dialogContext.Continue();

                return;
            }

            var item = inquiry.Episode.Overview == null ? "show" : "episode";
            var yes  = new Prompts.Choices.Choice {
                Value = "Yes"
            };
            var no = new Prompts.Choices.Choice {
                Value = "No"
            };
            await dialogContext.Prompt("ProvideAdditionalInfoPrompt", $"Would you like to see additional info about this {item}?", new ChoicePromptOptions()
            {
                Choices = new List <Prompts.Choices.Choice> {
                    yes, no
                }
            });
        }
예제 #2
0
        private async Task ProvideAdditionalEpisodeInfo(DialogContext dialogContext, object args, SkipStepFunction next)
        {
            var inquiry = new EpisodeInquiry(dialogContext.ActiveDialog.State);

            if (args is Prompts.ChoiceResult result)
            {
                inquiry.ProvideAdditionalInfo = result.Value.Value == "Yes";
            }

            if (inquiry.ProvideAdditionalInfo)
            {
                if (inquiry.Episode.Overview != null)
                {
                    var response = $"Summary: {inquiry.Episode.Overview}";
                    await dialogContext.Context.SendActivity(response);
                }

                var imageUrl = await TmdbService.Instance.GetShowImageUrlLandscape(inquiry.Show.Ids.Tmdb);

                var activity = MessageFactory.Attachment(GetInternetAttachment(imageUrl, inquiry.Show.Title));
                await dialogContext.Context.SendActivity(activity);
            }

            await dialogContext.End();
        }
예제 #3
0
        private async Task ResolveEpisodeInquiry(DialogContext dialogContext, object args, SkipStepFunction next)
        {
            var inquiry = new EpisodeInquiry(dialogContext.ActiveDialog.State);

            if (args is IDictionary <string, object> hash)
            {
                if (hash["LuisResult"] is RecognizerResult luisResult)
                {
                    var title = GetEntity <string>(luisResult, "Media_Title");
                    if (!string.IsNullOrEmpty(title))
                    {
                        inquiry.MediaTitle = title;
                        dialogContext.ActiveDialog.State = inquiry;
                    }
                }
            }

            var(show, episode) = await TraktService.Instance.GetNextEpisode(inquiry.MediaTitle);

            if (show == null)
            {
                var response = $"Hrmm, it doesn't look like there are any shows called '{inquiry.MediaTitle}'.";
                //TODO: Possibly prompt them for an alternate title

                await dialogContext.Context.SendActivity(response);

                await dialogContext.End();

                return;
            }

            inquiry.Episode = episode;
            inquiry.Show    = show;
            dialogContext.ActiveDialog.State = inquiry;

            if (episode == null)
            {
                var response = $"It doesn't look like {show.Title} has any upcoming episodes.";
                await dialogContext.Context.SendActivity(response);

                await dialogContext.End();
            }
            else
            {
                var response = $"The next episode of {show.Title} will air on {episode.FirstAired.LocalDateTime.ToString("dddd, MMMM d 'at' h:mm tt")} on {show.Network}.";
                await dialogContext.Context.SendActivity(response);

                var userContext = dialogContext.Context.GetUserState <UserState>();
                userContext.EpisodeInquiries.Add(inquiry);

                await dialogContext.Continue();
            }
        }