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(); }