Telegram v 2.0-dan Mikrotik skriptlərinin uzaqdan aktivləşdirilməsi

Hamısı keçmiş bayramla. Bu mövzu daha yaxşıdır 2016-cı ildə yazdıqlarımın versiyası burada.

Ümumiyyətlə, əməliyyat prinsipi dəyişməyib, yeganə fərq, indi gecikmədən dərhal işləyir.

Skripti Mikrotik-ə yükləyirik, BotID və ChatID-ni özümüzə dəyişirik və bunun üçün cədvəl yaradırıq. Başlanğıc üçün "Başlama vaxtı" parametrini təyin edin (Başlanğıcda skripti işə salın.)
Interval: 00:00:00
Qalan hər şey əvvəlki kimidir.

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

Bir neçə il istifadə üçün bir səhv aşkar edildi, naməlum səbəblərdən zəif Mikrotik nədənsə skripti dayandırır, daha güclü olanlarda dayanmadan işləyir.

Bu məqsədlər üçün mən WatchDog qoltuqunu atdım. burada skriptin adını yuxarıda göstərilənə dəyişdiririk. və yenidən başlama intervalını 5 dəqiqəyə təyin edin. Hər 5 dəqiqədən bir “gözətçi itimiz” ssenarini yoxlayacaq, işləməsə onu işə salacaq.

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

Şirin üçün isə skript Mikrotik forumundan götürülüb.
Jurnaldan vacib mövzuları səbətimizə göndərir.

Skripti cədvələ atın və hər 5 dəqiqədən bir yenidən başlama intervalını təyin edin, BotID və ChatID-ni özünüzə dəyişdirin.

bildiriş jurnalı

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

Nəticəni alırıq:

Telegram v 2.0-dan Mikrotik skriptlərinin uzaqdan aktivləşdirilməsi

Mənbə: www.habr.com

Добавить комментарий