Telegram v 2.0-ээс Mikrotik скриптүүдийг алсаас идэвхжүүлэх

Бүгдэд нь хожимдсон баярын мэнд хүргэе. Энэ сэдэв нь илүү дээр юм 2016 онд бичсэн зүйлийнхээ хувилбарыг энд оруулав.

Ерөнхийдөө үйл ажиллагааны зарчим өөрчлөгдөөгүй, цорын ганц ялгаа нь одоо цаг алдалгүй шууд ажиллаж байна.

Бид скриптийг Mikrotik-д байршуулж, BotID болон ChatID-г өөрийн болгож, хуваарь гаргадаг. "Эхлэх цаг" параметрийг эхлүүлэхийн тулд тохируулна уу (Эхлэх үед скриптийг ажиллуул.)
"Интервал": 00:00:00
Тэгэхгүй бол бүх зүйл байсан шигээ.

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

Хэдэн жилийн турш ашигласны дараа алдаа илэрсэн: үл мэдэгдэх шалтгаанаар сул Микротик скриптийг зогсоодог, гэхдээ илүү хүчирхэг дээр энэ нь зогсолтгүй ажилладаг.

Эдгээр зорилгын үүднээс би Watchdog таяг шидэв. Энд бид скриптийн нэрийг дээр дурдсан нэрээр өөрчилнө. дахин эхлүүлэх интервалыг 5 минут болгож тохируулна уу. Манай "харуул" 5 минут тутамд скриптийг шалгаж, болохгүй бол ажиллуулна.

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

За, амттангаар скриптийг Микротик форумаас авсан.
Бүртгэлээс чухал сэдвүүдийг манай тэрэг рүү илгээдэг.

Бид хуваарийн дагуу скрипт нэмж, дахин эхлүүлэх интервалыг 5 минут тутамд зааж, BotID болон ChatID-г өөрчилдөг.

Мэдэгдлийн бүртгэл

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

Бид үр дүнг авдаг:

Telegram v 2.0-ээс Mikrotik скриптүүдийг алсаас идэвхжүүлэх

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх