Exemplo n.º 1
0
        public SearchView(IReadOnlyCollection <SearchItem> items, TarkovDatabaseClient client)
            : base(new LocalMessage()
                   .WithContent("Multiple results found! Please pick one item from the list:"))
        {
            var selectionComponent = new SelectionViewComponent(async args =>
            {
                this.Menu.Stop();
                this.ClearComponents();

                var response = args.Interaction.SelectedValues.FirstOrDefault().Split("/");
                var itemId   = response[0];
                var kind     = Enum.Parse <ItemKind>(response[1]);

                var item             = await client.GetItemAsync(itemId, kind);
                this.TemplateMessage = new LocalMessage().WithEmbeds(item.ToEmbed());
                await(this.Menu as InteractiveMenu).ApplyChangesAsync();
            });

            foreach (var item in items)
            {
                selectionComponent.Row = 0;
                selectionComponent.Options.Add(
                    new LocalSelectionComponentOption($"{item.ShortName} ({item.Kind.Humanize()})".Truncate(25),
                                                      $"{item.Id}/{item.Kind}")
                    .WithDescription(item.Description.Truncate(50)));
            }

            this.AddComponent(selectionComponent);
        }
Exemplo n.º 2
0
        public async Task <DiscordCommandResult> SlotsAsync(
            [Remainder][Range(3, 100, true, true)][Description("The item to display attachments for.")] string query)
        {
            var result = (await _tarkovSearch.SearchAsync($"name:{query}", DocType.Item, 1)).FirstOrDefault();

            if (result == null)
            {
                return(Reply("No items found for query!"));
            }

            var item = await _tarkov.GetItemAsync(result.Id, result.Kind);

            if (item is not IModifiableItem modifiableItem ||
                !modifiableItem.Slots.Any())
            {
                return(Reply("The base item provided is not modifiable!"));
            }

            var embed = new LocalEmbed()
            {
                Title        = $"{item.Name} ({item.ShortName})",
                Color        = item.Grid.Color,
                ThumbnailUrl = item.IconUrl,
                Description  = item.Description,
                Url          = item.WikiUrl
            };

            foreach (var slot in modifiableItem.Slots)
            {
                var items = new List <IItem>();

                foreach (var filter in slot.Value.Filter)
                {
                    var filterItems = await _tarkov.GetItemsAsync(filter.Key, filter.Value);

                    items.AddRange(filterItems);
                }

                var itemResult = items.Any() ? items.Humanize(x => $"`{x.ShortName}`") : "None";
                embed.AddField(slot.Key.Humanize(LetterCasing.Title), itemResult);
            }

            return(Reply(embed));
        }
Exemplo n.º 3
0
        public async Task <DiscordCommandResult> ItemAsync(
            [Remainder][Range(3, 100, true, true)][Description("The item to look for.")] string query)
        {
            var results = (await _tarkovSearch.SearchAsync($"name:{query}", DocType.Item, 25));

            if (results.Count == 0)
            {
                return(Reply("No items found for query!"));
            }

            if (results.Count == 1)
            {
                var result = results.First();
                var item   = await _tarkov.GetItemAsync(result.Id, result.Kind);

                return(Reply(item.ToEmbed()));
            }

            var searchView = new SearchView(results, _tarkov);

            return(View(searchView));
        }