Telegram v 2.0 дан Mikrotik скрипттерин алыстан иштетүү

Баарыңыздарга кечиккен майрамыңыздар менен. Бул тема жакшыраак Бул жерде 2016-жылы жазгандарымдын версиясы.

Жалпысынан алганда, иштөө принциби өзгөргөн жок, бир гана айырмасы, азыр ал токтоосуз дароо иштейт.

Микротикке скрипт жүктөйбүз, BotID жана ChatIDди өзүбүзгө алмаштырып, ага график түзөбүз. Ишке киргизүү үчүн "Баштоо убактысы" параметрин коюңуз (Скриптти ишке киргизүүдө иштетиңиз.)
"Интервал": 00:00:00
Болбосо баары мурункудай болот.

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

Бир нече жыл колдонуудан кийин ката табылды: кандайдыр бир белгисиз себептерден улам алсыз Mikrotik сценарийди токтотот, бирок күчтүүрөөктөрүндө ал токтобой иштейт.

Ушул максаттар үчүн мен WatchDog балдакты ыргыттым. Бул жерде биз скрипттин атын жогоруда көрсөтүлгөнгө өзгөртөбүз. жана кайра баштоо аралыгын 5 мүнөткө орнотуңуз. Ар бир 5 мүнөт сайын биздин “смотрящий” сценарийди текшерип, иштебесе аны иштетет.

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

Ооба, десерт үчүн сценарий Микротик форумунан алынган.
Журналдан маанилүү темаларды биздин арабага жөнөтөт.

Биз графикке скрипт кошобуз жана кайра баштоо аралыгын ар 5 мүнөт сайын белгилейбиз, BotID жана ChatIDди өзүбүзгө алмаштырабыз.

Билдирүү журналы

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

Биз жыйынтык алабыз:

Telegram v 2.0 дан Mikrotik скрипттерин алыстан иштетүү

Source: www.habr.com

Комментарий кошуу