Страница 1 из 2

О функциях в скриптах

Добавлено: 20 янв 2022, 13:06
Sertik
Опубликовал на Хабре небольшую статью, где собрал основные аспекты создания и использования функций в скриптах.
Статья доступна по ссылке https://habr.com/ru/post/646663/
Надеюсь будет полезна.

Код функции универсальной отправки сообщений FuncAS из статьи чуть позже размещу здесь, может пригодится.

Re: О функциях в скриптах

Добавлено: 20 янв 2022, 21:49
Sertik
Функция-массив Function Active Sender. Комментарии в теле функции и в статье.

Код: Выделить всё

# Функция-массив Func_AS (Function Active Sender) отправки сообщения в мессенджер Телеграмм, SMS через модем, SMS через API sms.ru,
# SMS через шлюзы  устройств Laurent-5G, Netping, сообщений на почту

#--------------------------------------------------------------------------------------------
# FuncAS version 1.4 by Sertik (Serkov S.V.) 09/01/2022
#--------------------------------------------------------------------------------------------

# полностью корректно работает при отправке сообщений на английском языке и/или русском языке с опцией "translite" и с учётом ограничения длины сообщения
# поддерживает спец. символы \$@!#%'()*+,-./:;<=>?[]^_`{|}~
;
# для Телеграмм, API sms.ru и большинства почтовых клиентов (проверено для mail.ru, yandex.ru и gmail.com)
# есть поддержка национального (русского) текста 
# для Телеграмм (опционально $1="translite") и отправки SMS через модемы работает транслитерация русских символов в латинские
;
#  - на роутере должны быть сконфигурированы /tool sms и /tool e-mail
# - при использовании ключа "telegram" должны быть определены global Emoji (Emoji роутера, по желанию), botID и myChatID)
#  - при использовании ключа "smsAPI" должна быть определена global apikey (ключ аккаунта на sms.ru)
#  - при использовании ключа "smsNP" должны быть определены global NPadr (адрес шлюза Netping в сети), NPuser (login), NPpass (пароль)
# - при использовании ключа "smsLT" должны быть определены global Ladr (адрес Laurent-5G в сети) и Lpass (пароль авторизации модуля)
#  !  выбор номера телефона получателя при всех вариантах отправок sms осуществляется в порядке $1 (из параметра функции) -> $ADMINPHONE (global var) -> 
#   ->  first [/tool sms get allowed-number] по алгоритму "если не указан, то следующий"
# ! номера телефонов указывать в международном формате (+7десятизначный номер) поддерживается отправка sms только по России (+7)
#   ! выбор почтового адреса получателя при отправке e-mail осуществляется аналогично в порядке $1 -> $ADMINMAIL (global var)
#
# ! обратить внимание:
# в отличие от обычных функций, которые в $0 хранят своё имя, первый параметр функции массива будет $0 !, второй $1 и т .д....
# вызов функции без ключа [$FuncAS "you mesage"] вызывает последовательную работу всех элементов функции и равноценен [($FuncAS->"all") "you mesage"] 
#
# Usage: [($FuncAS->"telegram") "you mesage"]
#                [($FuncAS->"sms") "you mesage" "phone number"]
#                [($FuncAS->"sms") "you mesage" (phone number get from ADMINPHONE or first [/tool sms get allowed-number];
#                [($FuncAS->"smsAPI") "you mesage" "phonenumber"]
#                [($FuncAS->"smsAPI") "you mesage" (phone number get from ADMINPHONE or or first [/tool sms get allowed-number];
#                [($FuncAS->"smsNP") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") "+79104797703"]
#                [($FuncAS->"smsLT") ("good by world") 2]
#                [($FuncAS->"email") "you mesage" "e-mail"]
#                [($FuncAS->"email") "you mesage"] (e-mail get from $ADMINMAIL)
#                [($FuncAS->"all") "you mesage"]  (e-mail get from $ADMINMAIL)
#                [$FuncAS "you mesage"] = [($FuncAS->"all") "you mesage"]   (execute last key)

# see also the examples at the end of the function code !

# defining global users variables:

:global Emoji;                         # :global Emoji "%E2%9B%BA"
:global botID;                        # :global botID "botXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
:global myChatID;                 #:global myChatID "XXXXXXXXX";
:global ADMINPHONE;        #:global ADMINPHONE "+7910777777"
:global ADMINMAIL;            # :global ADMINMAIL user@mail.ru
:global Ladr;                          # :global Ladr 192.168.0.10
:global Lpass;                       # :global Lpass Laurent5G password
:global NPadr;                      # :global NPadr 192.168.0.10:8080
:global NPuser;                    # :global NPuser Sertik
:global NPpass;                   # :global NPpass NPpassword
:global apikey;                     # :global apikey ХХХХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ


:global FuncAS [:toarray ""]


# function transliteration
# string for transliteration is set in the parametr name "string"

:set ($FuncAS->"translite") do={

#  table of the codes of Russian letters Translite
:local rsimv [:toarray {"А"="A"; "Б"="B"; "В"="V"; "Г"="G"; "Д"="D"; "Е"="E"; "Ж"="ZH"; "З"="Z"; "И"="I"; "Й"="J"; "К"="K"; "Л"="L"; "М"="M"; "Н"="N"; "О"="O"; "П"="P"; "Р"="R"; "С"="S"; "Т"="T"; "У"="U"; "Ф"="F"; "Х"="KH"; "Ц"="C"; "Ч"="CH"; "Ш"="SH"; "Щ"="SCH"; "Ъ"="``"; "Ы"="Y`"; "Ь"="`"; "Э"="E`"; "Ю"="JU"; "Я"="YA"; "а"="a"; "б"="b"; "в"="v"; "г"="g"; "д"="d"; "е"="e"; "ж"="zh"; "з"="z"; "и"="i"; "й"="j"; "к"="k"; "л"="l"; "м"="m"; "н"="n"; "о"="o"; "п"="p"; "р"="r"; "с"="s"; "т"="t"; "у"="u"; "ф"="f"; "х"="kh"; "ц"="c"; "ч"="ch"; "ш"="sh"; "щ"="sch"; "ъ"="``"; "ы"="y`"; "ь"="`"; "э"="e`"; "ю"="ju"; "я"="ya"; "Ё"="Yo"; "ё"="yo"; "№"="#"}]

# encoding of the symbols and аssembly line
:local StrTele ""; :local code "";
:for i from=0 to=([:len $string]-1) do={:local keys [:pick $string $i (1+$i)];

:local key ($rsimv->$keys); if ([:len $key]!=0) do={:set $code ($rsimv->$keys);} else={:set $code $keys};

:if (($keys="Ь")  and ([:pick $string ($i+1) (2+$i)]="Е")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ь")  and ([:pick $string ($i+1) (2+$i)]="е")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ь")  and ([:pick $string ($i+1) (2+$i)]="е")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ь")  and ([:pick $string ($i+1) (2+$i)]="Е")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ы")  and ([:pick $string ($i+1) (2+$i)]="Й")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ы")  and ([:pick $string ($i+1) (2+$i)]="й")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="ы")  and ([:pick $string ($i+1) (2+$i)]="Й")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ы")  and ([:pick $string ($i+1) (2+$i)]="й")) do={:set $code "I"; :set $i ($i+1)}
 :set $StrTele ("$StrTele"."$code")}
:return $StrTele
}


# part to Telegram
:set ($FuncAS->"telegram") do={
         :if ([:len $0]!=0) do={
         :global Emoji
         :global botID;
         :global myChatID;
         :if (([:len $botID]=0) or ([:len $myChatID]=0)) do={:log error "ERROR FuncAs telegram chatbotID not found"; :return "ERROR telegram"}

:if ((any $1) && ($1="translite")) do={
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]
}


# bypassing the transmission of special characters and symbol "H"
        :local output $0
        :local cp1251 [:toarray {"\20";"\01";"\02";"\03";"\04";"\05";"\06";"\07";"\08";"\09";"\0A";"\0B";"\0C";"\0D";"\0E";"\0F"; \
                                 "\10";"\11";"\12";"\13";"\14";"\15";"\16";"\17";"\18";"\19";"\1A";"\1B";"\1C";"\1D";"\1E";"\1F"; \
                                 "\21";"\22";"\23";"\24";"\25";"\26";"\27";"\28";"\29";"\2A";"\2B";"\2C";"\2D";"\2E";"\2F";"\3A"; \
                                 "\3B";"\3C";"\3D";"\3E";"\3F";"\40";"\5B";"\5C";"\5D";"\5E";"\5F";"\60";"\7B";"\7C";"\7D";"\7E"; \
                                 "\C0";"\C1";"\C2";"\C3";"\C4";"\C5";"\C6";"\C7";"\C8";"\C9";"\CA";"\CB";"\CC";"\CD";"\CE";"\CF"; \
                                 "\D0";"\D1";"\D2";"\D3";"\D4";"\D5";"\D6";"\D7";"\D8";"\D9";"\DA";"\DB";"\DC";"\DD";"\DE";"\DF"; \
                                 "\E0";"\E1";"\E2";"\E3";"\E4";"\E5";"\E6";"\E7";"\E8";"\E9";"\EA";"\EB";"\EC";"\ED";"\EE";"\EF"; \
                                 "\F0";"\F1";"\F2";"\F3";"\F4";"\F5";"\F6";"\F7";"\F8";"\F9";"\FA";"\FB";"\FC";"\FD";"\FE";"\FF"; \
                                 "\A8";"\B8";"\B9";"\48"}];
        :local utf8   [:toarray {"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"000A";"0020";"0020";"000D";"0020";"0020"; \
                                 "0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020"; \
                                 "0021";"0022";"0023";"0024";"0025";"0026";"0027";"0028";"0029";"002A";"002B";"002C";"002D";"002E";"002F";"003A"; \
                                 "003B";"003C";"003D";"003E";"003F";"0040";"005B";"005C";"005D";"005E";"005F";"0060";"007B";"007C";"007D";"007E"; \
                                 "D090";"D091";"D092";"D093";"D094";"D095";"D096";"D097";"D098";"D099";"D09A";"D09B";"D09C";"D09D";"D09E";"D09F"; \
                                 "D0A0";"D0A1";"D0A2";"D0A3";"D0A4";"D0A5";"D0A6";"D0A7";"D0A8";"D0A9";"D0AA";"D0AB";"D0AC";"D0AD";"D0AE";"D0AF"; \
                                 "D0B0";"D0B1";"D0B2";"D0B3";"D0B4";"D0B5";"D0B6";"D0B7";"D0B8";"D0B9";"D0BA";"D0BB";"D0BC";"D0BD";"D0BE";"D0BF"; \
                                 "D180";"D181";"D182";"D183";"D184";"D185";"D186";"D187";"D188";"D189";"D18A";"D18B";"D18C";"D18D";"D18E";"D18F"; \
                                 "D001";"D191";"2116";"0048"}];
        :local convStr ""; :local code    "";
        :for i from=0 to=([:len $output]-1) do={
            :local symb [:pick $output $i ($i+1)]; 
            :local idx  [:find $cp1251 $symb];
            :local key  ($utf8->$idx);
            :if ([:len $key] != 0) do={
                :set $code ("%$[:pick ($key) 0 2]%$[:pick ($key) 2 4]");
                :if ([pick $code 0 3] = "%00") do={ :set $code ([:pick $code 3 6]); }
            } else={ :set code ($symb); }; 
            :set $convStr ($convStr.$code);
        }

         :set $0 $convStr
         :log info ""; :log warning "FuncAs start telegram sending ...";
              :do {
                 [/tool fetch url="https://api.telegram.org/$botID/sendmessage\?chat_id=$myChatID&text=$Emoji $0" keep-result=no;]
                } on-error={:log error "ERROR FuncAs telegram send"; :return "ERROR telegram"}
          :log warning "FuncAs message to telegram send"; :log info "";
          :return "done telegram"
    } else={:log error "ERROR FuncAs telegram send but no message text"; :return "ERROR telegram" }
}

# part to sms from modem
:set ($FuncAS->"sms") do={
         :if ([:len $0]!=0) do={
         :local SMSdevice [/tool sms get port];
         :local NumPhone
         :global ADMINPHONE;
         :if ([:len $1]!=0) do={:set NumPhone $1} \
              else={
                     :if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
                            else={
                                :local NumSMS [/tool sms get allowed-number];
                                     :if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
                                             else={:log error "ERROR FuncAs sms phone number not found"; :return "ERROR sms"}
}}

# must be performed translite
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]


         :log info ""; :log warning "FuncAS start sms sending to $NumPhone";
             :do {
                [/tool sms send  $SMSdevice phone=$NumPhone message=$0];
                } on-error={:log error "ERROR FuncAs sms send"; :return "ERROR sms"}
          :log warning "FuncAs sms sent via modem"; :log info "";
          :return "done sms"
    } else={:log error "ERROR FuncAs sms send but no message text"; :return "ERROR sms" }
}


# part to sms from API sms.ru
# must be configured global variable $apikey for sms.ru user
;
:set ($FuncAS->"smsAPI") do={
         :if ([:len $0]!=0) do={
:local SMSanswer;
:global apikey;
:if ([:len $apikey]!=0) do={
       :local NumPhone
         :global ADMINPHONE;
         :if ([:len $1]!=0) do={:set NumPhone $1} \
              else={
                     :if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
                            else={
                                :local NumSMS [/tool sms get allowed-number];
                                     :if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
                                             else={:log error "ERROR FuncAs smsAPI phone number not found"; :return "ERROR smsAPI"}
}}

         :log info ""; :log warning "FuncAS start smsAPI sending to $NumPhone";
         :do {
         :set SMSanswer [/tool fetch url=("https://sms.ru/sms/send\?api_id="."$apikey") mode=https http-method=post http-data=("&to="."$NumPhone"."&msg="."$0"."&json=1") as-value output=user];
               } on-error={:log error "ERROR FuncAs smsAPI fetch send"; :return "ERROR smsAPI"}
          :if (($SMSanswer->"status")="finished") do={
          :local ans;
          :if ([find ($SMSanswer->"data") "ERROR"]>0) do={:set ans "ERROR smsAPI"; :log error "ERROR FuncAs smsAPI send"; :log info "";} else={:set ans "done smsAPI"; :log warning "FuncAs sms sent via API sms.ru"; :log info "";}
          :return $ans;
      } else={:log error "ERROR FuncAs smsAPI fetch to sms.ru"; :return "ERROR smsAPI"} 
    } else={:log error "ERROR FuncAs smsAPI apikey not defined"; :return "ERROR smsAPI"} 
  } else={:log error "ERROR FuncAs smsAPI send but no message text"; :return "ERROR smsAPI" }
}



# part to sms from Laurent-5G module
# must be configured Ladr, Lpass

:set ($FuncAS->"smsLT") do={
:if ([:len $0]!=0) do={
                 :local Lanswer;
                 :global Ladr
                 :global Lport
                 :global Lpass
                 :local Sport
:if (([:len $Ladr]!=0) && ([:len $Lpass]!=0)) do={
:if ([:len $0]!=0) do={
  :if ([:len $1]=0) do={:set $1 "1"}
                 :if ([:len $Lport]=0) do={:set Sport "80";} else={:set Sport $Lport;}

# must be performed translite
     :global FuncAS
     :set $0 [($FuncAS->"translite") string=$0]

# replacing a space in a line with a sign "+"
# for normal space sending
   :local string $0
   :local StrTele
   :for i from=0 to=([:len $string]-1) do={:local keys [:pick $string $i (1+$i)];
# \2B="+" or you can use \5F ("_")
         :if ($keys=" ") do={:set $code "\2B";} else={:set $code $keys};
   :set $StrTele ("$StrTele"."$code")}
   :set $0 $StrTele;

         :log info ""; :log warning "FuncAS start sms from Laurent getway sending to $1 database cell";
                                    :local StrFetchLaurent; :set StrFetchLaurent ("http://"."$Ladr".":"."$Sport"."/cmd.cgi?psw=$Lpass&cmd=SMS,"."SND".","."$1,"."C,"."$0");
                                              do {
                                      :set Lanswer ([/tool fetch url=$StrFetchLaurent mode=http as-value output=user]->"data"); 
                                                                } on-error={: log info ""; :log error ("Call ERROR function <$0> ERROR fetch command"); 
                                                                                      :local Lanswer "ERROR $0 command ROS <fetch>"; : log info ""; :return $Lanswer}
                                                     :if ($Lanswer="#SMS,SND,OK\0D\0A") do={:log warning "FuncAs sms sent via Laurent getway"; :log info ""; :return "done smsLT";} else={
                                    :if ($Lanswer="#ERR,NO_FREE_PLACE\0D\0A") do={:log info ""; :log error ("ERROR function FuncAS smsLT but no free place");
                                   :log info ""; :return "ERROR FuncAS smsLT no free place"}
                                    :if ($Lanswer="#ERR,BAD_PHN\0D\0A") do={:log info ""; :log error ("ERROR function FuncAS smsLT but invalid phone number");
                                   :log info ""; return "ERROR FuncAS smsLT bad phone number"}
    :return "ERROR smsLT unknown"}

        } else={:log info ""; :log error "ERROR FuncAs smsLT parametrs no defined"; :return "ERROR smsLT"}
   } else={:log info ""; :log error  "ERROR FuncAS smsLT Ladr or Lpass not defined"; :return "ERROR smsLT"}
 }
}





# part to sms from Netping device modem (as getway)

# [$FuncNPsendSMS "you text in utf8" "+7phonenumber"]
# должны быть определены NPadr, NPuser, NPpass

:set ($FuncAS->"smsNP") do={
:if ([:len $0]!=0) do={
:global NPadr; :global NPuser; :global NPpass;
:if (([:len $NPadr]!=0) && ([:len $NPuser]!=0) && ([:len $NPpass]!=0)) do={
:local NPanswer;
       :local NumPhone
         :global ADMINPHONE;
         :if ([:len $1]!=0) do={:set NumPhone $1} \
              else={
                     :if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
                            else={
                                :local NumSMS [/tool sms get allowed-number];
                                     :if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
                                             else={:log error "ERROR FuncAs smsNP phone number not found"; :return "ERROR smsAPI"}
}}
:if ([:pick $NumPhone 0 2]="+7") do={

# must be performed translite
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]

         :log info ""; :log warning "FuncAS start sms from Netping getway sending to $NumPhone";
:do {
:set NPanswer [/tool fetch url=("http://"."$NPadr"."/sendsms.cgi\?utf8") mode=http http-method=post http-data=("["."$NumPhone"."]"." "."$0") user=$NPuser password=$NPpass as-value output=user];
} on-error={:log error "ERROR FuncAs smsNP fetch send"; :return "ERROR smsNP"}
:if (($NPanswer->"status")="finished") do={:log warning "FuncAs sms sent via Netping getway"; :log info "";
        :set NPanswer ($NPanswer->"data"); 
:if ([:find $NPanswer "ok"]) do={:return "done smsNP"} else={:return "ERROR smsNP"}
            } else={ :return "ERROR smsNP"}
      } else={:log error "ERROR FuncAs smsNP invalid phone number format"; :return "ERROR smsNP"} 
     } else={:log error "ERROR FuncAs smsNP NPadr or NPuser or NPpass not defined"; :return "ERROR smsNP"} 
   } else={:log error "ERROR FuncAs smsNP send but no message text"; :return "ERROR smsNP" }
}


# part to e-mail
:set ($FuncAS->"email") do={
            :if ([:len $0]!=0) do={
             :global ADMINMAIL;
         :if (([:len $1]=0) && ([:len $ADMINMAIL]=0)) do={:log error "ERROR FuncAs email send E-mail address not found"; :return "ERROR email"}
              :if ([:len $1]!=0) do={} else={:set $1 $ADMINMAIL}
              :local smtpserv
              :do {
              :set smtpserv [:resolve [/tool e-mail get address]];} on-error={:log error "ERROR FuncAs email no resolve email server"; :return "ERROR email"}
              :local Eaccount [/tool e-mail get user];
              :local pass [/tool e-mail get password];
              :local Eport [/tool e-mail get port];
              :local Etls "yes"; # если не используется установить в "no";
              :log info " "; :log warning ("FuncAS start mail sending ... to e-mail: $1");
              :do {
#                   [/tool e-mail send from="<$Eaccount>" to=$1 server=$smtpserv \
#                   port=$Eport user=$Eaccount password=$pass start-tls=$Etls subject=("from FuncAS Router $[/system identity get name]\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=utf-8") body=$0;];
                   [/tool e-mail send from="<$Eaccount>" to=$1 server=$smtpserv \
                   port=$Eport user=$Eaccount password=$pass start-tls=$Etls subject=("from FuncAS Router $[/system identity get name]") body=$0;];
               } on-error={:log error "ERROR FuncAs email send"; :return "ERROR email"}
                   :local sendit 60
                    :while ($sendit > 0) do={:delay 1s; :set $sendit ($sendit - 1)
                    :if (([tool e-mail get last-status] = "succeeded") or ([tool e-mail get last-status] = "failed")) do={:set $sendit 0}}
                    :if ([tool e-mail get last-status] = "succeeded") do={:log warning "FuncAs message to email send"; :log info ""; :return "done email"} \
                    else={:log error "ERROR FuncAs email send"; :return "ERROR email"}
    } else={:log error "ERROR FuncAs email send but no message text"; :return "ERROR email" }
 }


# to all channels (a psevdo recursive call is used !)
# must be the last to bypass the $0 <-->$1 effect

:set ($FuncAS->"all") do={
         :if ([:len $0]!=0) do={
        :global FuncAS;
        :global ADMINMAIL;
        :local T
        :local E
        :local MDsms
        :local APIsms
        :local LTsms
        :local NPsms

# bypass when calling a function without keys !
        
        :if ([:typeof $0]="lookup") do={:set $0 $1; :if ((any $2) && ($2="translite")) do={:set $1 $2}}

        :set T [($FuncAS->"telegram") $0 $1]
        :set E [($FuncAS->"email") $0 $ADMINMAIL]
        :set MDsms [($FuncAS->"sms") $0]
        :set APIsms [($FuncAS->"smsAPI") $0]
        :set LTsms [($FuncAS->"smsLT") $0]
        :set NPsms [($FuncAS->"smsNP") $0]
        :return [:toarray {$T;$E;$MDsms; $APIsms; $LTsms; $NPsms}]
    } else={:log error "ERROR FuncAs all but no message text"; :return "ERROR common sending" }
}


# -------------------------------------------------------------------
# examples call:
# -------------------------------------------------------------------

# :log info "ok"

# :global FuncAS
# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." test function FuncAS to Telegram Hello тест функции FuncAS для Телеграмм")]
# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." test function FuncAS to Telegram Hello тест функции FuncAS для Телеграмм") "translite"]
# :log info [($FuncAS->"email") ("Router "."$[/system identity get name]"." test FuncAS to e-mail проверка") "user@gmail.com"]
# :log info [($FuncAS->"email") ("Router "."$[/system identity get name]"." test FuncAS to e-mail")]
# :log info [($FuncAS->"sms") ("Router "."$[/system identity get name]"." test function FuncAS test to SMS Привет !")]
# :log info [($FuncAS->"all") ("Router "."$[/system identity get name]"." test function FuncAS all channels")]

# exception support for Telegram
# :log info [($FuncAS->"telegram") ("text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~")]

# :log info [($FuncAS->"smsAPI") "Verify for Sertik" "+79107777777"]
# :log info [($FuncAS->"smsAPI")]
# :log info [($FuncAS->"smsAPI") "смс от Микротик to you" "+79657777777"]

# exception transliteration for Telegram and send SMS modem
# :log info [($FuncAS->"smsNP") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") "+79657777777"]

# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." Привет админ ! С новым годом тебя ...") "translite"]
# :log info [$FuncAS "С новым годом !"]
# :log info [$FuncAS "С новым годом !" "translite"]

# :log info [($FuncAS->"smsLT") ("good by world") 2]
# :log info [($FuncAS->"smsLT") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") 2]

# :log info [$FuncAS "good by world" sv_device@mail.ru]
# :log info [($FuncAS->"all") ("good by world до свидания мир") "translite"]

Re: О функциях в скриптах

Добавлено: 21 янв 2022, 20:00
SergeyN
Вот это да! Большое спасибо за труды!

Re: О функциях в скриптах

Добавлено: 21 янв 2022, 20:21
Sertik
Пожалуйста. Кто хочет помогайте. Чем больше будет хороших скриптов, тем будет лучше для всех.

Re: О функциях в скриптах

Добавлено: 15 фев 2022, 15:06
Sertik
Очень хорошее и глубокое исследование функций в скриптах Микротик (жаль автор неизвестен):

https://vk.com/@habr_articles-rss-650396164-115206225

Re: О функциях в скриптах

Добавлено: 15 фев 2022, 19:40
pepelxl
А ты не пробовал дать ссылку на оригинал, там и автор указан.

Re: О функциях в скриптах

Добавлено: 15 фев 2022, 19:46
podarok66
Sertik писал(а): 15 фев 2022, 15:06 (жаль автор неизвестен):
Ха! Да это же твой кумир, дружище!!! Это Чупакабра...
https://habr.com/ru/post/650795/

Re: О функциях в скриптах

Добавлено: 15 фев 2022, 21:05
Sertik
Приветствую, дружище (я имею ввиду Podarok66 !)
Спасибо за "оригинал" ссылку на статью. Да, Чупакабра кумир, очень светлая голова, узнать бы кто скрывается за этим псевдонимом ...

Re: О функциях в скриптах

Добавлено: 16 фев 2022, 09:07
pepelxl
В своё время без успешно искал способ записи файла более 4kb. А тут подсказали на другом форуме, автор примера, соответственно, не я.

Код: Выделить всё

:local s ":for i from=0 to=1000 do={:put \"How many wonderful discoveries we have\"}"
:execute script=$s file="test.txt"
Адаптировать под свои хотелки не проблема.

Re: О функциях в скриптах

Добавлено: 16 фев 2022, 09:22
Sertik

Код: Выделить всё

:local s ":for i from=0 to=1000 do={:put \"How many wonderful discoveries we have\"}"
:execute script=$s file="test.txt"
Спасибо, очень интересно. Но лучше бы вынести в особую тему, т.к. тут могут это просто не найти ...