public AliasCommand(IPlugin plugin, String name, String description, bool @private, IExpression expression) : base(plugin, name) { Description = description; ParameterTypes = Enumerable.Repeat(typeof(String), expression.Arity).ToArray(); ParameterNames = Enumerable.Range(1, expression.Arity).Select(i => i.ToString()).ToArray(); DefaultPermissions = new PermissionAttribute[0]; Private = @private; _expression = expression; }
public MethodCommand(IPlugin plugin, String name, String description, PermissionAttribute[] defaultPermissions, bool @private, MethodInfo method, object obj) : base(plugin, name) { Description = description; ParameterTypes = method.GetParameters().Skip(1).Select(p => p.ParameterType).ToArray(); ParameterNames = method.GetParameters().Skip(1).Select(p => p.Name).ToArray(); DefaultPermissions = defaultPermissions; Private = @private; _method = method; _obj = obj; }
private static ICommand ToCommand(IPlugin plugin, CommandAttribute attribute, MethodInfo method, object instance) { String methodName = attribute.Name ?? method.Name; ParameterInfo[] parameters = method.GetParameters(); // Check signature if(parameters.Length == 0 || !parameters[0].ParameterType.Equals(typeof(IContext))) { _logger.Error("Command " + methodName + " from plugin " + plugin.Name + " does not have a parameter of type IContext as first parameter. Command will not be added."); return null; } else if(!method.IsPublic) { _logger.Error("Command " + methodName + " from plugin " + plugin.Name + " is not public so it is not callable. Command will not be added."); return null; } // Gather default permissions PermissionAttribute[] permissions = new PermissionAttribute[0]; IEnumerable<PermissionAttribute> defaultPermissions = method.GetCustomAttributes<PermissionAttribute>(true); IEnumerable<String> groupNames = defaultPermissions.Select(p => p.GroupName); if(groupNames.Distinct().Count() != defaultPermissions.Count()) { _logger.Error("Command " + methodName + " from plugin " + plugin.Name + " has multiple default permissions for the same group. Permissions will not be added."); } else { permissions = defaultPermissions.ToArray(); } if(method.IsStatic) return CommandBuilder.CreateCommand(plugin, methodName, attribute.Description, permissions, attribute.Private, method); else return CommandBuilder.CreateCommand(plugin, methodName, attribute.Description, permissions, attribute.Private, method, instance); }