Initial split of the modules
This commit is contained in:
		
							
								
								
									
										74
									
								
								NadekoBot.Core/Modules/Help/Services/HelpService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								NadekoBot.Core/Modules/Help/Services/HelpService.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| using System.Threading.Tasks; | ||||
| using Discord; | ||||
| using Discord.WebSocket; | ||||
| using System; | ||||
| using Discord.Commands; | ||||
| using NadekoBot.Extensions; | ||||
| using System.Linq; | ||||
| using NadekoBot.Common.Attributes; | ||||
| using NadekoBot.Common.ModuleBehaviors; | ||||
| using NadekoBot.Services; | ||||
| using NadekoBot.Services.Impl; | ||||
|  | ||||
| namespace NadekoBot.Modules.Help.Services | ||||
| { | ||||
|     public class HelpService : ILateExecutor, INService | ||||
|     { | ||||
|         private readonly IBotConfigProvider _bc; | ||||
|         private readonly CommandHandler _ch; | ||||
|         private readonly NadekoStrings _strings; | ||||
|  | ||||
|         public HelpService(IBotConfigProvider bc, CommandHandler ch, NadekoStrings strings) | ||||
|         { | ||||
|             _bc = bc; | ||||
|             _ch = ch; | ||||
|             _strings = strings; | ||||
|         } | ||||
|  | ||||
|         public async Task LateExecute(DiscordSocketClient client, IGuild guild, IUserMessage msg) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if(guild == null) | ||||
|                     await msg.Channel.SendMessageAsync(_bc.BotConfig.DMHelpString).ConfigureAwait(false); | ||||
|             } | ||||
|             catch (Exception) | ||||
|             { | ||||
|                 //ignore | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public EmbedBuilder GetCommandHelp(CommandInfo com, IGuild guild) | ||||
|         { | ||||
|             var prefix = _ch.GetPrefix(guild); | ||||
|  | ||||
|             var str = string.Format("**`{0}`**", prefix + com.Aliases.First()); | ||||
|             var alias = com.Aliases.Skip(1).FirstOrDefault(); | ||||
|             if (alias != null) | ||||
|                 str += string.Format(" **/ `{0}`**", prefix + alias); | ||||
|             return new EmbedBuilder() | ||||
|                 .AddField(fb => fb.WithName(str).WithValue($"{com.RealSummary(prefix)} {GetCommandRequirements(com, guild)}").WithIsInline(true)) | ||||
|                 .AddField(fb => fb.WithName(GetText("usage", guild)).WithValue(com.RealRemarks(prefix)).WithIsInline(false)) | ||||
|                 .WithFooter(efb => efb.WithText(GetText("module", guild, com.Module.GetTopLevelModule().Name))) | ||||
|                 .WithColor(NadekoBot.OkColor); | ||||
|         } | ||||
|  | ||||
|         public string GetCommandRequirements(CommandInfo cmd, IGuild guild) => | ||||
|             string.Join(" ", cmd.Preconditions | ||||
|                   .Where(ca => ca is OwnerOnlyAttribute || ca is RequireUserPermissionAttribute) | ||||
|                   .Select(ca => | ||||
|                   { | ||||
|                       if (ca is OwnerOnlyAttribute) | ||||
|                           return Format.Bold(GetText("bot_owner_only", guild)); | ||||
|                       var cau = (RequireUserPermissionAttribute)ca; | ||||
|                       if (cau.GuildPermission != null) | ||||
|                           return Format.Bold(GetText("server_permission", guild, cau.GuildPermission)) | ||||
|                                        .Replace("Guild", "Server"); | ||||
|                       return Format.Bold(GetText("channel_permission", guild, cau.ChannelPermission)) | ||||
|                                        .Replace("Guild", "Server"); | ||||
|                   })); | ||||
|  | ||||
|         private string GetText(string text, IGuild guild, params object[] replacements) => | ||||
|             _strings.GetText(text, guild?.Id, "Help".ToLowerInvariant(), replacements); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user