diff --git a/docs/Build_Core_fa.md b/docs/Build_Core_fa.md new file mode 100644 index 0000000..a5b1e33 --- /dev/null +++ b/docs/Build_Core_fa.md @@ -0,0 +1,32 @@ +## ساخت nekoray_core و nekobox_core + +### ساختار دایرکتوری + +``` + | nekoray + | go/cmd/* + | Xray-core + | sing-box-extra + | sing-box + | ...... +``` + +### ساخت معمولی + +1. `bash libs/get_source.sh `(دریافت خودکار ساختار دایرکتوری، خودکار checkout commit) +2. `GOOS=windows GOARCH=amd64 bash libs/build_go.sh` + +برای مشاهده GOOS و GOARCH های پشتیبانی شده به `libs/build_go.sh` مراجعه کنید. + +در ساخت غیررسمی، نیازی به کامپایل `updater` و `launcher` نیست. + +### تگ‌های sing-box + +برای مشاهده تگ‌های استفاده شده به `libs/build_go.sh` مراجعه کنید. + + + + + + + diff --git a/docs/Build_Linux_fa.md b/docs/Build_Linux_fa.md index 9dfda30..26464f0 100644 --- a/docs/Build_Linux_fa.md +++ b/docs/Build_Linux_fa.md @@ -71,4 +71,4 @@ ninja پس از کامپایل، فایل `nekoray` به دست می‌آید. ### کامپایل بخش Go -لطفاً به [Build_Core.md](./Build_Core.md) مراجعه کنید. +لطفاً به [Build_Core_fa.md](./Build_Core_fa.md) مراجعه کنید. diff --git a/docs/Build_Windows_fa.md b/docs/Build_Windows_fa.md new file mode 100644 index 0000000..a315b30 --- /dev/null +++ b/docs/Build_Windows_fa.md @@ -0,0 +1,65 @@ +کامپایل Nekoray در ویندوز + +### git clone + +``` +git clone https://github.com/MatsuriDayo/nekoray.git --recursive +``` + +### نصب Visual Studio + +با نصب از وب سایت رسمی مایکروسافت، می توانید از نسخه های 2019 و 2022 استفاده کنید و محیط توسعه ++Win32 C را نصب کنید. + +پس از نصب، می‌توانید `x64 Native Tools Command Prompt` را در منوی «شروع» پیدا کنید. + +دستورات زیر این مقاله همه در این cmd اجرا می شوند. `cmake‍‍‍` `ninja` و ابزارهای دیگر را می توان با VS استفاده کرد. + +### دانلود Qt SDK + +نسخه ای که در حال حاضر توسط Windows Release استفاده می شود Qt 6.5.x است. + +پس از دانلود و خارج کردن از حالت ظش، پوشه bin را به environment variable اضافه کنید. + +#### بسته Qt مورد استفاده برای کامپایل نسخه (MSVC2019 x86_64) را دانلود کنید + +https://github.com/MatsuriDayo/nekoray_qt_runtime/releases/download/20220503/Qt6.5.0-Windows-x86_64-VS2022-17.5.5-20230507.7z + +#### Official signed version of Qt 5.15.2 (optional, known memory leak bugs) + +پکیج های `qtbase` `qtsvg` `qttools` را از اینجا دانلود کنید و آن را در همان دایرکتوری استخراج کنید. + +https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5152/qt.qt5.5152.win64_msvc2019_64/ + +### کامپایل جزئی ++c + +#### وابستگی های مورد نیاز ++C/C را کامپایل و نصب کنید + +(You may have to hang the ladder for this step) + +```shell +bash ./libs/build_deps_all.sh +``` + +در حال حاضر فقط اسکریپت های bash وجود دارد، بدون پردازش دسته ای یا پاورشل، اگر ویندوز همراه bash نیست، توصیه می شود خودتان آن را نصب کنید. + +جزئیاتی مانند پارامترهای CMake مشابه لینوکس است. اگر سوالی دارید، لطفاً به داکیومنت [Build_Linux_fa.md](./Build_Linux_fa.md) مراجعه کنید. + +#### کامپایل کد اصلی + +لطفاً دستورات را با موقعیت QT Sdk خود جایگزین کنید. + +```shell +mkdir build +cd build +cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=D:/path/to/qt/5.15.2/msvc2019_64 .. +ninja +``` + +بعد از اتمام کامپایل، فایل `nekoray.exe` را دریافت خواهید کرد. + +سپس با اجرای دستور `windeployqt nekoray.exe`، فایل‌های مورد نیاز مانند DLL به صورت خودکار در دایرکتوری فعلی کپی می‌شوند. + + +### بخش کامپایل Go + +لطفاً به [Build_Core_fa.md](./Build_Core_fa.md) مراجعه کنید. diff --git a/docs/HookJS.md b/docs/HookJS.md index dbc2301..9050e42 100644 --- a/docs/HookJS.md +++ b/docs/HookJS.md @@ -103,4 +103,4 @@ var my_hook = /** @class */ (function () { return my_hook; }()); globalAny.hook = new my_hook; -``` +``` \ No newline at end of file diff --git a/docs/HookJS_fa.md b/docs/HookJS_fa.md new file mode 100644 index 0000000..ed82c9f --- /dev/null +++ b/docs/HookJS_fa.md @@ -0,0 +1,106 @@ +# استفاده از فایل hook.js +## فعالسازی + +1. `Basic Settings - Security - Enable hook.js function` را روشن کنید +2. کد JS را در `config/hook.nekoray.js` یا `config/hook.nekobox.js` قرار دهید. + +## Technical Information + +* JS engine: QuickJS ES2020. +* Provided interfaces: as shown in the following code + +## کد نمونه (typescript) + +```ts +const globalAny: any = globalThis + +// روش‌های ارائه‌شده در حال حاضر +interface nekoray_in { + log(...a: any): void +} + +// نقاط hook ارائه‌شده در حال حاضر +interface nekoray_hook { + hook_core_config(config: string): string + hook_tun_config(config: string): string + hook_tun_script(script: string): string + hook_import(content: string): string +} + +class my_hook implements nekoray_hook { + private nekoray = globalAny.nekoray as nekoray_in + + hook_core_config(config: string): string { + var json = JSON.parse(config) + var my_rule = { + "geosite": "cn", + "server": "dns-direct", + "disable_cache": true + } + json["dns"]["rules"].push(my_rule) + return JSON.stringify(json) + } + + hook_tun_config(config: string): string { + return config // بازگشت ورودی، نشان دهنده عدم تغییر + } + + hook_tun_script(script: string): string { + console.log("Script") // خروجی به stdout + this.nekoray.log("Script:", script) // خروجی به لاگ + return script + } + + hook_import(content: string): string { + var newContent: Array = [] + content.split("\n").forEach((line: any) => { + if (line.startsWith("vmess://")) { + newContent.push(line) + } + }) + return newContent.join("\n") + } +} + +globalAny.hook = new my_hook +``` + +## کد نمونه (javascript) + +```js +var globalAny = globalThis; +var my_hook = /** @class */ (function () { + function my_hook() { + this.nekoray = globalAny.nekoray; + } + my_hook.prototype.hook_core_config = function (config) { + var json = JSON.parse(config); + var my_rule = { + "geosite": "cn", + "server": "dns-direct", + "disable_cache": true + }; + json["dns"]["rules"].push(my_rule); + return JSON.stringify(json); + }; + my_hook.prototype.hook_tun_config = function (config) { + return config; // بازگشت ورودی، نشان دهنده عدم تغییر + }; + my_hook.prototype.hook_tun_script = function (script) { + console.log("Script"); // خروجی به stdout + this.nekoray.log("Script:", script); // خروجی به لاگ + return script; + }; + my_hook.prototype.hook_import = function (content) { + var newContent = []; + content.split("\n").forEach(function (line) { + if (line.startsWith("vmess://")) { + newContent.push(line); + } + }); + return newContent.join("\n"); + }; + return my_hook; +}()); +globalAny.hook = new my_hook; +```