Ngaktifake remote skrip Mikrotik saka Telegram v 2.0

Happy telat liburan kanggo kabeh. Tema iki luwih apik versi apa aku wrote bali ing 2016 kene.

Umumé, prinsip operasi ora diganti, mung prabédan sing saiki bisa langsung tanpa wektu tundha.

Kita upload script menyang Mikrotik, ngganti BotID lan ChatID kita dhewe lan nggawe jadwal kanggo iku. Setel parameter "Wektu Mulai" kanggo wiwitan (Mbukak skrip nalika wiwitan.)
"Interval": 00:00:00
Yen ora, kabeh kaya sing ana.

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 < $startLoc) do={
    :set endLoc ($startLoc + 1);
  };
  :local message [:pick $content $startLoc $endLoc]
  #:log info $message;
  :return $message;
}


:while ( true ) do={
  :do {
    #:log info "https://api.telegram.org/$botID/getUpdates?offset=$messageId&limit=1&allowed_updates=message&timeout=60";
    :tool fetch url=("https://api.telegram.org/$botID/getUpdates?offset=$messageId&limit=1&allowed_updates=message&timeout=60") dst-path="getUpdates";
    :local content [/file get [/file find name=getUpdates] contents] ;
    #:log info $content;
    :if ([:len $content] > 30) do={
      :set messageId ([$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={}
};

Sawise pirang-pirang taun panggunaan, bug ditemokake: kanggo sawetara alasan sing ora dingerteni, Mikrotik sing ringkih mandhegake skrip, nanging ing sing luwih kuat bisa digunakake tanpa mandheg.

Kanggo tujuan kasebut, aku mbuwang kruk WatchDog. Ing kene kita ngganti jeneng skrip menyang sing kasebut ing ndhuwur. lan nyetel interval restart dadi 5 menit. Saben 5 menit "anjing pengawas" bakal mriksa skrip kasebut lan yen ora bisa, bakal mbukak.

WatchDogT.me

:global scriptname "t.me"
:if ([:len [/system script job find script=$"scriptname"]] > 0) do={
:log info "$scriptname Already Running - killing old script before continuing"
:foreach counter in=[/system script job find script=$"scriptname"] do={
/system script job remove $counter
}
}
/system script run $scriptname

Nah, kanggo panganan cuci mulut, naskah kasebut dijupuk saka forum Mikrotik.
Ngirim topik penting saka log menyang cart kita.

Kita nambah script kanggo gawe jadwal lan nemtokake interval restart saben 5 menit, ngganti BotID lan ChatID kanggo kita dhewe.

Notifikasi-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] < 1) || (([: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
   }
}

Kita entuk asil:

Ngaktifake remote skrip Mikrotik saka Telegram v 2.0

Source: www.habr.com

Add a comment