Telegram v 2.0-tik Mikrotik scripten urruneko aktibazioa

Dena iragan oporraldiarekin. Gai hau hobea da 2016an idatzi nuenaren bertsioa hemen.

Oro har, funtzionamendu-printzipioa ez da aldatu, desberdintasun bakarra orain berehala funtzionatzen duela atzerapenik gabe.

Gidoia Mikrotik-era igotzen dugu, BotID eta ChatID gurera aldatzen ditugu eta horretarako programazio bat sortzen dugu. Ezarri "Hasi ordua" parametroa abiarazteko (Exekutatu scripta abiaraztean.)
Tartea: 00:00:00
Beste guztia zegoen bezala dago.

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

Erabilera pare bat urtez, akats bat agertu zen, arrazoi ezezagun batengatik, Mikrotik ahulak arrazoiren batengatik gidoia geldiarazten du, indartsuagoetan etenik gabe funtzionatzen du.

Helburu horietarako, WatchDog makulu bat bota nuen. hemen gidoiaren izena goian adierazitakoari aldatuko diogu. eta ezarri berrabiarazteko tartea 5 minututan. 5 minuturo, gure "watch dog"-ek gidoia egiaztatuko du, eta funtzionatzen ez badu, exekutatuko du.

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

Eta postrerako, gidoia Mikrotik forotik hartua da.
Erregistrotik gure saskira gai garrantzitsuak bidaltzen ditu.

Bota script-a programaziora eta zehaztu berrabiarazteko tartea 5 minuturo, aldatu BotID eta ChatID zurea.

jakinarazi-erregistroa

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

Emaitza lortuko dugu:

Telegram v 2.0-tik Mikrotik scripten urruneko aktibazioa

Iturria: www.habr.com

Gehitu iruzkin berria