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 } }); }
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(); }
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(); } }