:global PurgeTelegramQueue;
:global SendTelegram;
:global SendTelegram2;
-
# flush telegram queue
:set FlushTelegramQueue do={ :onerror Err {
:global TelegramQueue;
:global CertificateAvailable;
:global IsFullyConnected;
:global LogPrint;
-
:if ([ $IsFullyConnected ] = false) do={
$LogPrint debug $0 ("System is not fully connected, not flushing.");
:return false;
$LogPrint warning $0 ("Downloading required certificate failed.");
:return false;
}
-
:local AllDone true;
:local QueueLen [ :len $TelegramQueue ];
:if ([ :len [ /system/scheduler/find where name="_FlushTelegramQueue" ] ] > 0 && $QueueLen = 0) do={
} do={
:global ExitOnError; $ExitOnError $0 $Err;
} }
-
# get the chat id
:set GetTelegramChatId do={ :onerror Err {
:global TelegramTokenId;
# send notification via telegram - expects one array argument
:set ($NotificationFunctions->"telegram") do={
:local Notification $1;
-
:global Identity;
:global IdentityExtra;
:global TelegramChatId;
:global TelegramTokenId;
:global TelegramTokenIdOverride;
:global CertificateAvailable;
-
:global CharacterReplace;
:global EitherOr;
:global IfThenElse;
:global ProtocolStrip;
:global SymbolForNotification;
:global UrlEncode;
-
:local EscapeMD do={
:local Text [ :tostr $1 ];
:local Mode [ :tostr $2 ];
:local Excl [ :tostr $3 ];
-
:global CharacterReplace;
:global IfThenElse;
-
:local Chars {
"body"={ "\\"; "`" };
"plain"={ "_"; "*"; "["; "]"; "("; ")"; "~"; "`"; ">";
}
}
}
-
# purge the Telegram queue
:set PurgeTelegramQueue do={
:global TelegramQueue;
/system/scheduler/remove [ find where name="_FlushTelegramQueue" ];
:set TelegramQueue;
}
-
# send notification via telegram - expects at least two string arguments
:set SendTelegram do={ :onerror Err {
:global SendTelegram2;
$SendTelegram2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
-} do={:global ExitOnError; $ExitOnError $0 $Err}
-}
-
+} do={:global ExitOnError; $ExitOnError $0 $Err.
+} }
# send notification via telegram - expects one array argument
:set SendTelegram2 do={
:local Notification $1;
-19a20
->
-27a29
->
-34a37
->
-37a41
->
-51a56
->
-57c62
+54c54
< :global ExitOnError; $ExitOnError $0 $Err;
---
> :global ExitOnError; $ExitOnError $0 $Err;
-62a68
->
-64a71
->
-68a76
->
-77a86
->
-79a89
->
-83a94
->
-90c101
+86c86
< :global ExitOnError; $ExitOnError $0 $Err;
---
> :global ExitOnError; $ExitOnError $0 $Err;
-107d117
-< :global CertificateAvailable;
-108a119
-> :global CertificateAvailable;
-135c146,150
+88d87
+<
+126c125,127
< :if ($Mode = "body") do={:return ("```\n" . $Text . "\n```")}
---
->
> :if ($Mode = "body") do={
> :return ("```\n" . $Text . "\n```");
> }
->
-137a153
->
-144,145c160,168
+135,136c136,141
< :if ([ :len $TokenId ] = 0 || [ :len $ChatId ] = 0) do={:return false}
< :if ([ :typeof $TelegramMessageIDs ] = "nothing") do={:set TelegramMessageIDs ({})}
---
->
> :if ([ :len $TokenId ] = 0 || [ :len $ChatId ] = 0) do={
> :return false;
> }
->
> :if ([ :typeof $TelegramMessageIDs ] = "nothing") do={
> :set TelegramMessageIDs ({});
> }
->
-156c179,181
+147c152,154
< } else={:set Text ($Text . [ $EscapeMD ($Notification->"message") "body" ])}
---
> } else={
> :set Text ($Text . [ $EscapeMD ($Notification->"message") "body" ]);
> }
-166a192
->
-181c207,210
+172c179,181
< :if ([ :typeof $TelegramQueue ] = "nothing") do={:set TelegramQueue ({})}
---
->
> :if ([ :typeof $TelegramQueue ] = "nothing") do={
> :set TelegramQueue ({});
> }
-196a226
->
-203a234
->
-205,206c236,238
-< } do={:global ExitOnError; $ExitOnError $0 $Err}
-< }
+194c203,204
+< } do={:global ExitOnError; $ExitOnError $0 $Err.
---
> } do={
> :global ExitOnError; $ExitOnError $0 $Err;
-> } }
-210a243
->
-211a245
->
:global PurgeTelegramQueue;
:global SendTelegram;
:global SendTelegram2;
-
# flush telegram queue
:set FlushTelegramQueue do={ :onerror Err {
:global TelegramQueue;
:global TelegramMessageIDs;
-
:global CertificateAvailable;
:global IsFullyConnected;
:global LogPrint;
-
:if ([ $IsFullyConnected ] = false) do={
$LogPrint debug $0 ("System is not fully connected, not flushing.");
:return false;
}
-
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed.");
:return false;
}
-
:local AllDone true;
:local QueueLen [ :len $TelegramQueue ];
-
:if ([ :len [ /system/scheduler/find where name="_FlushTelegramQueue" ] ] > 0 && $QueueLen = 0) do={
$LogPrint warning $0 ("Flushing Telegram messages from scheduler, but queue is empty.");
}
-
:foreach Id,Message in=$TelegramQueue do={
:if ([ :typeof $Message ] = "array" ) do={
:onerror Err {
}
}
}
-
:if ($AllDone = true && $QueueLen = [ :len $TelegramQueue ]) do={
/system/scheduler/remove [ find where name="_FlushTelegramQueue" ];
:set TelegramQueue;
} do={
:global ExitOnError; $ExitOnError $0 $Err;
} }
-
# get the chat id
:set GetTelegramChatId do={ :onerror Err {
:global TelegramTokenId;
-
:global CertificateAvailable;
:global LogPrint;
-
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading required certificate failed.");
:return false;
}
-
:local Data;
:onerror Err {
:set Data ([ /tool/fetch check-certificate=yes-without-crl output=user \
$LogPrint warning $0 ("Fetching data failed: " . $Err);
:return false;
}
-
:local JSON [ :deserialize from=json value=$Data ];
:local Count [ :len ($JSON->"result") ];
-
:if ($Count = 0) do={
$LogPrint info $0 ("No message received.");
:return false;
}
-
:local Message ($JSON->"result"->($Count - 1)->"message");
$LogPrint info $0 ("The chat id is: " . ($Message->"chat"->"id"));
:if (($Message->"is_topic_message") = true) do={
} do={
:global ExitOnError; $ExitOnError $0 $Err;
} }
-
# send notification via telegram - expects one array argument
:set ($NotificationFunctions->"telegram") do={
:local Notification $1;
-
:global Identity;
:global IdentityExtra;
:global TelegramChatId;
:global TelegramThreadIdOverride;
:global TelegramTokenId;
:global TelegramTokenIdOverride;
-
:global CertificateAvailable;
:global CharacterReplace;
:global EitherOr;
:global ProtocolStrip;
:global SymbolForNotification;
:global UrlEncode;
-
:local EscapeMD do={
:local Text [ :tostr $1 ];
:local Mode [ :tostr $2 ];
:local Excl [ :tostr $3 ];
-
:global CharacterReplace;
:global IfThenElse;
-
:local Chars {
"body"={ "\\"; "`" };
"plain"={ "_"; "*"; "["; "]"; "("; ")"; "~"; "`"; ">";
:set Text [ $CharacterReplace $Text $Char ("\\" . $Char) ];
}
}
-
:if ($Mode = "body") do={
:return ("```\n" . $Text . "\n```");
}
-
:return $Text;
}
-
:local ChatId [ $EitherOr ($Notification->"chatid") \
[ $EitherOr ($TelegramChatIdOverride->($Notification->"origin")) $TelegramChatId ] ];
:local ThreadId [ $EitherOr ($Notification->"threadid") \
[ $EitherOr ($TelegramThreadIdOverride->($Notification->"origin")) \
[ $IfThenElse ([ :len ($TelegramChatIdOverride->($Notification->"origin")) ] = 0) $TelegramThreadId ] ] ];
:local TokenId [ $EitherOr ($TelegramTokenIdOverride->($Notification->"origin")) $TelegramTokenId ];
-
:if ([ :len $TokenId ] = 0 || [ :len $ChatId ] = 0) do={
:return false;
}
-
:if ([ :typeof $TelegramMessageIDs ] = "nothing") do={
:set TelegramMessageIDs ({});
}
-
:local Truncated false;
:local Text ("*__" . [ $EscapeMD ("[" . $IdentityExtra . $Identity . "] " . \
($Notification->"subject")) "plain" ] . "__*\n\n");
[ $EscapeMD ("The message was too long and has been truncated, cut off _" . \
(($LenSum - [ :len $Text ]) * 100 / $LenSum) . "%_!") "plain" "_" ]);
}
-
:local HTTPData ("chat_id=" . $ChatId . "&disable_notification=" . ($Notification->"silent") . \
"&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \
"&disable_web_page_preview=true&parse_mode=MarkdownV2");
:set ($TelegramMessageIDs->[ :tostr ([ :deserialize from=json value=$Data ]->"result"->"message_id") ]) 1;
} do={
$LogPrint info $0 ("Failed sending Telegram notification: " . $Err . " - Queuing...");
-
:if ([ :typeof $TelegramQueue ] = "nothing") do={
:set TelegramQueue ({});
}
}
}
}
-
# purge the Telegram queue
:set PurgeTelegramQueue do={
:global TelegramQueue;
-
/system/scheduler/remove [ find where name="_FlushTelegramQueue" ];
:set TelegramQueue;
}
-
# send notification via telegram - expects at least two string arguments
:set SendTelegram do={ :onerror Err {
:global SendTelegram2;
-
$SendTelegram2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
} do={
:global ExitOnError; $ExitOnError $0 $Err;
} }
-
# send notification via telegram - expects one array argument
:set SendTelegram2 do={
:local Notification $1;
-
:global NotificationFunctions;
-
($NotificationFunctions->"telegram") ("\$NotificationFunctions->\"telegram\"") $Notification;
}