Beispiel #1
0
        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;
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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);
        }