Mikrotik skriptu attālināta iespējošana no Telegram v 2.0

Priecīgus novēlotus svētkus visiem. Šī tēma ir labāka versija tam, ko es šeit rakstīju 2016. gadā.

Kopumā darbības princips nav mainījies, vienīgā atšķirība ir tāda, ka tagad tas darbojas uzreiz bez kavēšanās.

Mēs augšupielādējam skriptu Mikrotik, mainām BotID un ChatID uz savējiem un izveidojam tam grafiku. Iestatiet parametru "Start Time" uz startēšanu (palaidiet skriptu startēšanas laikā.)
"Intervāls": 00:00:00
Citādi viss ir kā bijis.

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={}
};

Pēc pāris gadu lietošanas tika atklāta kļūda: nezināma iemesla dēļ vājš Mikrotik aptur skriptu, bet uz jaudīgākiem tas darbojas bez apstājas.

Šiem nolūkiem es uzmetu WatchDog kruķi. Šeit mēs mainām skripta nosaukumu uz iepriekš norādīto. un iestatiet restartēšanas intervālu uz 5 minūtēm. Ik pēc 5 minūtēm mūsu "sargsuns" pārbaudīs skriptu un, ja tas nedarbosies, tas to palaidīs.

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

Nu, desertā scenārijs ņemts no Mikrotik foruma.
Nosūta svarīgas tēmas no žurnāla uz mūsu grozu.

Mēs pievienojam skriptu grafikam un norādām restartēšanas intervālu ik pēc 5 minūtēm, mainām BotID un ChatID uz mūsu pašu.

Paziņojumu žurnāls

: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
   }
}

Mēs iegūstam rezultātu:

Mikrotik skriptu attālināta iespējošana no Telegram v 2.0

Avots: www.habr.com

Pievieno komentāru