إدراج عن بعد لنصوص Mikrotik من Telegram v 2.0

كل ذلك مع عطلة الماضي. هذا الموضوع هو نسخة أفضل مما كتبت في عام 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 } } 


نحصل على النتيجة:

صورة

Source: https://habr.com/ru/post/ar482802/


All Articles