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

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Ну зачем трояко понимать то ? Ведь речь ведем о неэфимерной задаче, а о Вашем предложении - вбить вместо ключей букв ключи числа - коды символов в мою функцию-конвертер. Раз вбить типа вот так "\2B" ключи нельзя, значит можно вместо шестнадцатиричного кода использовать десятичный его код в виде цифры, конечно. Но проблема потом как мне его преобразовать в сам символ, чтобы сравнить с извлечением из строки ?

НУЖНА функция преобразования десятичного кода символа (цифры от 0 до 255) в сам символ.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Не, не, не, ваша функция вполне себе компактна, любой код по преобразованию, только увеличит её. От массива с таблицей символов всё равно не деться.
Hex коды не получается вбить в ключ, но он прекрасно живёт в значении.
Ваш массив надо разделить на два семетричных в первый вбить ключ, а во второй значение. Далее просто- через find ищем позицию в первом и берём значение из второго.


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

Да, можно и так. Это ясно, но думал, одним массивом обойтись. Ладно сделаем два симметричных.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sergey.I
Сообщения: 2
Зарегистрирован: 10 ноя 2019, 19:39

Хочу в текст вставить значение переменно $name, но при этом скрипт перестает работать.

local string [$FuncStrToTele "Привет от Sertik ! Работает функция-конвертер Russian alfabit для Telegramm - $name"]

Как это победить?


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

Хочу в текст вставить значение переменно $name, но при этом скрипт перестает работать.

local string [$FuncStrToTele "Привет от Sertik ! Работает функция-конвертер Russian alfabit для Telegramm - $name"]

Как это победить?
Ну вот так, например :

local string [$FuncStrToTele ("Привет от Sertik ! Работает функция-конвертер Russian alfabit для Telegramm -"."$name")]

Всё, как обычно, по правилам работы со строками в Роутер Ос.


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

Я немножко не в теме, но главная проблема какая, в кириллице или кодировке текста Windows-1251 или их вообще две? :smu:sche_nie:
Быть может стоит действительно, убить сразу двух зайцев и решить вопрос со всей кодировкой Windows-1251 ?

Ну т.е. если смотреть документацию https://core.telegram.org/bots/api#message

Изображение

Там сказано про UTF-8


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

Вот моя функция этим и занимается, перекодирует нечитаемые Телеграммом символы с UTF-8. В частности символы национальных алфавитов (в частности Кириллица).


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

Sertik писал(а): 15 фев 2021, 20:44 Вот моя функция этим и занимается, перекодирует нечитаемые Телеграммом символы с UTF-8. В частности символы национальных алфавитов (в частности Кириллица).
показалось не все символы охватывает.
ладно, а какой использовать с хабра или с шапки?


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

Функция конвертирует симфолы русского алфавита и специальные символы, которые не поддерживает Телеграмм. Ипользовать можете из Хабра и с этого форума, это одна и та же функция.
Вместо таких вопросов - взяли бы да попробовали. Делов то ...


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

Прикрепляю новую функцию пересылки сообщений в Телеграмм FuncTelegramSender
Функция позволяет пересылать сообщения как на английском, так и на русском языках в произвольном сочетании
для оформления можно использовать стили html и markdown (см. примеры).
Также можно пересылать символы и пиктограммы в формате UTF-8 - см. и пробуйте примеры в коде функции
Для работы функции необходимо вставить в переменные ID Вашего бота и чата:

:global botID "you botID" ;
:global myChatID "you chat number";

Не забудьте исполнить код скрипта функции до её использования для размещения в окружении переменных
и объявить её в вызываемом скрипте или Планировщике:

/system script run FuncTelegramSender
:global FuncTelegramSender

В работе функции предусмотен обработчик ошибок с возвратом "Done", если функция отработана нормально
и соответствующих ошибок в передаче параметров и работе fetch при пересылки в Телеграм

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

#------------------------------------------------------------------------------------------------------------
#        Функция перекодировки и пересылки сообщений на 
#    русском и английском языках в мессенджер Телеграмм
#                                    by Sertik  версия 19.09.2021 
#-----------------------------------------------------------------------------------------------------------

#
# usage [$FuncTelegramSender "text message" "style"]
# style ="html" or "markdown" or nothing
#
# Examles:
#
# [$FuncTelegramSender ("$[/system resource get version]"."%0A"."Ros version")]
# [$FuncTelegramSender ("<b>"."$[/system resource get version]"."</b>"."%0A"."Ros version") "html"]
# <b> жирный </b>
# <i> курсив </i>
# <u> подчеркивание </u>
# <s> зачеркнутый </s>
# [$FuncTelegramSender ("*"."$[/system resource get version]"."*"."%0A"."Ros version") "markdown"]
# [$FuncTelegramSender "`text message`" "markdown"] - monospased text


:global FuncTelegramSender do={
:if ([:len $0]!=0) do={
:global botID "you botID" ;
:global myChatID "you chat number";
:local Tstyle
:if ([:len $2]=0) do={} else={:set $Tstyle $2} 
:if (($2="html") or ($2="markdown") or ([:len $2]=0)) 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")}

do {
/tool fetch url="https://api.telegram.org/$botID/sendmessage\?chat_id=$myChatID&parse_mode=$Tstyle&text=$StrTele" keep-result=no; :return "Done"
} on-error={:log info; :log error "Error function $0 fetch"; :log info ""; :return "Error fetch"}
    } else={:log info; log error "Parametrs function $0 mismatch"; :log info ""; :return "Error parametrs mismatch"}
  }
}

# [$FuncTelegramSender "`text message текст сообщения`" "markdown"]
# [$FuncTelegramSender ("<b>"."Ros version "."$[/system resource get version]"."</b>"."%0A"."версия РоутерОС "."$[/system resource get version]") "html"]
# [$FuncTelegramSender ("пиктограмма восхода солнца %F0%9F%8C%85"." и его заката %F0%9F%8C%87 ")]
Всем привет и удачи
[$FuncTelegramSender "%F0%9F%98%81"]
Последний раз редактировалось Sertik 19 сен 2021, 19:24, всего редактировалось 3 раза.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить