Afstandaktivering van Mikrotik-skrifte vanaf Telegram v 2.0

Alles met die afgelope vakansie. Hierdie tema is beter weergawe van wat ek in 2016 hier geskryf het.

Oor die algemeen het die werkingsbeginsel nie verander nie, met die enigste verskil dat dit nou onmiddellik sonder versuim werk.

Ons laai die skrif op na Mikrotik, verander die BotID en ChatID na ons eie en skep 'n skedule daarvoor. Stel die "Begin Tyd"-parameter om op te begin (Laat die skrip by opstart uit.)
Interval: 00:00:00
Alles anders is soos dit was.

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

Vir 'n paar jaar se gebruik is 'n fout aan die lig gebring, om een ​​of ander onbekende rede stop swak Mikrotik om een ​​of ander rede die skrif, op kragtiger werk dit onophoudelik.

Vir hierdie doeleindes het ek 'n WatchDog-kruk gegooi. hier verander ons die naam van die skrif na die een hierbo aangedui. en stel die herbegin-interval op 5 minute. Elke 5 minute sal ons "waghond" die draaiboek nagaan, en as dit nie werk nie, sal dit dit laat loop.

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

En vir nagereg is die draaiboek van die Mikrotik-forum geneem.
Stuur belangrike onderwerpe vanaf die log na ons mandjie.

Gooi die skrif in die skedule en spesifiseer die herbegin interval elke 5 minute, verander die BotID en ChatID na jou eie.

in kennis stel-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
   }
}

Ons kry die resultaat:

Afstandaktivering van Mikrotik-skrifte vanaf Telegram v 2.0

Bron: will.com

Voeg 'n opmerking