Aktipkeun jauh skrip Mikrotik tina Telegram v 2.0

Wilujeng telat liburan ka sadayana. Téma ieu langkung saé Vérsi naon anu kuring nyerat dina taun 2016 di dieu.

Sacara umum, prinsip operasi teu robah, hijina bédana nyaéta yén ayeuna gawéna instan tanpa reureuh.

Urang unggah naskah ka Mikrotik, ngarobah BotID na ChatID urang sorangan sarta nyieun jadwal pikeun eta. Setel parameter "Start Time" pikeun ngamimitian (Jalankeun skrip nalika ngamimitian.)
"Interval": 00:00:00
Upami teu kitu, sadayana sapertos kieu.

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

Saatos sababaraha taun pamakean, bug kapanggih: kusabab alesan anu teu dipikanyaho, mikrotik lemah ngeureunkeun naskah, tapi dina anu langkung kuat éta tiasa dianggo tanpa lirén.

Pikeun tujuan ieu, abdi threw on WatchDog crutch. Di dieu urang ngaganti ngaran naskah kana hiji dituduhkeun di luhur. tur nyetel interval balikan deui ka 5 menit. Unggal 5 menit "anjing penjaga" urang bakal mariksa naskah sareng upami éta henteu jalan, éta bakal dijalankeun.

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

Muhun, pikeun dessert, naskah dicokot tina forum Mikrotik.
Ngirim topik penting tina log ka karanjang kami.

Kami nambihan naskah pikeun ngajadwalkeun sareng netepkeun interval balikan deui unggal 5 menit, robih BotID sareng ChatID ka urang sorangan.

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

Urang meunang hasilna:

Aktipkeun jauh skrip Mikrotik tina Telegram v 2.0

sumber: www.habr.com

Tambahkeun komentar