оповещение в телегу
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 4230
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
А откуда там вообще кириллица?
Telegram: @thexvo
- Virtue
- Сообщения: 148
- Зарегистрирован: 07 мар 2014, 10:17
-
- Сообщения: 161
- Зарегистрирован: 29 апр 2021, 10:45
Вот вам функция для преобразования строки из кирилицы, чтобы можно было в телеграм отправлять.
И функция для замены пробелов.(она включена в функцию преобразования кирилицы)
При копировании будьте внимательны, чтобы не сбилась кодировка кирилицы. Если собьётся то можно руками перенабить Кирилические символы
И функция для замены пробелов.(она включена в функцию преобразования кирилицы)
При копировании будьте внимательны, чтобы не сбилась кодировка кирилицы. Если собьётся то можно руками перенабить Кирилические символы
Код: Выделить всё
:global FuncStrToTele do={
:local string; :set $string $1;
global SpaceToCode
# 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")}
set $StrTele [$SpaceToCode $StrTele]
:return $StrTele;
}
global SpaceToCode do={
local string ""
local char
put $1
for i from=0 to ([len $1]-1) step=1 do={
#put $i
set $char [pick $1 $i]
#put $char
if ($char=" ") do={set $char "%20"}
set $string ($string . $char)
#put $string
}
return $string
}
-
- Сообщения: 20
- Зарегистрирован: 25 янв 2021, 10:18
Вот этот скрипт от Sertik использую, он кириллицей сыплет:
viewtopic.php?f=14&t=12275
Попробую.
Спасибо!
А как его правильно интегрировать в тот скрипт, что бы граблей не насобирать?
-
- Сообщения: 161
- Зарегистрирован: 29 апр 2021, 10:45
В какой скрипт? тут 7 страниц, их все читать я конечно же не буду.А как его правильно интегрировать в тот скрипт, что бы граблей не насобирать?
Но вобщем виде это выглядит так
$telegram [FuncStrToTele "строка для отправки"]
Где $telegram функция отправки строки в телеграм, которой в качестве параметра передаётся только собственно сама строка для отправки (всякие ID у меня заданы глобальными переменными)
или $telegram [SpaceToCode "Строка без кирилицы для отправки"]
-
- Сообщения: 20
- Зарегистрирован: 25 янв 2021, 10:18
Спасибо, буду пробовать.Lurker писал(а): ↑01 сен 2021, 15:36В какой скрипт? тут 7 страниц, их все читать я конечно же не буду.А как его правильно интегрировать в тот скрипт, что бы граблей не насобирать?
Но вобщем виде это выглядит так
$telegram [FuncStrToTele "строка для отправки"]
Где $telegram функция отправки строки в телеграм, которой в качестве параметра передаётся только собственно сама строка для отправки (всякие ID у меня заданы глобальными переменными)
или $telegram [SpaceToCode "Строка без кирилицы для отправки"]
Вот последний правленый скрипт этой темы, который пытаюсь использовать:
viewtopic.php?p=77628#p77628
-
- Сообщения: 161
- Зарегистрирован: 29 апр 2021, 10:45
Выносите часто используемые куски кода в функции.vovvw писал(а): ↑02 сен 2021, 10:27 Вот последний правленый скрипт этой темы, который пытаюсь использовать:
viewtopic.php?p=77628#p77628
Объявите функцию(и не забудьте задать глобальные переменные)
:global telegram do={
:global FuncStrToTele
:global bot
:global chat
set $1 [$FuncStrToTele $1]
:tool fetch url=("https://api.telegram.org/$bot/sendmessa ... at&text=$1") keep-result=no
}
И замените
tool fetch keep-result=no url="https://api.telegram.org/$botID/sendmes ... atID&text= $nameID : %0A$messages"
на
$telegram "$nameID : %0A$messages" (не уверен что так просто строка соберётся, но у вас вроде работает. если нет начние с $telegram $messages а там разберётесь как слепить несколько переменных в одну )
И короче и читаемость кода вырастает, и все преобразования уже есть.
-
- Сообщения: 20
- Зарегистрирован: 25 янв 2021, 10:18
Действительно вот это не работает: $telegram "$nameID : %0A$messages"Lurker писал(а): ↑02 сен 2021, 11:38 И замените
tool fetch keep-result=no url="https://api.telegram.org/$botID/sendmes ... atID&text= $nameID : %0A$messages"
на
$telegram "$nameID : %0A$messages" (не уверен что так просто строка соберётся, но у вас вроде работает. если нет начние с $telegram $messages а там разберётесь как слепить несколько переменных в одну )
И короче и читаемость кода вырастает, и все преобразования уже есть.
Вот собрал все вместе:
Код: Выделить всё
# Telegram notification script by Virtue
# https://forummikrotik.ru/viewtopic.php?f=14&t=12043
# tested on ROS 6.48
# updated 2021/02/18
:global telegram do={
:global FuncStrToTele
:global botID "botXXX";
:global chatID "-XXX";
set $1 [$FuncStrToTele $1]
:tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$chatID&text==$1") keep-result=no
}
:global FuncStrToTele do={
:local string; :set $string $1;
global SpaceToCode
# 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")}
set $StrTele [$SpaceToCode $StrTele]
:return $StrTele;
}
global SpaceToCode do={
local string ""
local char
put $1
for i from=0 to ([len $1]-1) step=1 do={
#put $i
set $char [pick $1 $i]
#put $char
if ($char=" ") do={set $char "%20"}
set $string ($string . $char)
#put $string
}
return $string
}
:do {
:local nameID [/system identity get name];
:delay 10;
:local timeNow [/system clock get time];
:local logs;
:if ([:pick $timeNow 0 2] < 03) do={
:local date [/system clock get date];
:foreach h in=[/log find] do={
:local htime [/log get $h time];
:if (($htime ~ [:pick $date 0 6]) and ([:pick $htime 7 15] > ($timeNow - 00:01:00))) do={ :set logs ($logs, $h); }
}
} else={ :set logs [/log find time >= ($timeNow - 00:01:00)]; }
:if ([:len $logs] > 0 ) do={
:local messages;
:local presence false;
:foreach i in=$logs do={
:local imessage [/log get $i message];
:local topics [/log get $i topics];
:if ($imessage ~"telnet" and $imessage ~"logged in") do={} else={
:if ($topics ~"caps" || $topics ~"wireless") do={
:if ($imessage ~ "[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]") do={
:foreach k in=[/ip dhcp-server lease find dynamic=no disabled=no] do={
:local mac [/ip dhcp-server lease get $k mac-address];
:if ($imessage ~ "$mac") do={ :set presence true; }
}
}
:if (presence = false) do={
:local currentTime [ /log get $i time ];
:set messages ($messages.$currentTime." ".$imessage."%0A%0A");
}
}
:if ($topics ~"warning" || $topics ~"error" || $topics ~"critical" || $imessage ~"logged in") do={
:if ($imessage ~ "[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]") do={
:foreach k in=[/ip dhcp-server lease find dynamic=no disabled=no] do={
:local mac [/ip dhcp-server lease get $k mac-address];
:if ($imessage ~ "$mac") do={ :set imessage ($imessage." / ".[/ip dhcp-server lease get $k comment]); }
}
}
:local currentTime [ /log get $i time ];
:set messages ($messages.$currentTime." ".$imessage."%0A%0A");
}
}
}
:if ([:len $messages] > 0 ) do={
put ($messages);
$telegram $messages;
}
}
}
-
- Сообщения: 161
- Зарегистрирован: 29 апр 2021, 10:45
я тоже с этого начинал. ИМХО это тупиковый путь т.к. костылей там немеряно.
Правильнее перебирать лог по ID. Вот скрипт
idd-номер цаписи с которой начинать обработку лога я объявляю её как 0 при старте микротика
TeleLogExept -функция которая проверяет надо ли отправлять такую запись в телеграм.
Обратите внимание тут ещё банит за неудачный вход по ipsec
ip firewall address-list add address=$adr list="fail2ban 248d"
Функции Если какую забыл-пишите
Правильнее перебирать лог по ID. Вот скрипт
idd-номер цаписи с которой начинать обработку лога я объявляю её как 0 при старте микротика
TeleLogExept -функция которая проверяет надо ли отправлять такую запись в телеграм.
Обратите внимание тут ещё банит за неудачный вход по ipsec
ip firewall address-list add address=$adr list="fail2ban 248d"
Код: Выделить всё
:global telegram
:global num2id
:global idd
global TeleLogExept
local logarray
local end
local adr
local message
local time
if (idd=0) do={
$telegram ([/log get *0 time] . " ÿ âêëþ÷èëñÿ")
set $idd ($idd+1)
}
:local idh [$num2id $idd]
while (true) do={
#put "while true do"
set logarray [log get $idh]
set $message [log get $idh message]
set $time [log get $idh time]
if ([typeof $message] != "nil") do={
#put "typeofmessage"
if ([$TeleLogExept "" $message] = false) do={
#put "no tele exept"
set $end [find $message " phase1 negotiation failed"]
#put $end
if ($end > 5) do={
#put "end>5"
set $adr [pick $message 0 $end]
#put $adr
#put [ip firewall address-list print as-value where address=$adr]
#put ([ip firewall address-list print as-value where address=$adr]~"^\$")
if ([ip firewall address-list print as-value where address=$adr]~"^\$") do={
ip firewall address-list add address=$adr list="fail2ban 248d"
$telegram ([pick $logarray 3] . "%0AÁàí çà ïîïûòêó íåñàíêöèîíèðîâàííîãî äîñòóïà ïî ipsec c àäðåñà " . $adr)
} else {
$telegram ([pick $logarray 3] . "%0AÏîïûòêà äîñòóïà ïî ipsec c çàáàíåííîãî àäðåñà " . $adr)
}
} else {
put ([pick $logarray 3] . "%0A" . [tostr [pick $logarray 4]] . "%0A" . $message)
#$telegram ([pick $logarray 3])
#$telegram ([tostr [pick $logarray 4]])
put [$message]
put [$FuncStrToTele $message]
$telegram ($time . " " . $message)
#$telegram ([pick $logarray 3] . "%0A" . [tostr [pick $logarray 4]] . "%0A" . $message)
}
}
set $idd ($idd+1)
set $idh [$num2id $idd]} else {
delay 10
}
}
Код: Выделить всё
:global num2hex do={
:local number [:tonum $1]
:local hexadec "0"
:local remainder 0
:local hexChars "0123456789ABCDEF"
:if ($number > 0) do={:set hexadec ""}
:while ( $number > 0 ) do={
:set remainder ($number % 16)
:set number (($number-$remainder) / 16)
:set hexadec ([:pick $hexChars $remainder].$hexadec)
}
:return "0x$hexadec"
}
global num2id do={
global num2hex
set $1 ("*" . [pick [$num2hex $1] 2 99])
return $1
}
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Может пригодится:
viewtopic.php?f=14&t=11996
не понимаю, почему тут у топикастеров возникают проблемы с отправкой на Телеграмм пробелов. Мои функции спокойно пересылают пробелы без всякой дополнительной их обработки.
viewtopic.php?f=14&t=11996
не понимаю, почему тут у топикастеров возникают проблемы с отправкой на Телеграмм пробелов. Мои функции спокойно пересылают пробелы без всякой дополнительной их обработки.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947