Browse Source

:sparkles: 支持设置短信控制白名单号码,默认禁用

Mizore 8 months ago
parent
commit
058f1ecafe
2 changed files with 33 additions and 5 deletions
  1. 5 0
      script/config.lua
  2. 28 5
      script/main.lua

+ 5 - 0
script/config.lua

@@ -97,4 +97,9 @@ return {
     --
     -- SIM 卡 pin 码
     PIN_CODE = "",
+    --
+    -- 短信控制白名单号码, 为空或注释掉, 表示禁止所有号码
+    -- 短信格式示例: SMS,10086,查询流量
+    -- 配置示例: SMS_CONTROL_WHITELIST_NUMBERS = { "18xxxxxxx", "18xxxxxxx", "18xxxxxxx" }
+    SMS_CONTROL_WHITELIST_NUMBERS = {},
 }

+ 28 - 5
script/main.lua

@@ -94,6 +94,26 @@ if containsValue(config.NOTIFY_TYPE, "serial") then
     end)
 end
 
+-- 判断一个元素是否在一个表中
+local function isElementInTable(myTable, target)
+    for _, value in ipairs(myTable) do
+        if value == target then
+            return true
+        end
+    end
+    return false
+end
+
+-- 判断白名单号码是否符合触发短信控制的条件
+local function isWhiteListNumber(sender_number)
+    -- 判断如果未设置白名单号码, 禁止所有号码触发
+    if type(config.SMS_CONTROL_WHITELIST_NUMBERS) ~= "table" or #config.SMS_CONTROL_WHITELIST_NUMBERS == 0 then
+        return false
+    end
+    -- 已设置白名单号码, 判断是否在白名单中
+    return isElementInTable(config.SMS_CONTROL_WHITELIST_NUMBERS, sender_number)
+end
+
 -- 短信接收回调
 sms.setNewSmsCb(function(sender_number, sms_content, m)
     local time = string.format("%d/%02d/%02d %02d:%02d:%02d", m.year + 2000, m.mon, m.day, m.hour, m.min, m.sec)
@@ -101,11 +121,14 @@ sms.setNewSmsCb(function(sender_number, sms_content, m)
 
     -- 短信控制
     local is_sms_ctrl = false
-    local receiver_number, sms_content_to_be_sent = sms_content:match("^SMS,(+?%d+),(.+)$")
-    receiver_number, sms_content_to_be_sent = receiver_number or "", sms_content_to_be_sent or ""
-    if sms_content_to_be_sent ~= "" and receiver_number ~= "" and #receiver_number >= 5 and #receiver_number <= 20 then
-        sms.send(receiver_number, sms_content_to_be_sent)
-        is_sms_ctrl = true
+    -- 判断发送者是否为白名单号码
+    if isWhiteListNumber(sender_number) then
+        local receiver_number, sms_content_to_be_sent = sms_content:match("^SMS,(+?%d+),(.+)$")
+        receiver_number, sms_content_to_be_sent = receiver_number or "", sms_content_to_be_sent or ""
+        if sms_content_to_be_sent ~= "" and receiver_number ~= "" and #receiver_number >= 5 and #receiver_number <= 20 then
+            sms.send(receiver_number, sms_content_to_be_sent)
+            is_sms_ctrl = true
+        end
     end
 
     -- 发送通知