Ang layo nga pagpaaktibo sa mga script sa Mikrotik gikan sa Telegram v 2.0

Ang tanan sa miaging holiday. Kini nga tema mas maayo bersyon sa akong gisulat balik sa 2016 dinhi.

Sa kinatibuk-an, ang prinsipyo sa operasyon wala mausab, nga ang bugtong kalainan mao nga karon kini molihok dayon nga walay paglangan.

Among i-upload ang script sa Mikrotik, usbon ang BotID ug ChatID sa among kaugalingon ug maghimo ug eskedyul alang niini. Ibutang ang parameter nga "Oras sa Pagsugod" sa pagsugod (Pagdalagan ang script sa pagsugod.)
Interval: 00:00:00
Ang tanan nga uban pa ingon sa kaniadto.

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

Sulod sa pipila ka mga tuig nga paggamit, usa ka bug ang gipadayag, tungod sa pipila ka rason, ang huyang nga Mikrotik sa usa ka rason mihunong sa script, sa mas gamhanan nga kini nagtrabaho nga walay hunong.

Alang niini nga mga katuyoan, gilabay nako ang usa ka WatchDog crutch. dinhi atong usbon ang ngalan sa script ngadto sa usa nga gipakita sa ibabaw. ug itakda ang restart interval sa 5 minutos. Matag 5 minutos, susihon sa among "watch dog" ang script, ug kung dili kini molihok, kini modagan.

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

Ug alang sa dessert, ang script gikuha gikan sa forum sa Mikrotik.
Nagpadala ug importanteng mga topiko gikan sa troso ngadto sa among kariton.

Ihulog ang script sa eskedyul ug ipiho ang restart interval matag 5 minuto, usba ang BotID ug ChatID sa imong kaugalingon.

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

Atong makuha ang resulta:

Ang layo nga pagpaaktibo sa mga script sa Mikrotik gikan sa Telegram v 2.0

Source: www.habr.com

Idugang sa usa ka comment