Русский
Русский
English
Статистика
Реклама

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

Мессенджер Телеграмм крайне удобен для уведомления о работе IT-оборудования, чем активно пользуются СисАдмины. Популярные WatsApp и Wiber не поддерживают API и в них нет встроенной технологии создания своих Ботов.

РоутерОС известной компании Микротик не позволяет штатными средствами отправлять сообщения на русском языке в Телеграмм. Русские символы могут быть адекватно отображены в сообщениях, если отправлены в кодировке UTF-8. Ну что же коды известны, почему бы не написать перекодировщик?
Для упрощения задачи я не пользовался алгоритмами преобразования, а создал ключевой массив, содержащий в виде ключей сами русские символы в строковой и прописной раскладках, а в соответствующих им значениях коды этих символов в UTF-8.

Вот этот массив данных, может и для других задач пригодится:

ключевой массив символов русского алфавита и значений их кодов в UTF8
# 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}]


Пишем непосредственно сам конвертер строки.

На входе в переменной $string должна быть строка, содержащая русский или смешанный русско-английский текст. На выходе собранная строка, готовая для отправки в Телеграмм. При этом символы латинского афавита и знаки препинания не перекодируются, так как нормально отображаются в чатах мессенджера. Вместо русских символов в строку вставляются их аналоги в UTF-8 кодах, разделенные знаками "%", используемые Телеграмм для отображения символов в кодах.

Конвертер смешанной строки
# 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]");} else={:set $code $keys}; :set $StrTele ("$StrTele"."$code")}

Оформим всё это в функцию FuncStrToTele, чтобы можно было вызывать её из любых своих скриптов в РоутерОс Микротик. Также можно её использовать в DUDe. Вот ёё полный код:

Функция перекодировки смешанной строки FuncStrToTele для отправки сообщений в Телеграмм
# Function Converter of Russian characters for sending in Telegram
# by Sertik 09/09/2020
# usage [$FuncStrToTele Строка String .,!+]

:global FuncStrToTele do={
:global 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}]

# 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]");} else={:set $code $keys}; :set $StrTele ("$StrTele"."$code")}

:set $string $StrTele
:return $string;
}


Как видно из комментария единственным параметром функции является входная строка символов, возвращает функция сформированную строку для отправки в переменной $string

В своих скриптах не забываем объявлять ранее определенную функцию для вызова:

:global FuncStrToTele
[$FuncStrToTele Привет, user !]

Чтобы отправить сообщение нужно создать своего бота в Телеграмм, узнать его API BOTToken и ID чата. Инструкции по созданию ботов и получению идентификаторов неоднократно публиковались.

Отправляем наше тестовое сообщение в чат бота:

:local botID botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX;
:local myChatID YYYYYY;
:global FuncStrToTele;
:local string [$FuncStrToTele Привет от Sertik! Работает функция-конвертер Russian alfabit для Telegramm]
:tool fetch url=(api.telegram.org$botID/sendmes xt=$string) keep-result=no

Проверяйте, у меня отлично работает. Теперь можно без всякого труда отправлять в Телегу сообщения на русском языке! Замечания и дополнения приветствуются.
Вероятно целесообразно добавить отправку кода символа переноса строки, это не сложно сделать.
Источник: habr.com
К списку статей
Опубликовано: 10.09.2020 10:11:09
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Программирование

Lua

Лайфхаки для гиков

Микротик роутер ос

Мессенджер телеграмм

Отправка русских символов

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru