فعال سازی از راه دور اسکریپت های میکروتیک از تلگرام نسخه 2.0

همه با تعطیلات گذشته. این تم بهتره نسخه ای از آنچه در سال 2016 اینجا نوشتم.

به طور کلی، اصل عملکرد تغییر نکرده است، با تنها تفاوت این که اکنون بدون تاخیر کار می کند.

ما اسکریپت را در Mikrotik آپلود می کنیم، BotID و ChatID را به خودمان تغییر می دهیم و یک برنامه برای آن ایجاد می کنیم. پارامتر "Start Time" را روی راه اندازی تنظیم کنید (اسکریپت را در هنگام راه اندازی اجرا کنید.)
فاصله زمانی: 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={}
};

برای چند سال استفاده، یک اشکال آشکار شد، به دلایلی نامعلوم، Mikrotik ضعیف به دلایلی اسکریپت را متوقف می کند، در موارد قوی تر بدون توقف کار می کند.

برای این منظور من یک عصا 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 را به خودتان تغییر دهید.

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

نتیجه را می گیریم:

فعال سازی از راه دور اسکریپت های میکروتیک از تلگرام نسخه 2.0

منبع: www.habr.com

اضافه کردن نظر