Fernaktivéierung vu Mikrotik Skripte vum Telegram v 2.0

Schéi spéit Vakanz fir jiddereen. Dëst Thema ass besser Versioun vun deem wat ech geschriwwen zréck an 2016 hei.

Am Allgemengen huet de Prinzip vun der Operatioun net geännert, den eenzegen Ënnerscheed ass datt et elo direkt ouni Retard funktionnéiert.

Mir lued de Skript op Mikrotik erop, änneren d'BotID an d'ChatID op eis eegen a kreéieren en Zäitplang dofir. Setzt de "Startzäit" Parameter op Startup (Fuert de Skript beim Startup.)
"Intervall": 00:00:00
Soss ass alles wéi et war.

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

No e puer Joer Benotzung gouf e Feeler entdeckt: aus onbekannte Grënn stoppt schwaach Mikrotik d'Skript, awer op méi mächtegen funktionnéiert et ouni ze stoppen.

Fir dës Zwecker hunn ech d'WatchDog-Krüche geheit. Hei änneren mir den Numm vum Skript op deen uewen uginn. a set de Restartintervall op 5 Minutten. All 5 Minutten iwwerpréift eise "Waachdog" de Skript a wann et net klappt, leeft et.

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

Gutt, zum Dessert gouf de Skript vum Mikrotik Forum geholl.
Schéckt wichteg Themen aus dem Logbuch an eise Weenchen.

Mir addéieren de Skript fir ze plangen a spezifizéieren den Neistartintervall all 5 Minutten, änneren BotID an ChatID op eis eegen.

Notifikatiounslog

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

Mir kréien d'Resultat:

Fernaktivéierung vu Mikrotik Skripte vum Telegram v 2.0

Source: will.com

Setzt e Commentaire