Comments 22
отправка сообщений через tool fetch проходит успешно, в чём затык?
:while ( true )
без задержки — лишняя нагрузка на ваш роутер и потеря встроенного функционала scheduler, но каждому своё.В любом случае, если вы решили использовать этот подход — лучше не писать response на диск, учитывая что у вас там одно короткое сообщение.
:local httpResponse [:tool fetch url=$requestUrl as-value output=user]
:local content ($httpResponse->"data");
: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]
:local httpResponse [:tool fetch url="https://api.telegram.org/$botID/getUpdates\?offset=$messageId&limit=1&allowed_updates=message&timeout=60" as-value output=user];
:local content ($httpResponse->"data");
я правильно понимаю, :tool fetch сохраняет на диске некий файл (флешка в роутере? изнашивается?)
поэтому правильнее использовать конструкцию local httpresponse [:tool fetch...
просто там ниже по тексту есть еще один tool fetch
я правильно понимаю, :tool fetch сохраняет на диске некий файл
нет. tool fetch просто дергает url .
на диске некий файл (флешка в роутере? изнашивается?)
это верно
поэтому правильнее использовать конструкцию local httpresponse [:tool fetch...
да, лучше так
просто там ниже по тексту есть еще один tool fetch
ага, который дергает url для отправки сообщениея и не сохраняет никаких файлов.
:global output
:global mtIdentity [/system identity get name];
:global botID «botXXXXXXXX:YYYYYYYYYYYYYYYYY»;
:global myChatID «ZZZZZZZZZ»;
:local LogGet [ :toarray [ /log find topics~«critical» || message~«login failure» || message~"[Ff]ailure" ] ];
:local LogGet [ :toarray [ /log find topics~«account» || message~«logged» || message~"[Ll]ogged" ] ];
:local LogGet [ :toarray [ /log find topics~«account» || message~«connected» || message~"[Cc]onnected" ] ];
: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=(«api.telegram.org$botID/sendmessage\?chat_id=$myChatID&text=\»$mtIdentity\": $output") keep-result=no
}
}
P.S если в шедульке указать запуск каждые 5 минут и быстро залогиниться\разлогиниться, то отобразится только одно сообщение о логоне.
Вы переменной LogGet три раза подряд присваиваете разные значения. LogGet будет содержать значение, присвоенное последним. Не нашел в мануале функций для работы с массивами, поэтому придётся использовать три разные переменные — свою для каждой выборки из лога.
:local LogGet [ :toarray [ /log find topics~«account» || message~«connected» || message~"[Cc]onnected" ] ];
P.S
:global output
:global mtIdentity [/system identity get name];
:global botID «botxxxxxxxxxx:yyyyyyyyyyyyyy»;
:global myChatID «zzzzzzzzzzz»;
:local LogGet [ :toarray [ /log find topics~«system» || message~«login failure» || message~"[Ff]ailure" ] ];
:local LogGet [ :toarray [ /log find topics~«system» || message~«logged» || message~"[Ll]ogged" ] ];
:local LogGet [ :toarray [ /log find topics~«system» || message~«connected» || message~"[Cc]onnected" ] ];
: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=(«api.telegram.org$botID/sendmessage\?chat_id=$myChatID&text=\»$mtIdentity\": $output") keep-result=no
}
}
только теперь все события с тикетом system будут лететь в телегу))
И что бы не заморачиваться с блокировками телеги можно использовать push, я использую pushover_net.
Дополнительно столкнулся с тем что бот не воспринимает команду если перед ней стоит /, если просто отправить сообщение боту, с названием скрипта, то всё ок.
Удалённое включение скриптов Mikrotik из Telegram v 2.0