قواعد جدول ایستا هستند؛ حالت script می‌گذارد تکه‌ای JavaScript برای هر اتصال پویا خروجی تعیین کند - بر اساس ساعت روز، پورت، IP تفکیک‌شده، هر ترکیبی. قابلیت هسته Premium و در CFW آماده استفاده.

فعال‌سازی

بخش سطح بالای script اضافه کنید و mode: script بگذارید (در سوییچ حالتِ کلاینت گزینه Script ظاهر می‌شود):

mode: script
script:
  code: |
    function main(ctx, metadata) {
      // نام خروجی برگردانید: گروه / "DIRECT" / "REJECT"
      if (metadata.host && metadata.host.endsWith("company.com")) {
        return "DIRECT";
      }
      // شب‌ها ترافیک بازی مستقیم، باقی ساعات از پروکسی
      const hour = new Date().getHours();
      if (metadata.dst_port === 3074 && hour >= 1 && hour <= 7) {
        return "DIRECT";
      }
      // بقیه به موتور قواعد
      return ctx.resolveOutbound(metadata) ?? "Select";
    }

فیلدهای مفید metadata

فیلدمعنی
hostدامنه مقصد (برای اتصال IP خام خالی است)
dst_ip / dst_portIP و پورت مقصد
src_ip / src_portآدرس مبدأ (تمایز دستگاه‌ها با allow-lan)
networktcp / udp
process_nameفرایند آغازگر (زیر TUN)

زمینه توابع کمکی هم دارد - ctx.geoip(ip)، ctx.resolveIP(host) - برای منطق «اول تفکیک، بعد تصمیم» که با قواعد ساده بیان‌شدنی نیست.

میان‌برهای script: راه سبک

نمی‌خواهید کل حالت را بگیرید؟ عبارت‌های کوتاه تعریف و از قواعد عادی صدا بزنید - بهترین هر دو دنیا:

script:
  shortcuts:
    late-night-game: dst_port == 3074 and now.hour < 7

rules:
  - SCRIPT,late-night-game,DIRECT
  - MATCH,Select

هشدارها

  • اسکریپت روی هر اتصال اجرا می‌شود؛ منطق سنگین تأخیر را چند برابر می‌کند. هرچه با قاعده بیان می‌شود، با قاعده.
  • اسکریپت خطادار اتصال را می‌اندازد؛ بعد از تغییر، صفحه Logs را بپایید.
  • هرگز اسکریپت پیکربندی‌های غیرمطمئن را اجرا نکنید - هرچه قابلیت قوی‌تر، پروفایل بدخواه خطرناک‌تر.
نکته: شرط‌های زمان و پورت با shortcuts خلاصه‌ترند؛ main کامل را وقتی بنویسید که تفکیک یا منطق چندشرطی لازم دارید.