Inclusão remota de scripts Mikrotik do Telegram v 2.0

Tudo com o feriado passado. Este tópico é uma versão melhor do que escrevi em 2016 aqui .

Em geral, o princípio do trabalho não mudou, com a única diferença que agora funciona instantaneamente sem demora.

Carregamos o script no Mikrotik, alteramos o BotID e o ChatID para o nosso e criamos uma programação para ele. Defina o parâmetro "Start Time" como startup (execute o script na inicialização.)
Intervalo: 00:00:00
Caso contrário, tudo é como era.

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


Por alguns anos de uso, um bug foi descoberto, por algum motivo, o Mikrotik fraco, por algum motivo, interrompe o script, ele funciona sem parar nos mais poderosos.

Para esses fins, joguei uma muleta de cão de guarda. aqui mudamos o nome do script para o indicado acima. e defina o intervalo de reinicialização para 5 minutos. A cada 5 minutos, nosso “cão de aparência” verifica o script e, se não funcionar, será executado.

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 


Bem, para a sobremesa, o script é retirado do fórum Mikrotik.
Envia tópicos importantes do log para o nosso carrinho.

Colocamos o script na programação e especificamos o intervalo de reinicialização a cada 5 minutos, alteramos o BotID e o ChatID para os nossos.

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


Nós obtemos o resultado:

imagem

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


All Articles