Të gjithëve me festën e kaluar. Ky temë është një version më i mirë .
Në përgjithësi, parimi i punës nuk është ndryshuar, përveç se tani funksionon menjëherë pa vonesa.
Ngarkohet skripti në Mikrotik, ndryshojmë BotID dhe ChatID sipas të dhënave tona dhe krijojmë për të një planifikim. Vendosim parametrin 'Koha e Fillimit' në startup (Aktivizimi i skriptit kur të fillojë.)
'Intervali': 00:00:00
Në të tjerat, gjithçka mbetet siç ishte.
Telegram-v2
:delay 10
:global mtIdentity [/system identity get name];
:global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:global myChatID "YYYYYY" ;
:local chatId 0;
:local messageId 0;
:local parse do={
:local startLoc ([:find $content $variable -1] + [:len $variable] + 2);
:local commaLoc ([:find $content "," $startLoc] - 1 + 1);
:local braceLoc ([:find $content "}" $startLoc] - 1 + 1);
:local endLoc $commaLoc;
:local startSymbol [:pick $content $startLoc]
:if ($braceLoc != 0 and ($commaLoc = 0 or $braceLoc < $commaLoc)) do={
:set endLoc $braceLoc;
};
:if ($startSymbol = "{") do={
:set endLoc ($braceLoc + 1);
};
:if ($quotas = true) do={
:set startLoc ($startLoc + 1);
:set endLoc ($endLoc - 1);
}
:if ($endLoc 30) do={
:set message ([$parse content=$content variable="update_id"] + 1)
:local message [$parse content=$content variable="text" quotas=true]
:local chat [$parse content=$content variable="chat"]
:local chatId [$parse content=$chat variable="id"]
:if (($chatId = $myChatID) and ([/system script find name=$message] != "")) do={
:system script run $message;
} else={
:tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$chatId&text=$mtIdentity: Unknown command: $message") keep-result=no
}
}
} on-error={}
};Pas disa vitesh përdorimi, u identifikua një bug, për arsye të paqartë, Mikrotik të dobët ndalojnë skenarin, ndërsa në ato më të fuqishme funksionon pa ndalese.
Për këto qëllime, krijova një solucion WatchDog. këtu e ndryshojmë emrin e skenarit në atë që përmendëm më lart. dhe vendosim intervalin e ripërtritjes në 5 minuta. Çdo 5 minuta, „përgjuesi ynë” do të kontrollojë skenarin dhe nëse ai nuk funksionon, do ta niste atë.
WatchDogT.me
:global scriptname "t.me"
:if ([:len [/system script job find script=$"scriptname"]] > 0) do={
:log info "$scriptname tashmë po punon - po vrasim skenarin e vjetër para se të vazhdojmë"
:foreach counter in=[/system script job find script=$"scriptname"] do={
/system script job remove $counter
}
}
/system script run $scriptnameDhe për ëmbëlsirë, skenari është marrë nga forumi Mikrotik.
Dërgon tema të rëndësishme nga logu në telegramin tonë.
E hedhim skenarin në planifikim dhe tregojmë intervalin e ripërtritjes çdo 5 minuta, e ndryshojmë BotID dhe ChatID sipas të dhënave tona.
Notify-log
:global lastTime
:global output
:global mtIdentity [/system identity get name];
:global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:global myChatID "YYYYYY" ;
:local LogGet [ :toarray [ /log find topics~"critical" || message~"login failure" || message~"[Ff]ailure" ] ] ;
:local LogtLineCount [ :len $LogGet ] ;
if ($LogtLineCount > 0) do={
:local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
:if ([:len $currentTime] = 10 ) do={
:set currentTime [ :pick $currentTime 0 10 ];
}
:set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
:if (([:len $lastTime] 0) && ($lastTime != $currentTime))) do={
:set lastTime $currentTime ;
:tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$myChatID&text="$mtIdentity" : $output") keep-result=no
}
}Do marrëjmë rezultatin:

Burimi: habr.com
