From 8058bffba5ecc513ee5b711e6a8c28660740f028 Mon Sep 17 00:00:00 2001 From: Karolis2011 Date: Thu, 20 Jun 2019 01:01:49 +0300 Subject: [PATCH] Help part 2 --- EventBot/Misc/Extensions.cs | 17 +++++++++++- EventBot/Modules/BasicModule.cs | 47 ++++++++++++++++++++++++++++++--- EventBot/Modules/EventModule.cs | 2 ++ 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/EventBot/Misc/Extensions.cs b/EventBot/Misc/Extensions.cs index 096fdce..474eff1 100644 --- a/EventBot/Misc/Extensions.cs +++ b/EventBot/Misc/Extensions.cs @@ -26,7 +26,22 @@ namespace EventBot.Misc public static string FormatCallHelpString(this CommandInfo command) { - return $"{command.Aliases[0]} {string.Join(" ", command.Parameters.Select(p => p.IsOptional ? $"[{p.Name}]" : $"<{p.Name}>"))}"; + return $"{command.Aliases[0]} {string.Join(" ", command.Parameters.Select(p => p.FormatParameter()))}"; } + + public static string FormatParameter(this ParameterInfo p) => p.IsOptional ? $"[{p.Name}]" : $"<{p.Name}>"; + public static string FormatParameterType(this ParameterInfo p) + { + var @switch = new Dictionary>() + { + { typeof(int), (_) => "Number" }, + + }; + if (@switch.ContainsKey(p.Type)) + return @switch[p.Type](p); + else + return p.Type.Name; + } + } } diff --git a/EventBot/Modules/BasicModule.cs b/EventBot/Modules/BasicModule.cs index dae9356..d9011e1 100644 --- a/EventBot/Modules/BasicModule.cs +++ b/EventBot/Modules/BasicModule.cs @@ -73,7 +73,8 @@ namespace EventBot.Modules var pagedCommands = _commands.Commands .OrderBy(c => c.Aliases[0]) .Where(c => c.Attributes - .Select(a => { + .Select(a => + { switch (a) { case NoHelpAttribute _: @@ -85,7 +86,7 @@ namespace EventBot.Modules } }) .Aggregate(true, (a, r) => a && r)) - .SelectMany(c => c.Aliases.Select(a => new { CI = c, MA = (c.Aliases[0] == a), A = a}).Reverse()) + .SelectMany(c => c.Aliases.Select(a => new { CI = c, MA = (c.Aliases[0] == a), A = a }).Reverse()) .Select((e, i) => new { Command = e, Index = i }) .GroupBy(o => o.Index / 20) .Select(g => g.Select(o => o.Command)); @@ -94,7 +95,8 @@ namespace EventBot.Modules { Title = "Command list", Color = Color.DarkBlue, - Pages = pagedCommands.Select(p => string.Join("\r\n", p.Select(c => { + Pages = pagedCommands.Select(p => string.Join("\r\n", p.Select(c => + { if (c.MA) return $"`{c.CI.FormatCallHelpString()}` - **{c.CI.Name}**"; else @@ -108,6 +110,45 @@ namespace EventBot.Modules }; await PagedReplyAsync(pager); } + + [Command] + [Name("Help")] + [Summary("Shows detailed info about command.")] + public async Task DefaultHelpAsync([Summary("Command ")][Remainder] string commandAlias) + { + var command = _commands.Commands.Where(c => c.Aliases.Contains(commandAlias)).FirstOrDefault(); + if (command == null) + throw new Exception("This command was not found."); + var embed = new EmbedBuilder() + .WithTitle(command.Name) + .WithDescription(command.Summary) + .WithColor(Color.DarkTeal); + embed.AddField("Module", command.Module.Name, true); + if (command.Aliases.Count > 1) + embed.AddField("Aliases", string.Join(", ", command.Aliases)); + if(command.Parameters.Count > 0) + embed.AddField("Parameters", + string.Join("\r\n", command.Parameters.Select(p => $"`{p.FormatParameter()}` *(Type: {p.FormatParameterType()})* - **{p.Summary}** {(p.IsRemainder ? "_No quotes are needed, when providing this parameter._" : "")}" )) + ); + + await ReplyAsync($"I got this information about command `{commandAlias}`:", embed: embed.Build()); + } + + [Command("types")] + [Name("Type help")] + [Priority(1)] + [Summary("Shows information about avaivable types for command paramters.")] + [NoHelp] + public async Task TypeHelp() + { + await ReplyAsync($"There are following avaivable types for command input: \r\n" + + $"***String*** - The most basic text input, must be qouted if there is space inside. Ex: `\"This is a string\"`; `ThisCanBeUsedAlsoAsString`\r\n" + + $"***Number*** - Just a simple number. Ex: `1`; `-2`; `1523`\r\n" + + $"***User*** - Mention or ID of user. Ex: `360710685186850826`; `Skull132#1984`; {Context.Client.CurrentUser.Mention}\r\n" + + $"***Event*** - ID of event. Just positive numbers 🙂.\r\n" + + $"***EventRole*** - ID of event's role. Also positive numbers 😊.\r\n" + + $"***EventParticipactionType*** - What type you want. Ex: `Quick`; `Detailed`"); + } } } } diff --git a/EventBot/Modules/EventModule.cs b/EventBot/Modules/EventModule.cs index 2259bed..76f564d 100644 --- a/EventBot/Modules/EventModule.cs +++ b/EventBot/Modules/EventModule.cs @@ -13,6 +13,7 @@ using Discord.Addons.Interactive; namespace EventBot.Modules { [RequireContext(ContextType.Guild)] + [Name("Event")] public class EventModule : ModuleBase { private readonly EventManagementService _events; @@ -55,6 +56,7 @@ namespace EventBot.Modules [RequireUserPermission(GuildPermission.Administrator, Group = "Permission")] [RequireOwner(Group = "Permission")] [Group("event")] + [Name("Event management")] public class EventManagementModule : InteractiveBase { private readonly EventManagementService _events;