Пример #1
0
    public async Task BoosterCommand([Autocomplete(typeof(BoosterPackAutocomplete)), Summary(description: "The boosterpack")] string input)
    {
        var boosterPack = await YuGiOhDbService.GetBoosterPackAsync(input);

        if (boosterPack is not null)
        {
            var descBuilder = new StringBuilder()
                              .Append("**Amount:** ")
                              .Append(boosterPack.Cards.Count)
                              .AppendLine(" cards")
                              .AppendLine()
                              .AppendLine("**Release dates**");

            descBuilder = boosterPack.Dates
                          .Aggregate(descBuilder, (current, date) =>
                                     current.Append("**")
                                     .Append(date.Name)
                                     .Append(":** ")
                                     .AppendFormat("{0: MM/dd/yyyy}", date.Date)
                                     .AppendLine()
                                     );

            var options = PagedOptions;
            options.FieldsPerPage = 1;

            var paginator = new PaginatedMessage()
            {
                Title = boosterPack.Name,
                Color = _random.NextColor(),
                AlternateDescription = descBuilder.ToString(),
                Options = options
            };

            var pages = new LinkedList <EmbedFieldBuilder>();
            paginator.Pages = pages;
            var rarityToCards = new Dictionary <string, List <string> >();

            foreach (var card in boosterPack.Cards)
            {
                foreach (var rarity in card.Rarities)
                {
                    if (!rarityToCards.ContainsKey(rarity))
                    {
                        rarityToCards[rarity] = new List <string>();
                    }

                    rarityToCards[rarity].Add(card.Name);
                }
            }

            foreach (var(rarity, card) in rarityToCards)
            {
                var cards = card
                            .Aggregate(new StringBuilder(), (current, next) => current.AppendLine(next))
                            .ToString();

                while (cards.Length >= 1024)
                {
                    const int maxLength = 1000;

                    var substring = cards[..maxLength];