aboutsummaryrefslogtreecommitdiffstats
path: root/sms-forward.rsc
diff options
context:
space:
mode:
Diffstat (limited to 'sms-forward.rsc')
-rw-r--r--sms-forward.rsc32
1 files changed, 21 insertions, 11 deletions
diff --git a/sms-forward.rsc b/sms-forward.rsc
index 8169022..feb640e 100644
--- a/sms-forward.rsc
+++ b/sms-forward.rsc
@@ -9,11 +9,11 @@
# forward SMS to e-mail
# https://rsc.eworm.de/doc/sms-forward.md
-:global GlobalFunctionsReady;
-:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
-
:local ExitOK false;
-:do {
+:onerror Err {
+ :global GlobalConfigReady; :global GlobalFunctionsReady;
+ :retry { :if ($GlobalConfigReady != true || $GlobalFunctionsReady != true) \
+ do={ :error ("Global config and/or functions not ready."); }; } delay=500ms max=50;
:local ScriptName [ :jobname ];
:global Identity;
@@ -61,7 +61,12 @@
:if ($Phone = $Settings->"allowed-number" && \
($SmsVal->"message")~("^:cmd " . $Settings->"secret" . " script ")) do={
$LogPrint debug $ScriptName ("Removing SMS, which started a script.");
- /tool/sms/inbox/remove $Sms;
+ :onerror Err {
+ /tool/sms/inbox/remove $Sms;
+ :delay 50ms;
+ } do={
+ $LogPrint warning $ScriptName ("Failed to remove message: " . $Err);
+ }
} else={
:set Messages ($Messages . "\n\nOn " . $SmsVal->"timestamp" . \
" type " . $SmsVal->"type" . ":\n" . $SmsVal->"message");
@@ -69,12 +74,12 @@
:if ($Phone~($Hook->"allowed-number") && ($SmsVal->"message")~($Hook->"match")) do={
:if ([ $ValidateSyntax ($Hook->"command") ] = true) do={
$LogPrint info $ScriptName ("Running hook '" . $Hook->"match" . "': " . $Hook->"command");
- :do {
+ :onerror Err {
:local Command [ :parse ($Hook->"command") ];
$Command Phone=$Phone Message=($SmsVal->"message");
:set Messages ($Messages . "\n\nRan hook '" . $Hook->"match" . "':\n" . $Hook->"command");
- } on-error={
- $LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed to run!");
+ } do={
+ $LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed to run: " . $Err);
}
} else={
$LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed syntax validation!");
@@ -92,10 +97,15 @@
message=("Received " . [ $IfThenElse ($Count = 1) "this message" ("these " . $Count . " messages") ] . \
" by " . $Identity . " from " . $Phone . ":" . $Messages) });
:foreach Sms in=$Delete do={
- /tool/sms/inbox/remove $Sms;
+ :onerror Err {
+ /tool/sms/inbox/remove $Sms;
+ :delay 50ms;
+ } do={
+ $LogPrint warning $ScriptName ("Failed to remove message: " . $Err);
+ }
}
}
}
-} on-error={
- :global ExitError; $ExitError $ExitOK [ :jobname ];
+} do={
+ :global ExitError; $ExitError $ExitOK [ :jobname ] $Err;
}