private async Task WikiSearch(string search, ISocketMessageChannel channel, int maxSearch = 10) { EmbedBuilder embed = new EmbedBuilder(); StringBuilder sb = new StringBuilder(); embed.WithTitle($"Wikipedia Search '{search}'"); embed.WithColor(FunCmdsConfig.wikipediaSearchColor); embed.WithFooter($"Search by {Context.User}", Context.User.GetAvatarUrl()); embed.WithCurrentTimestamp(); embed.WithDescription("Searching Wikipedia..."); RestUserMessage message = await channel.SendMessageAsync("", false, embed.Build()); WikiSearchResponse response = WikiSearcher.Search(search, new WikiSearchSettings { ResultLimit = maxSearch }); foreach (WikiSearchResult result in response.Query.SearchResults) { string link = $"**[{result.Title}]({result.ConstantUrl})** (Words: {result.WordCount})\n{result.Preview}\n\n"; //There is a character limit of 2048, so lets make sure we don't hit that if (sb.Length >= 2048) { continue; } if (sb.Length + link.Length >= 2048) { continue; } sb.Append(link); } embed.WithDescription(sb.ToString()); embed.WithCurrentTimestamp(); await MessageUtils.ModifyMessage(message, embed); }
/// <summary> /// /// </summary> /// <remarks> /// Honestly this is wrong: we shouldn't be coupling directly to Azurite.Wiki here, /// but resolving an <see cref="Azurite.IShipDataProvider"/> provider from DI. /// </remarks> /// <param name="searcher">A <see cref="Azurite.Wiki.WikiSearcher"/> instance.</param> /// <returns>An <see cref="IndexBuilder"/> builder instance.</returns> public IndexBuilder(WikiSearcher searcher) : this(searcher, null) { }
/// <summary> /// Builds an <see cref="IndexBuilder"/> with the provided searcher and DB client. /// </summary> /// <param name="searcher">The wiki searcher to use when fetching details.</param> /// <param name="client">The DB client to write to.</param> public IndexBuilder(WikiSearcher searcher, ShipDbClient client) { _searcher = searcher; _client = client ?? new ShipDbClient(); }
static async Task GetShip() { var searcher = new WikiSearcher(); // var result = (await searcher.GetShipDetails("Pensacola")).ToList(); // var results = (await searcher.GetShipDetails("Salt Lake City")).ToList(); var results = (await searcher.GetShipDetails("London")).ToList(); }