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); }
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)); }
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)); }