Telegram v 2.0 کان Mikrotik اسڪرپٽس جي ريموٽ فعال ٿيڻ

سڀني کي دير سان عيد مبارڪ. هي موضوع بهتر آهي ان جو نسخو جيڪو مون 2016 ۾ واپس لکيو هو هتي.

عام طور تي، آپريشن جو اصول تبديل نه ڪيو ويو آهي، صرف فرق اهو آهي ته هاڻي اهو ڪم ڪري ٿو بغير ڪنهن دير جي.

اسان اسڪرپٽ کي Mikrotik تي اپلوڊ ڪريون ٿا، BotID ۽ ChatID کي پاڻ ۾ تبديل ڪريو ۽ ان لاءِ شيڊول ٺاھيو. شروع ڪرڻ لاءِ ”اسٽارٽ ٽائيم“ پيٽرول سيٽ ڪريو (شروع ٿيڻ تي اسڪرپٽ هلايو.)
"انٽرول": 00:00:00
ٻي صورت ۾، سڀ ڪجهه جيئن ته هو.

ٽيليگرام-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={}
};

ڪجھ سالن جي استعمال کان پوء، هڪ بگ دريافت ڪيو ويو: ڪجهه اڻڄاتل سببن جي ڪري، ضعيف ميڪروڪ اسڪرپٽ کي روڪي ٿو، پر وڌيڪ طاقتور ماڻهن تي اهو ڪم ڪري ٿو بغير بغير.

انهن مقصدن لاء، مون واچ ڊاگ جي ڪرچ تي اڇلائي ڇڏيو. هتي اسان اسڪرپٽ جو نالو تبديل ڪريون ٿا جيڪو مٿي ڄاڻايل آهي. ۽ ٻيهر شروع ڪرڻ جو وقفو 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

خير، شيرين لاء، اسڪرپٽ Mikrotik فورم مان ورتو ويو.
لاگ کان اهم موضوع اسان جي ڪارٽ ڏانهن موڪلي ٿو.

اسان اسڪرپٽ کي شيڊول ۾ شامل ڪريون ٿا ۽ وضاحت ڪريون ٿا ٻيهر شروع ڪرڻ وارو وقفو هر 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

تبصرو شامل ڪريو