Функция-конвертер строки для отправки сообщений в Телеграмм

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Perreiro
Сообщения: 5
Зарегистрирован: 25 мар 2023, 16:10

Sertik писал(а): 02 дек 2023, 20:57 Всё так.
Проверьте у Вас Микротик чисто английские тексты передает в чат (без перекодироввщика) ?
Нет (


uhi
Сообщения: 26
Зарегистрирован: 15 фев 2013, 00:34

Perreiro писал(а): 03 дек 2023, 00:28
Sertik писал(а): 02 дек 2023, 20:57 Всё так.
Проверьте у Вас Микротик чисто английские тексты передает в чат (без перекодироввщика) ?
Нет (

попробуйте в терминале:
/tool fetch url="https://api.telegram.org/вашботИД/sendMessage?chat_id=вашчатИД&text=test" dst-path=Log.txt

ну и роутерос должна быть последняя...


Perreiro
Сообщения: 5
Зарегистрирован: 25 мар 2023, 16:10

Сорри. Неправильно Вас понял.
Без использования перекодировщика (вызова функции):
:local botID "botXXXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYY";
:local myChatID "ZZZZZZZZZZZZ";
:local string "Random message text";
/tool fetch url="https://api.telegram.org/$botID/sendMes ... xt=$string" keep-result=no

Так все работает.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

То, что Вы создали скрипт FuncStrToTele это хорошо, а Вы запускаете его перед всем этим ?
Функция перекодирования в окружение переменных устанавливается ?
что выдает :put [:typeof $FuncStrToTele] ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Perreiro
Сообщения: 5
Зарегистрирован: 25 мар 2023, 16:10

Нет, не запускал. Я с микротиком только начинаю работать, не знал. В описании тоже не увидел. :smu:sche_nie:
Запустил, все работает как положено. :co_ol:
Но после перезагрузки счетчик запусков скрипта равен 0, в то время каку других скриптов счетчики сохраняется. Получается что ее надо после каждой перегрузки роутера запускать руками?
У меня задача такая: когда роутер запускается после аварийного выключения, посылать сообщение в телеграм о дате и времени возобновления работы.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Не нужно запускать её руками. Поставьте её запуск в Планировщик.
Создайте задание в /system scheduler при старте роутера однократно выполнять /system script run FuncStrToTele


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Perreiro
Сообщения: 5
Зарегистрирован: 25 мар 2023, 16:10

У меня есть скрипт, который выолняется при запуске, дописал в него вызов "/system script run FuncStrToTele".
Работает отлично! :co_ol:
Спасибо, извините за беспокойство! :ti_pa:


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Пожалуйста, не за что. Cogito ergo sum. :-):


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Вообще лучше пользоваться не моей функцией FuncStrToTele, а функцией Rextended ASCIItoCP1251toUTF8. Она содержит полный набор символов для перекодирования и, конечно, абсолютно правильна и универсальна.

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

:global ASCIItoCP1251toUTF8 do={
    :local ascii "\00\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\
                  \20\21\22\23\24\25\26\27\28\29\2A\2B\2C\2D\2E\2F\
                  \30\31\32\33\34\35\36\37\38\39\3A\3B\3C\3D\3E\3F\
                  \40\41\42\43\44\45\46\47\48\49\4A\4B\4C\4D\4E\4F\
                  \50\51\52\53\54\55\56\57\58\59\5A\5B\5C\5D\5E\5F\
                  \60\61\62\63\64\65\66\67\68\69\6A\6B\6C\6D\6E\6F\
                  \70\71\72\73\74\75\76\77\78\79\7A\7B\7C\7D\7E\7F\
                  \80\81\82\83\84\85\86\87\88\89\8A\8B\8C\8D\8E\8F\
                  \90\91\92\93\94\95\96\97\98\99\9A\9B\9C\9D\9E\9F\
                  \A0\A1\A2\A3\A4\A5\A6\A7\A8\A9\AA\AB\AC\AD\AE\AF\
                  \B0\B1\B2\B3\B4\B5\B6\B7\B8\B9\BA\BB\BC\BD\BE\BF\
                  \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"
    :local CP1251toUTF8 {"00";"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";
                         "20";"21";"22";"23";"24";"25";"26";"27";"28";"29";"2A";"2B";"2C";"2D";"2E";"2F";
                         "30";"31";"32";"33";"34";"35";"36";"37";"38";"39";"3A";"3B";"3C";"3D";"3E";"3F";
                         "40";"41";"42";"43";"44";"45";"46";"47";"48";"49";"4A";"4B";"4C";"4D";"4E";"4F";
                         "50";"51";"52";"53";"54";"55";"56";"57";"58";"59";"5A";"5B";"5C";"5D";"5E";"5F";
                         "60";"61";"62";"63";"64";"65";"66";"67";"68";"69";"6A";"6B";"6C";"6D";"6E";"6F";
                         "70";"71";"72";"73";"74";"75";"76";"77";"78";"79";"7A";"7B";"7C";"7D";"7E";"7F";
      "D082";"D083";"E2809A";"D193";"E2809E";"E280A6";"E280A0";"E280A1";"E282AC";"E280B0";"D089";"E280B9";"D08A";"D08C";"D08B";"D08F";
      "D192";"E28098";"E28099";"E2809C";"E2809D";"E280A2";"E28093";"E28094";"EFBFBD";"E284A2";"D199";"E280BA";"D19A";"D19C";"D19B";"D19F";
                         "C2A0";"D08E";"D19E";"D088";"C2A4";"D290";"C2A6";"C2A7";"D081";"C2A9";"D084";"C2AB";"C2AC";"C2AD";"C2AE";"D087";
                         "C2B0";"C2B1";"D086";"D196";"D291";"C2B5";"C2B6";"C2B7";"D191";"E28496";"D194";"C2BB";"D198";"D085";"D195";"D197";
                         "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"
                        }
    :local string $1
    :if (([:typeof $string] != "str") or ($string = "")) do={ :return "" }
    :local lenstr [:len $string]
    :local constr ""
    :for pos from=0 to=($lenstr - 1) do={
        :local utf ($CP1251toUTF8->[:find $ascii [:pick $string $pos ($pos + 1)] -1])
        :local sym ""
        :if ([:len $utf] = 2) do={:set sym "%$[:pick $utf 0 2]" }
        :if ([:len $utf] = 4) do={:set sym "%$[:pick $utf 0 2]%$[:pick $utf 2 4]" }
        :if ([:len $utf] = 6) do={:set sym "%$[:pick $utf 0 2]%$[:pick $utf 2 4]%$[:pick $utf 4 6]" }
        :set constr "$constr$sym"
    }
    :return $constr
}


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
OlegM
Сообщения: 1
Зарегистрирован: 15 мар 2024, 15:37

Друзья, не один из перечисленных методов не помог.
Стоит лишь появится допустим логину на русском в логе, скрипты отправки в телеграмм перестают работать.
ROS 7.13.5

Сделал скрипт из первого поста

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

# Function Converter of Russian characters for sending in Telegram
# by Sertik 19/09/2020
# usage [$FuncStrToTele "Строка String .,!+"]
:global FuncStrToTele do={

:local string; :set $string $1;

#  table of the codes of Russian letters UTF8
:local rsimv [:toarray {"А"="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"; "№"="0023"; " "="0020"; "&"="0026"; "^"="005E"}]

# 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 ("%"."$[:pick ($rsimv->$keys) 0 2]"."%"."$[:pick ($rsimv->$keys) 2 4]"); :if ([pick $code 0 3] ="%00") do={:set $code [:pick $code 3 6]}} else={:set $code $keys}; :set $StrTele ("$StrTele"."$code")}

:return $StrTele;
}
Запустил его.

в скрипте отправки в телегу, добавил вызов функции:

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

:local BotToken "Мой Токен";
:local ChatID "Мой АйДи";
:global FuncStrToTele;
:local string [$FuncStrToTele "Привет от Sertik ! Работает функция-конвертер Russian alfabit для Telegramm"]
:local ParseMode "html";
:local DisableWebPagePreview True;
:local SendText $MessageText;

:local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";
/tool fetch http-method=get url=$tgUrl keep-result=no;
:log info "Send Telegram Message: $MessageText";

Выполняю скрипт, который проверяет неудачные попытки подключения по L2TP, после того как в логе есть логин на русском языке, перестает отрабатывать.

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

:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];
:local TelegramMessageText;
:local urlEncoded;
:global ParseLogL2tpErrorEndArrayID;

:local IDsEventsError [/log find where topics~"l2tp.ppp.error" message~"user"];

:local LenArrayIDs [:len $IDsEventsError];
:local StartArrayID [:find $IDsEventsError $ParseLogL2tpErrorEndArrayID];
:local EndArrayID ($IDsEventsError -> ($LenArrayIDs-1));

:if ($EndArrayID != $ParseLogL2tpErrorEndArrayID and [:tobool $ParseLogL2tpErrorEndArrayID] ) do={

    :for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
        :local IDMessage ($IDsEventsError ->$KeyArray );
        :set TelegramMessageText "$TelegramMessageText %0D%0A  $[/log get number=$IDMessage time] - $[/log get number=$IDMessage message];";
        }
:for i from=0 to=([:len $TelegramMessageText] - 1) do={ 
  :local char [:pick $TelegramMessageText $i]
  :if ($char = "<") do={
    :set $char ""
  }
  :if ($char = ">") do={
    :set $char ""
  }
  :set urlEncoded ($urlEncoded . $char)
    
}
    :local MessageText "\E2\9B\94 <b>$DeviceName: L2TP ERROR</b> $urlEncoded";
    :local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
} else={
log info "Script ParseLogL2tpError: no new messages found.";
};
:set ParseLogL2tpErrorEndArrayID $EndArrayID;


Ответить