Dimasukkannya jauh skrip Mikrotik dari Telegram v 2.0

Semua dengan liburan yang lalu. Topik ini adalah versi yang lebih baik dari apa yang saya tulis pada tahun 2016 di sini .

Secara umum, prinsip kerja tidak berubah, dengan satu-satunya perbedaan adalah bahwa itu sekarang bekerja dengan segera tanpa penundaan.

Kami mengunggah skrip di Mikrotik, mengubah BotID dan ChatID menjadi milik kami dan membuat jadwal untuk itu. Setel parameter "Waktu Mulai" ke startup (Jalankan skrip saat startup.)
Interval: 00:00:00
Kalau tidak, semuanya seperti itu.

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


Selama beberapa tahun penggunaan, bug ditemukan, untuk beberapa alasan, Mikrotik lemah untuk beberapa alasan menghentikan skrip, ia bekerja tanpa berhenti pada yang lebih kuat.

Untuk tujuan ini, saya melempar kruk WatchDog. di sini kita mengubah nama skrip menjadi yang ditunjukkan di atas. dan atur interval restart ke 5 menit. Setiap 5 menit, "anjing pelacak" kami akan memeriksa skrip, dan jika tidak berhasil, maka ia akan berjalan.

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 


Nah, untuk pencuci mulut, skripnya diambil dari forum Mikrotik.
Mengirim topik penting dari log ke keranjang kami.

Kami memasukkan skrip ke dalam jadwal dan menentukan interval restart setiap 5 menit, mengubah BotID dan ChatID menjadi milik kami.

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


Kami mendapatkan hasilnya:

gambar

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


All Articles