Network

إيقاف حسابات البرودباند (PPP) تلقائياً بعد انتهاء المدة — 6

يوقف حسابات PPP عند انتهاء مدتها. المدة بالأيام هي الرقم في بداية اسم البروفايل (30@512.co تعني 30 يوم) وتاريخ البداية هو تاريخ أول دخول المسجل في كومنت الحساب (انظر سكربت 'ختم تاريخ أول دخول PPP'). كما يفصل الجلسة الحالية. يعمل يومياً من الـ Scheduler.

إصدار ⁨MikroTik⁩

RouterOS 6

/system script add name=ppp_expiry_check source={
    # EN: Month names/lengths used to turn a date into a day number (leap years ignored)
    # AR: أسماء الشهور وأيامها لتحويل التاريخ إلى رقم يوم (بدون حساب السنة الكبيسة)
    :local monthNames {"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"};
    :local monthLens {31;28;31;30;31;30;31;31;30;31;30;31};

    # EN: Helper: converts "mmm/dd/yyyy" (RouterOS v6 date format) to a day number
    # AR: دالة تحول التاريخ بصيغة mmm/dd/yyyy (صيغة v6) إلى رقم يوم
    :local toDays do={
        :local m [:find $names [:pick $d 0 3]];
        :local total ([:tonum [:pick $d 4 6]] + ([:tonum [:pick $d 7 11]] * 365));
        :if ($m > 0) do={
            :for k from=0 to=($m - 1) do={ :set total ($total + [:pick $lens $k]) }
        }
        :return $total;
    }

    # EN: Today as a day number | AR: تاريخ اليوم كرقم
    :local today [$toDays d=[/system clock get date] names=$monthNames lens=$monthLens];

    :foreach s in=[/ppp secret find where disabled=no] do={
        :local profName [/ppp secret get $s profile];
        :local note [/ppp secret get $s comment];
        # EN: Validity (days) is the number before "@" in the profile name, e.g. 30@512.co
        # AR: المدة بالأيام هي الرقم قبل علامة @ في اسم البروفايل مثل 30@512.co
        :local at [:find $profName "@"];
        :if ([:len $note] > 11 && [:typeof $at] = "num") do={
            :if ($at > 0 && [:pick $note 3 4] = "/") do={
                :local validity [:tonum [:pick $profName 0 $at]];
                :if ([:typeof $validity] = "num") do={
                    # EN: First-login date is stored at the start of the comment | AR: تاريخ أول دخول مخزن في بداية الكومنت
                    :local startDay [$toDays d=[:pick $note 0 11] names=$monthNames lens=$monthLens];
                    :if (($startDay + $validity) < $today) do={
                        :local who [/ppp secret get $s name];
                        # EN: Disable the account and kick its live session | AR: تعطيل الحساب وفصل الجلسة الحالية
                        /ppp secret disable $s;
                        /ppp active remove [find where name=$who];
                        :log info ("PPP expired: disabled " . $who);
                    }
                }
            }
        }
    }
}

# EN: Run it once a day | AR: تشغيله مرة كل يوم
/system scheduler add name=ppp_expiry_daily interval=1d on-event=ppp_expiry_check start-time=00:05:00