public async Task <Embed> HelpAsync(ICommandContext context, string query, SearchContext searchContext) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (query is null) { throw new ArgumentNullException(nameof(query)); } var commands = (await SearchCommands(context, query, searchContext)).ToList(); if (commands.Count == 0) { var ts = await TranslationManager.CreateFor(context.Channel); return(EmbedFactory.CreateNeutral() .WithTitle(ts.GetMessage("help:embed_title")) .WithDescription(ts.GetMessage("help:command_not_found")) .Build()); } // NOTE: This system breaks when there are two commands with the same alias. Avoid using same aliases if (commands.Count > 1) { var ts = await TranslationManager.CreateFor(context.Channel); return(EmbedFactory.CreateNeutral() .WithTitle(ts.GetMessage("help:embed_title")) .WithDescription($"{ts.GetMessage("help:multiple_matches")}\n{String.Join("\n", commands.Select(x => Format.Code(x.GetUsage())))}") .Build()); } else { return(await commands[0].CreateHelpEmbedAsync(context)); } }