| @@ -31,39 +31,46 @@ namespace Discord.Commands | |||
| internal Command(MethodInfo source, Module module, object instance, CommandAttribute attribute, string groupPrefix) | |||
| { | |||
| Source = source; | |||
| Module = module; | |||
| _instance = instance; | |||
| try | |||
| { | |||
| Source = source; | |||
| Module = module; | |||
| _instance = instance; | |||
| Name = source.Name; | |||
| Text = groupPrefix + attribute.Text; | |||
| Name = source.Name; | |||
| Text = groupPrefix + attribute.Text; | |||
| var aliasesBuilder = ImmutableArray.CreateBuilder<string>(); | |||
| var aliasesBuilder = ImmutableArray.CreateBuilder<string>(); | |||
| aliasesBuilder.Add(Text); | |||
| aliasesBuilder.Add(Text); | |||
| var aliasesAttr = source.GetCustomAttribute<AliasAttribute>(); | |||
| if (aliasesAttr != null) | |||
| aliasesBuilder.AddRange(aliasesAttr.Aliases.Select(x => groupPrefix + x)); | |||
| var aliasesAttr = source.GetCustomAttribute<AliasAttribute>(); | |||
| if (aliasesAttr != null) | |||
| aliasesBuilder.AddRange(aliasesAttr.Aliases.Select(x => groupPrefix + x)); | |||
| Aliases = aliasesBuilder.ToImmutable(); | |||
| Aliases = aliasesBuilder.ToImmutable(); | |||
| var nameAttr = source.GetCustomAttribute<NameAttribute>(); | |||
| if (nameAttr != null) | |||
| Name = nameAttr.Text; | |||
| var nameAttr = source.GetCustomAttribute<NameAttribute>(); | |||
| if (nameAttr != null) | |||
| Name = nameAttr.Text; | |||
| var description = source.GetCustomAttribute<DescriptionAttribute>(); | |||
| if (description != null) | |||
| Description = description.Text; | |||
| var description = source.GetCustomAttribute<DescriptionAttribute>(); | |||
| if (description != null) | |||
| Description = description.Text; | |||
| var summary = source.GetCustomAttribute<SummaryAttribute>(); | |||
| if (summary != null) | |||
| Summary = summary.Text; | |||
| Parameters = BuildParameters(source); | |||
| HasVarArgs = Parameters.Count > 0 ? Parameters[Parameters.Count - 1].IsMultiple : false; | |||
| Preconditions = BuildPreconditions(source); | |||
| _action = BuildAction(source); | |||
| var summary = source.GetCustomAttribute<SummaryAttribute>(); | |||
| if (summary != null) | |||
| Summary = summary.Text; | |||
| Parameters = BuildParameters(source); | |||
| HasVarArgs = Parameters.Count > 0 ? Parameters[Parameters.Count - 1].IsMultiple : false; | |||
| Preconditions = BuildPreconditions(source); | |||
| _action = BuildAction(source); | |||
| } | |||
| catch (Exception ex) | |||
| { | |||
| throw new Exception($"Failed to build command {source.DeclaringType.FullName}.{source.Name}", ex); | |||
| } | |||
| } | |||
| public async Task<PreconditionResult> CheckPreconditions(IUserMessage context) | |||