public async Task ShowWishesAsync(IDialogContext context, IAwaitable <IMessageActivity> activity) { List <string> wishes = StateHelper.GetWishlistItems(context); //Retrive wishes information var to_retrieve = wishes; //options List <ButtonType> buttons = new List <ButtonType>(); //fetch only a limited number of wishes if (wishes.Count() > Constants.N_ITEMS_CARROUSSEL) { to_retrieve = wishes.Skip(this.skip) .Take(Constants.N_ITEMS_CARROUSSEL) .ToList(); } var products = new List <Product>(); foreach (string i in to_retrieve) { products.Add(ProductController.getProduct(i)); } //Prepare answer var reply = context.MakeMessage(); var text = ""; var button_text = ""; // No products on wishlsit if (products.Count == 0) { text = Interactions.getWishList(Interactions.State.FAIL, 0); await context.PostAsync(text); } // Has Products else { text = Interactions.getWishList(Interactions.State.SUCCESS, skip / Constants.N_ITEMS_CARROUSSEL + 1); await Interactions.SendMessage(context, text, 0, 2500); //display products reply = context.MakeMessage(); reply.AttachmentLayout = AttachmentLayoutTypes.Carousel; List <Attachment> cards = new List <Attachment>(); //limit for (var i = 0; i < products.Count && i < Constants.N_ITEMS_CARROUSSEL; i++) { cards.Add(ProductCard.GetProductCard(products[i], ProductCard.CardType.WISHLIST).ToAttachment()); } reply.Attachments = cards; await context.PostAsync(reply); //Check if pagination is needed and display wishes if (wishes.Count() > this.skip + Constants.N_ITEMS_CARROUSSEL) { buttons.Add(ButtonType.PAGINATION); skip += skip + Constants.N_ITEMS_CARROUSSEL; button_text += "Não consegui exibir todos os seus produtos favoritos. Se desejar ver mais clique no botão abaixo."; } } //add option add more products buttons.Add(ButtonType.ADD_PRODUCT); button_text += "\nSe desejar adicionar mais produtos aos seus favoritos faça uma pesquisa no nosso catálogo. Para isso, clique no botão abaixo."; await Interactions.SendMessage(context, button_text, 2000, 2000); //show options reply = context.MakeMessage(); reply.Attachments.Add(getCardButtonsAttachment(buttons, DialogType.WISHLIST)); await context.PostAsync(reply); context.Wait(this.InputHandler); }