Code: Select all
#
# Test: RouterOS version 6.34.3
# Descripci?n: Scan Hotspot Users To Remove Them From Running Or Paused Time According To Their Expiration Time!
# Version: 6.0
#
:local AF [/system clock get date]
:local AH [/system clock get time]
:local AD [ :pick $AF 4 6 ]
:local AM [:pick $AF 0 3]
:local AY [:pick $AF 7 11]
:local OTB false
: local SMD (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
:local SDT 0
: local SM ("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")
: local SBY (2016, 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096)
:if ( [:len [:find $SBY $AY] ] > 0 ) do {
:set $SMD ( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
}\
else {
:set $SMD ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
}
:local SMNO ([:find $SM $AM])
:local SDNO ([:pick $SMD $SMNO])
:for i from=0 to=11 do={
:set SDT ( $SDT + [ :pick $SMD $i ] )
}
:foreach u in=[/ip hotspot user find where disabled=no ] do={
:local OU [/ip hotspot user get $u name]
:local LP [/ip hotspot user get $u profile]
:local EUL [/ip hotspot user get $u limit-uptime]
:local EU [/ip hotspot user get $u uptime]
:local TMC [/ip hotspot user get $u comment]
:local EULT [:len $EUL]
:local TMCT [:len $TMC]
:local d 0
:local w 0
:local h ""
:local TT 0
:if ([:len [:find $TMC "Tt:"]] !=0 ) do {
:set $TT [:pick $TMC ([:find $TMC "Tt:"] + 3) (([:find $TMC "Tt:"] + 3) + 1) ]
:if ($TT = 1) do {
}
:if ($TT = 2) do {
:set $EUL [:pick $TMC ( [:find $TMC "Tf:"] + 3) [:find $TMC ":fT"] ]
:set $EULT [:len $EUL]
}
}
:if ([:len [:find $TMC "Fc:"]]!=0 && $TT!=0 && $EULT!=0 && $TMCT!=0 && [:len [:find $TMC "Fl:"]]!=0) do {
:local OIF [:pick [:pick $TMC ([:find $TMC "Fl:"] + 3) (([:find $TMC "Fl:"] + 3) + 20) ] 0 11]
:local OIH [:pick [:pick $TMC ([:find $TMC "Fl:"] + 3) (([:find $TMC "Fl:"] + 3) + 20) ] 12 20]
:local OID [ :pick $OIF 4 6 ]
:local OIM [:pick $OIF 0 3]
:local OIY [:pick $OIF 7 11]
:local OIMNO ([:find $SM $OIM])
:local OIMDNO ([:pick $SMD $OIMNO])
:local SHS ($OIH+$EUL)
:if ([:len $SHS]=8) do {
:set $d 0
:set $h $SHS
}
:if ( [:len $SHS] = 10 || [:len $SHS] = 11 ) do {
:if ([:len [:find $SHS "w"]]!=0) do {
:set $w [:pick $SHS 0 [:find $SHS "w"]]
:set $d ($w*7)
:set $h [:pick $SHS ([:find $SHS "w"] + 1) 10]
}
:if ([:len [:find $SHS "d"]]!=0) do {
:set $d [:pick $SHS 0 [:find $SHS "d"]]
:set $h [:pick $SHS ([:find $SHS "d"] + 1) 10]
}
}
:if ([:len $SHS]=12) do {
:if ([:len [:find $SHS "w"]]!=0) do {
:set $w [:pick $SHS 0 [:find $SHS "w"]]
:set $d ($w*7)
}
:if ([:len [:find $SHS "d"]]!=0) do {
:set $d ($d + [:pick $SHS 2 [:find $SHS "d"]])
}
:set $h [:pick $SHS ([:find $SHS "d"] + 1) 12]
}
:if ([:len $SHS]=13) do {
:if ([:len [:find $SHS "w"]]!=0) do {
:set $w [:pick $SHS 0 [:find $SHS "w"]]
:set $d ($w*7)
}
:if ([:len [:find $SHS "d"]]!=0) do {
:set $d ($d + [:pick $SHS 3 [:find $SHS "d"]])
}
:set $h [:pick $SHS ([:find $SHS "d"]+1) 13]
}
:local OIFHDT 0
:local ELCDT 0
:if ( $OIMNO = 0 ) do {
:set $OIFHDT ( $OIFHDT + $OID )
}\
else {
:set $OIMNO ($OIMNO - 1)
:for i from=0 to=$OIMNO do {
:set $OIFHDT ($OIFHDT + [ :pick $SMD $i ])
}
:set $OIFHDT ( $OIFHDT + $OID )
}
:set $ELCDT ($OIFHDT + $d)
:local OVMNO 0
:local OVM ""
:local OVD 0
:local OVY 0
: local OVF
: local OVH
:local AS 0
:local i 0
:if ($d>0) do {
:if ($ELCDT>$SDT) do {
:set $AS 0
:set $i 0
:local SRD ($ELCDT-$SDT)
:set $OVY ($OIY+1)
:if ( [:len [:find $SBY $OVY] ] > 0 ) do {
:set $SMD ( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
}\
else {
:set $SMD ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
}
:do {
:set $AS ($AS + [:pick $SMD $i])
:set $i ($i+1)
} while ($AS<$SRD)
:set $OVMNO ($i-1)
:set $OVD ( [:pick $SMD $OVMNO] - ( $AS - $SRD ) )
:set $OVM [:pick $SM $OVMNO]
:if ( [:len $OVD]=1 ) do {
:set $OVD ("0"."$OVD")
}
:set $OVF ("$OVM"."/"."$OVD"."/"."$OVY")
:set $OVH ($h)
}\
else {
do {
:set $AS ($AS + [:pick $SMD $i])
:set $i ($i+1)
} while ($AS<$ELCDT)
:set $OVMNO ($i-1)
:set $OVD ( [:pick $SMD $OVMNO] - ( $AS - $ELCDT ) )
:set $OVM [:pick $SM $OVMNO]
:set $OVY ($OIY)
:if ( [:len $OVD]=1 ) do {
:set $OVD ("0"."$OVD")
}
:set $OVF ("$OVM"."/"."$OVD"."/"."$OVY")
:set $OVH ($h)
}
}\
else {
:set $OVF ($OIF)
:set $OVH ($h)
}
:if ([:len [:find $TMC "Fe:"]]=0) do {
:set $TMC [/ip hotspot user get $u comment]
:set $TMC ( $TMC."Fe:".$OVF." ".$OVH."|" )
[/ip hotspot user set $u comment=$TMC ]
}
:local DEL false
:if ( [:pick $AF 7 11] > [:pick $OVF 7 11] ) do {
:set $DEL (true)
}\
else {
:if ( [:pick $AF 7 11] = [:pick $OVF 7 11] ) do {
:if ( [:find $SM [:pick $AF 0 3]] > [:find $SM [:pick $OVF 0 3]] ) do {
:set $DEL (true)
}\
else {
:if ( [:find $SM [:pick $AF 0 3]] = [:find $SM [:pick $OVF 0 3]] ) do {
:if ( [ :pick $AF 4 6 ] > [ :pick $OVF 4 6 ] ) do {
:set $DEL (true)
}\
else {
:if ( [ :pick $AF 4 6 ] = [ :pick $OVF 4 6 ] ) do {
:if ($AH>=$OVH) do {
:set $DEL (true)
}
}
}
}
}
}
}
:if ( $DEL = true ) do {
:log info "Ficha Agotada: Removiendo Voucher: $OU"
[ /ip hotspot user disable $u ]
[ /ip hotspot active remove [find where user=$OU] ]
[ /ip hotspot cookie remove [find where user=$OU] ]
}
}
}