Exemplo n.º 1
0
        private void AppendCommand(
            StringBuilder markdownBuilder,
            ICommandRegistration command,
            List <ICommandRegistration> commands,
            ICommandContext commandContext)
        {
            markdownBuilder.Append("- ").Append(commandContext.CommandPrefix).Append(commandContext.CommandAlias);
            if (!string.IsNullOrEmpty(command.Syntax))
            {
                markdownBuilder.Append(' ').Append(command.Syntax);
            }

            if (!string.IsNullOrEmpty(command.Description))
            {
                markdownBuilder.Append(": ").Append(command.Description);
            }

            markdownBuilder.AppendLine();
            markdownBuilder.Append("  id: ").AppendLine(command.Id);
            var permissionRegistrations = new List <IPermissionRegistration>();

            var commandPermission = m_PermissionBuilder.GetPermission(command, commands);

            var commandPermissionRegistration = m_PermissionRegistry.FindPermission(m_Plugin, commandPermission);

            if (commandPermissionRegistration != null)
            {
                permissionRegistrations.Add(commandPermissionRegistration);
            }

            if (command.PermissionRegistrations != null)
            {
                var prefixedPermissions = new List <IPermissionRegistration>();

                foreach (var permission in command.PermissionRegistrations)
                {
                    prefixedPermissions.Add(new PermissionRegistration
                    {
                        Permission   = commandPermission + "." + permission.Permission,
                        Description  = permission.Description,
                        DefaultGrant = permission.DefaultGrant,
                        Owner        = permission.Owner
                    });
                }

                permissionRegistrations.AddRange(prefixedPermissions);
            }

            if (permissionRegistrations.Count > 0)
            {
                markdownBuilder.AppendLine("  permissions:");

                foreach (var permissionRegistration in permissionRegistrations)
                {
                    markdownBuilder.Append("  - ").Append(permissionRegistration.Permission);
                    if (!string.IsNullOrEmpty(permissionRegistration.Description))
                    {
                        markdownBuilder.Append(": ").Append(permissionRegistration.Description);
                    }

                    markdownBuilder.AppendLine();
                }

                m_PrintedCommandPermissions.AddRange(permissionRegistrations);
            }

            var childCommands = commands
                                .Where(d => string.Equals(d.ParentId, command.Id, StringComparison.OrdinalIgnoreCase));

            foreach (var child in childCommands)
            {
                var ctx2 = m_CommandContextBuilder.CreateContext(null, new string[] { command.Name, child.Name }, string.Empty, commands);
                AppendCommand(markdownBuilder, child, commands, ctx2);
            }
            commandContext.DisposeAsync().GetAwaiter().GetResult();
        }