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

کچھ سالوں کے استعمال کے بعد، ایک بگ دریافت ہوا: کسی نامعلوم وجہ سے، کمزور Mikrotik اسکرپٹ کو روکتا ہے، لیکن زیادہ طاقتور پر یہ بغیر رکے کام کرتا ہے۔

ان مقاصد کے لیے، میں نے واچ ڈاگ کی بیساکھی پر پھینک دیا۔ یہاں ہم اسکرپٹ کا نام تبدیل کر کے اوپر اشارہ کرتے ہیں۔ اور دوبارہ شروع کرنے کا وقفہ 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

نیا تبصرہ شامل کریں