Fungsi-converter untuk mengirim pesan dalam bahasa Rusia ke Telegram dari Mikrotik RouterOS

Messenger Telegram sangat nyaman untuk memberi tahu tentang pengoperasian peralatan TI, yang secara aktif digunakan oleh Administrator Sistem. WhatsApp dan Viber mendukung API yang populer, tetapi mereka tidak memiliki teknologi bawaan untuk membuat bot mereka sendiri.



RouterOS dari perusahaan terkenal Mikrotik tidak mengizinkan pengiriman pesan dalam bahasa Rusia ke Telegram menggunakan cara biasa. Karakter Rusia dapat ditampilkan secara memadai dalam pesan jika dikirim dalam pengkodean UTF-8. Nah, kodenya sudah diketahui, mengapa tidak menulis transcoder?



Untuk menyederhanakan tugas, saya tidak menggunakan algoritme konversi, tetapi membuat larik kunci yang berisi karakter Rusia itu sendiri dalam bentuk kunci dalam string dan tata letak huruf besar, dan dalam nilai yang sesuai - kode karakter ini di UTF-8.



Larik data ini mungkin berguna untuk tugas lain:



Array kunci karakter alfabet Rusia dan nilai kodenya dalam 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"}]






Sekarang kita menulis langsung konverter string itu sendiri.

Pada masukan, variabel $ string harus berisi string yang berisi teks Rusia-Inggris campuran. Outputnya adalah string yang dikumpulkan, siap dikirim ke Telegram. Pada saat yang sama, karakter Afavite Latin dan tanda baca tidak dikodekan ulang, karena biasanya ditampilkan dalam obrolan messenger. Alih-alih karakter Rusia, pasangan mereka dalam kode UTF-8 dimasukkan ke dalam string, dipisahkan oleh tanda "%", yang digunakan oleh Telegram untuk menampilkan karakter yang disandikan.



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




Mari kita bentuk semua ini ke dalam fungsi FuncStrToTele sehingga Anda dapat memanggilnya dari semua skrip Anda di RouterOs Mikrotik. Anda juga dapat menggunakannya di DUDe. Berikut adalah kode lengkapnya (Anda dapat memasukkan RouterOS Mikrotik ke dalam repositori skrip Anda dan menjalankan skrip untuk menempatkan fungsi di lingkungan skrip / sistem):



Fungsi konverter string campuran
# 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;

}





Seperti yang Anda lihat dari komentar, satu-satunya parameter fungsi adalah string input karakter, fungsi mengembalikan string yang dihasilkan untuk dikirim ke variabel $ string



Dalam skrip kami, jangan lupa untuk mendeklarasikan fungsi yang telah ditentukan sebelumnya untuk dipanggil:



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




Untuk mengirim pesan, Anda perlu membuat bot Anda di Telegram, cari tahu API BOTToken dan ID obrolannya. Petunjuk untuk membuat bot dan mendapatkan ID telah diterbitkan beberapa kali. Misalnya, Anda dapat melihat tautan berikut:





Kami mengirim pesan uji kami ke obrolan bot:



: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


Periksa apakah berfungsi dengan baik untuk saya. Sekarang Anda dapat dengan mudah mengirim pesan dalam bahasa Rusia ke Telegram! Komentar dan tambahan dipersilakan.



Mungkin disarankan untuk menambahkan pengiriman kode karakter feed baris, itu tidak sulit untuk dilakukan.



All Articles