private void RefreshCommands() { lock (_commandLocker) { Commands.Clear(); ConsoleCommands.Clear(); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assm in assemblies.Where(p => p.GetTypes().Any(x => typeof(ICSPlugin).IsAssignableFrom(x)))) { Type[] types = assm.GetTypes(); foreach (Type type in types) { foreach (MethodInfo mi in type.GetMethods()) { var cmdAttribs = mi.GetCustomAttributes(typeof(CommandAttribute), false).ToList(); var consoleCmdAttribs = mi.GetCustomAttributes(typeof(ConsoleCommandAttribute), false).ToList(); if (consoleCmdAttribs.Count == 1) { ConsoleCommandAttribute cCmdAttr = (ConsoleCommandAttribute)cmdAttribs[0]; ConsoleCommands.Add(cCmdAttr.CommandName, cCmdAttr.CommandDescription); } else if (cmdAttribs.Count == 1) { var permAttribs = mi.GetCustomAttributes(typeof(CommandPermissionAttribute), false).ToList(); CommandAttribute cmdAttrib = (CommandAttribute)cmdAttribs[0]; if (permAttribs.Count == 1) { CommandPermissionAttribute permAttrib = (CommandPermissionAttribute)permAttribs[0]; Commands.Add(Tuple.Create(cmdAttrib.CommandName, cmdAttrib.CommandDescription, permAttrib.Permission, permAttrib.Admin)); } else { Commands.Add(Tuple.Create(cmdAttrib.CommandName, cmdAttrib.CommandDescription, String.Empty, false)); } } } } } } }
public void LoadCommands(object instance) { //PluginManager.LoadCommands(instance); var type = instance.GetType(); var methods = type.GetMethods(); foreach (MethodInfo method in methods) { CommandAttribute commandAttribute = Attribute.GetCustomAttribute(method, typeof(CommandAttribute), false) as CommandAttribute; if (commandAttribute == null) { continue; } if (string.IsNullOrEmpty(commandAttribute.Name)) { commandAttribute.Name = method.Name; } DescriptionAttribute descriptionAttribute = Attribute.GetCustomAttribute(method, typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descriptionAttribute != null) { commandAttribute.Description = descriptionAttribute.Description; } CommandPermissionAttribute permissionAttribute = Attribute.GetCustomAttribute(method, typeof(CommandPermissionAttribute), true) as CommandPermissionAttribute; // Overwrite custom permissions if command permission is supplied if (!string.IsNullOrEmpty(commandAttribute.Permission)) { permissionAttribute = new StringPermissionAttribute(commandAttribute.Permission); } try { _pluginCommands.Add(method, new CommandData(commandAttribute, instance, permissionAttribute)); } catch (ArgumentException e) { Log.Debug($"Command already exist {method.Name}, {method}", e); } } }
public CommandData(CommandAttribute attribute, object instance, CommandPermissionAttribute permissionAttribute) { Attribute = attribute; Instance = instance; PermissionAttribute = permissionAttribute; }
public abstract bool HasPermission(CommandPermissionAttribute attr, OpenPlayer player);