功能转换器,用于从Mikrotik RouterOS用俄语向电报发送消息

Messenger Telegram用于通知IT设备的操作非常方便,系统管理员积极使用它。流行的WhatsApp和Viber支持API,但它们没有用于创建自己的机器人的内置技术。



著名公司Mikrotik的RouterOS不允许使用常规方式将俄语消息发送给Telegram。如果以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"}]






现在,我们直接编写字符串转换器本身。

在输入中,$字符串变量必须包含一个包含俄语或俄语-英语混合文本的字符串。输出是收集的字符串,准备发送给Telegram。同时,拉丁语Afavite字符和标点符号不会重新编码,因为它们通常在Messenger聊天中显示。代替俄语字符,将UTF-8代码中的对应字符插入字符串中,并用“%”符号分隔,Telegram使用该字符显示编码的字符。



# 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函数中,以便您可以从RouterOs Mikrotik中的任何脚本中调用它。您也可以在DUDe中使用它。这是其完整代码(您可以将RouterOS Mikrotik插入脚本的存储库中并执行该脚本,以将该功能放置在/ system脚本环境中):



混合字符串转换器功能
# Function Converter of Russian characters for sending in Telegram

# by Sertik 09/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»}]



# 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")}



:return $StrTele;

}





从注释中可以看到,该函数的唯一参数是输入的字符串,该函数将生成的字符串返回发送给变量$ string。



在我们的脚本中,请不要忘记声明一个先前定义的函数以进行调用:



:global FuncStrToTele
[$FuncStrToTele ", user !"]




要发送消息,您需要在Telegram中创建您的机器人,找出其API BOTToken和聊天ID。创建机器人和获取ID的说明已经发布了好几次。例如,您可以查看以下链接:





我们将测试消息发送到机器人聊天室:



:local botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:local myChatID "YYYYYY" ;
:global FuncStrToTele;
:local string [$FuncStrToTele "  Sertik !  - Russian alfabit  Telegramm"]
:tool fetch url=("https://api.telegram.org/$botID/sendmes ... xt=$string") keep-result=no


检查对我来说很好。现在,您可以轻松地将俄语消息发送给Telegram!欢迎评论和添加。



建议添加发送换行符代码,这并不难。



All Articles