PAPIruss Опубликовано 6 октября, 2019 · Жалоба Коллеги помогите поправить скрипт. Есть скрипт который по событию в логе создает пользователя, генерирует код авторизации добавляет пользователя в user manager и отправляет код по смс. При отправке смс на диске микротика создается файл в котором присутствует номер телефона. Задача максимум: перед добавлением пользователя в user manager посмотреть не отправлялось ли уже ему смс и если отправлялось меньше 5 минут назад, не делать не чего, если больше 5 минут продолжить выполнение скрипта. Задача минимум: не смотрим на время, просто смотрим факт отправки смс, если отправлено прекращаем дальнейшее выполнение скрипта, если нет, скрипт отрабатывает до конца. пример имени файла: send?api_id=XXXXX-C772-D9F6-8EE9-XXXXXXXXXXX&to=79998887766&msg=Your+PASS:11375 Код скрипта: #Search number in log hotspot :foreach line in=[/log find buffer=hotspot message~"login failed"] do={ :do {:local content [/log get $line message]; :put $content; :local pos1 [:find $content " (" 0]; :put $pos1; :if ($pos1 != " ") do={ :local uname ""; :local uname7 ""; :local uname8 ""; :local uname9 ""; :local phone ""; :if ([:pick $content ($pos1-10)] = "9") do={ :set uname [:pick $content ($pos1-10) ($pos1-0)]; :put $uname; :set uname7 [:put ("7" . {$uname})] :set uname8 [:put ("8" . {$uname})] :put $uname7 :put $uname8 #Password generation :local date [/system clock get time]; :local hour [:pick $date 0 2]; :local min [:pick $date 3 5]; :local sec [:pick $date 6 8]; :local usernumber [:pick $content ($pos1-7) ($pos1-5)]; :put $usernumber; :global pass 27394; :set pass ($hour * $min * $sec - $usernumber); :if ($pass = 0) do={ :set pass 6524; } :put $pass; #Add user to hotspot / user-manager do {/tool user-manager user add username=$uname password=$pass customer=admin copy-from=test disabled=no phone=$uname7;} on-error={}; do {/tool user-manager user set password=$pass number=[find username=$uname]} on-error={}; #sms do {/tool fetch url="https://xxx.xx/sms/send?api_id=XXXXX-C772-D9F6-8EE9-XXXXXXXXXXX&to=$uname7&msg=Your+PASS:$pass"} on-error={}; } Очень надеюсь на вашу помощь. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 7 октября, 2019 · Жалоба Код не смотрел. Что не работает? Если нужно остановить скрипт, можно через :error сделать, но тогда в лог будут сообщения сыпаться. Либо делаете булевый флаг и в контрольной точке его проверяете, если сработал флаг- ничего не делаете и скрипт просто кончится. По по поводу времени, можно считать от аптайма. Т.е. сохраняете аптайм, а потом просто разницу вычисляете. Ну либо через системные часы можно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
EugeneTV Опубликовано 8 октября, 2019 (изменено) · Жалоба я не большой спец в скриптах на микротике, но я бы попробовал создавать файлик (например 79998887766.flg), в него записывал время отправки. А при следующей итерации проверял наличие этого файла и его содержимое. https://forum.mikrotik.com/viewtopic.php?t=10278 :if ([:len [/file find name=someconfig.rsc]] > 0) do={ :put "FOUND IT" } и тут про чтение из файла https://forum.mikrotik.com/viewtopic.php?t=52113 Изменено 8 октября, 2019 пользователем EugeneTV Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...