Страница 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"
Спасибо, очень интересно. Но лучше бы вынести в особую тему, т.к. тут могут это просто не найти ...