Aktivite adistans nan scripts Mikrotik soti nan Telegram v 2.0

Bòn fèt an reta pou tout moun. Tèm sa a pi bon vèsyon sa mwen te ekri tounen nan 2016 isit la.

An jeneral, prensip la nan operasyon pa chanje, diferans lan sèlman ke kounye a li travay imedyatman san pèdi tan.

Nou telechaje script la nan Mikrotik, chanje BotID ak ChatID pou pwòp pa nou epi kreye yon orè pou li. Mete paramèt "Kòmanse Tan" nan demaraj (Kouri script la nan demaraj.)
"Entèval": 00:00:00
Sinon tout bagay se jan li te ye.

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

Apre yon koup de ane nan itilize, yo te dekouvri yon ensèk: pou kèk rezon enkoni, fèb Mikrotik sispann script la, men sou sa ki pi pwisan li travay san yo pa sispann.

Pou rezon sa yo, mwen jete sou beki WatchDog la. Isit la nou chanje non an nan script la nan yon sèl ki endike anwo a. epi mete entèval rekòmanse a 5 minit. Chak 5 minit "watchdog" nou an ap tcheke script la epi si li pa mache, li pral kouri li.

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

Oke, pou desè, yo te script la te pran nan fowòm nan Mikrotik.
Voye sijè enpòtan soti nan boutèy la nan kabwa nou an.

Nou ajoute script la nan pwograme epi presize entèval la rekòmanse chak 5 minit, chanje BotID ak ChatID nan pwòp pa nou.

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

Nou jwenn rezilta a:

Aktivite adistans nan scripts Mikrotik soti nan Telegram v 2.0

Sous: www.habr.com

Add nouvo kòmantè