private async Task <DialogTurnResult> ResultsStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var model = (TravelDialogModel)stepContext.Values[TravelInfo]; model.DepartureDate = DateTime.Parse(((IList <DateTimeResolution>)stepContext.Result).First().Value); var buses = (await busFinder.FindTripsAsync(From, model.To, model.DepartureDate)).ToList(); var cars = (await blaBlaCarFinder.FindTripsAsync(From, model.To, model.DepartureDate)).ToList(); if (buses.Any() || cars.Any()) { var reply = new StringBuilder(); await stepContext.Context.SendActivityAsync(MessageFactory.Text("Ось що мені вдалось знайти \U0001F609"), cancellationToken); if (buses.Any()) { reply.AppendLine("Автобуси \U0001F68C\n\n"); foreach (var bus in buses) { reply.AppendLine($"{bus.From} - {bus.To} о {bus.DepartureTime.Hours}:{bus.DepartureTime.Minutes} {Math.Ceiling(bus.Price)} грн\n\n[Купити квиток]({bus.BookingLink}) \n\n"); } await stepContext.Context.SendActivityAsync(MessageFactory.Text(reply.ToString()), cancellationToken); } if (cars.Any()) { reply.Clear(); reply.AppendLine("BlaBlaCar \U0001F697\n\n"); foreach (var car in cars) { reply.AppendLine($"{car.DeparturePlace.CityName} - {car.ArrivalPlace.CityName} о {car.DepartureDate:HH:mm} {car.Price.Value} грн\n\n[Забронювати]({car.Links.Front}) \n\n"); } await stepContext.Context.SendActivityAsync(MessageFactory.Text(reply.ToString()), cancellationToken); } } else { await stepContext.Context.SendActivityAsync(MessageFactory.Text("На жаль, на вказану дату мені нічого не вдалось знайти \U0001F625"), cancellationToken); } return(await stepContext.ReplaceDialogAsync(nameof(MainDialog), null, cancellationToken)); }
public async void StartDialog(DetectIntentResponse response, Chat chat) { var original = response.QueryResult.Parameters.Fields["original"]; var userNameField = response.QueryResult.OutputContexts.FirstOrDefault(s => s.Parameters.Fields.ContainsKey("userName")); var userName = userNameField?.Parameters.Fields["userName"]; if (string.IsNullOrEmpty(original.StringValue)) { return; } var destination = response.QueryResult.Parameters.Fields["destination"]; if (!DateTime.TryParse(response.QueryResult.Parameters.Fields["date"].StringValue, out var date)) { date = DateTime.Today; } var cars = await blaBlaCarFinder.FindTripsAsync(original.StringValue, destination.StringValue, date); var buses = await busFinder.FindTripsAsync(original.StringValue, destination.StringValue, date); var stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"Ось що мені вдалось найти, {userName.StringValue} \U0001F609"); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString() ); stringBuilder.Clear(); var enumerable = cars.ToList(); if (enumerable.Any()) { stringBuilder.AppendLine("BlaBlaCar \U0001F697\n\n"); foreach (var trip in enumerable) { stringBuilder.AppendLine("Відпарвлення: " + trip.DepartureDate); stringBuilder.AppendLine("Прибуття: " + trip.ArrivalDate); stringBuilder.AppendLine("Місце відправлення: " + trip.DeparturePlace.CityName); stringBuilder.AppendLine("Місце прибуття: " + trip.ArrivalPlace.CityName); stringBuilder.AppendLine("Ціна: " + trip.Price.Value + " грн"); stringBuilder.AppendLine("Кількість міць: " + trip.SeatsLeft); stringBuilder.AppendLine("Автомобіль: " + trip.Car?.Make + " " + trip.Car?.Model); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString(), replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("Забронювати", trip.Links.Front)) ); stringBuilder.Clear(); } } var trips = buses.ToList(); if (trips.Any()) { stringBuilder.AppendLine("\nАвтобуси \U0001F68C\n\n"); foreach (var trip in trips) { stringBuilder.AppendLine("Відпарвлення: " + trip.DepartureDate); stringBuilder.AppendLine("Прибуття: " + trip.ArrivalDate); stringBuilder.AppendLine("Місце відправлення: " + trip.From); stringBuilder.AppendLine("Місце прибуття: " + trip.To); stringBuilder.AppendLine("Ціна: " + trip.Price); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString(), replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("Забронювати", trip.BookingLink)) ); stringBuilder.Clear(); } } }