mod/notification-telegram: remember ids of sent messages

This commit is contained in:
Christian Hesse 2023-10-10 13:07:21 +02:00
parent 7df4f9e78c
commit 8ecde47a78

View file

@ -15,9 +15,11 @@
# flush telegram queue # flush telegram queue
:set FlushTelegramQueue do={ :set FlushTelegramQueue do={
:global TelegramQueue; :global TelegramQueue;
:global TelegramMessageIDs;
:global IsFullyConnected; :global IsFullyConnected;
:global LogPrintExit2; :global LogPrintExit2;
:global ParseJson;
:if ([ $IsFullyConnected ] = false) do={ :if ([ $IsFullyConnected ] = false) do={
$LogPrintExit2 debug $0 ("System is not fully connected, not flushing.") false; $LogPrintExit2 debug $0 ("System is not fully connected, not flushing.") false;
@ -34,14 +36,13 @@
:foreach Id,Message in=$TelegramQueue do={ :foreach Id,Message in=$TelegramQueue do={
:if ([ :typeof $Message ] = "array" ) do={ :if ([ :typeof $Message ] = "array" ) do={
:do { :do {
/tool/fetch check-certificate=yes-without-crl output=none http-method=post \ :local Data ([ /tool/fetch check-certificate=yes-without-crl output=user http-method=post \
("https://api.telegram.org/bot" . ($Message->"tokenid") . "/sendMessage") \ ("https://api.telegram.org/bot" . ($Message->"tokenid") . "/sendMessage") \
http-data=("chat_id=" . ($Message->"chatid") . \ http-data=("chat_id=" . ($Message->"chatid") . "&disable_notification=" . ($Message->"silent") . \
"&disable_notification=" . ($Message->"silent") . \ "&reply_to_message_id=" . ($Message->"replyto") . "&disable_web_page_preview=true" . \
"&reply_to_message_id=" . ($Message->"replyto") . \ "&parse_mode=" . ($Message->"parsemode") . "&text=" . ($Message->"text")) as-value ]->"data");
"&disable_web_page_preview=true&parse_mode=" . ($Message->"parsemode") . \
"&text=" . ($Message->"text")) as-value;
:set ($TelegramQueue->$Id); :set ($TelegramQueue->$Id);
:set ($TelegramMessageIDs->([ $ParseJson ([ $ParseJson $Data ]->"result") ]->"message_id")) 1;
} on-error={ } on-error={
$LogPrintExit2 debug $0 ("Sending queued Telegram message failed.") false; $LogPrintExit2 debug $0 ("Sending queued Telegram message failed.") false;
:set AllDone false; :set AllDone false;
@ -64,6 +65,7 @@
:global TelegramChatId; :global TelegramChatId;
:global TelegramChatIdOverride; :global TelegramChatIdOverride;
:global TelegramFixedWidthFont; :global TelegramFixedWidthFont;
:global TelegramMessageIDs;
:global TelegramQueue; :global TelegramQueue;
:global TelegramTokenId; :global TelegramTokenId;
:global TelegramTokenIdOverride; :global TelegramTokenIdOverride;
@ -73,6 +75,7 @@
:global EitherOr; :global EitherOr;
:global IfThenElse; :global IfThenElse;
:global LogPrintExit2; :global LogPrintExit2;
:global ParseJson;
:global SymbolForNotification; :global SymbolForNotification;
:global UrlEncode; :global UrlEncode;
@ -111,6 +114,10 @@
:return false; :return false;
} }
:if ([ :typeof $TelegramMessageIDs ] = "nothing") do={
:set TelegramMessageIDs ({});
}
:local Truncated false; :local Truncated false;
:local Text ("*__" . [ $EscapeMD ("[" . $IdentityExtra . $Identity . "] " . \ :local Text ("*__" . [ $EscapeMD ("[" . $IdentityExtra . $Identity . "] " . \
($Notification->"subject")) "plain" ] . "__*\n\n"); ($Notification->"subject")) "plain" ] . "__*\n\n");
@ -139,11 +146,12 @@
:if ([ $CertificateAvailable "Go Daddy Secure Certificate Authority - G2" ] = false) do={ :if ([ $CertificateAvailable "Go Daddy Secure Certificate Authority - G2" ] = false) do={
$LogPrintExit2 warning $0 ("Downloading required certificate failed.") true; $LogPrintExit2 warning $0 ("Downloading required certificate failed.") true;
} }
/tool/fetch check-certificate=yes-without-crl output=none http-method=post \ :local Data ([ /tool/fetch check-certificate=yes-without-crl output=user http-method=post \
("https://api.telegram.org/bot" . $TokenId . "/sendMessage") \ ("https://api.telegram.org/bot" . $TokenId . "/sendMessage") \
http-data=("chat_id=" . $ChatId . "&disable_notification=" . ($Notification->"silent") . \ http-data=("chat_id=" . $ChatId . "&disable_notification=" . ($Notification->"silent") . \
"&reply_to_message_id=" . ($Notification->"replyto") . \ "&reply_to_message_id=" . ($Notification->"replyto") . "&disable_web_page_preview=true" . \
"&disable_web_page_preview=true&parse_mode=" . $ParseMode . "&text=" . $Text) as-value; "&parse_mode=" . $ParseMode . "&text=" . $Text) as-value ]->"data");
:set ($TelegramMessageIDs->([ $ParseJson ([ $ParseJson $Data ]->"result") ]->"message_id")) 1;
} on-error={ } on-error={
$LogPrintExit2 info $0 ("Failed sending telegram notification! Queuing...") false; $LogPrintExit2 info $0 ("Failed sending telegram notification! Queuing...") false;