示例#1
0
        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));
        }
示例#2
0
        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();
                }
            }
        }