changeset 4159:94e3e7753220

mod_muc_inject_mentions: Improve mentions lookup by using a set instead of a list
author Seve Ferrer <seve@delape.net>
date Mon, 28 Sep 2020 18:46:33 +0200
parents df1e0465ff81
children 9626d5d1adc4
files mod_muc_inject_mentions/mod_muc_inject_mentions.lua
diffstat 1 files changed, 8 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/mod_muc_inject_mentions/mod_muc_inject_mentions.lua	Wed Sep 30 13:27:27 2020 +0100
+++ b/mod_muc_inject_mentions/mod_muc_inject_mentions.lua	Mon Sep 28 18:46:33 2020 +0200
@@ -6,21 +6,10 @@
 local suffixes = module:get_option("muc_inject_mentions_suffixes", nil)
 local enabled_rooms = module:get_option("muc_inject_mentions_enabled_rooms", nil)
 local disabled_rooms = module:get_option("muc_inject_mentions_disabled_rooms", nil)
-
-local reference_xmlns = "urn:xmpp:reference:0"
+local mention_delimiters = module:get_option_set("muc_inject_mentions_mention_delimiters",  {" ", "", "\n"})
 
 
-local mention_delimiters = {" ", "", "\n"}
-
-local function in_list(value, list)
-    for _, v in ipairs(list) do
-        if v == value then
-            return true
-        end
-    end
-    return false
-end
-
+local reference_xmlns = "urn:xmpp:reference:0"
 
 local function is_room_eligible(jid)
     if not enabled_rooms and not disabled_rooms then
@@ -55,7 +44,7 @@
     -- Preffix must have a space before it,
     -- be the first character of the body
     -- or be the first character after a new line
-    if not in_list(body:sub(first - 2, first - 2), mention_delimiters) then
+    if not mention_delimiters:contains(body:sub(first - 2, first - 2)) then
         return false
     end
 
@@ -76,7 +65,7 @@
     -- Suffix must have a space after it,
     -- be the last character of the body
     -- or be the last character before a new line
-    if not in_list(body:sub(last + 2, last + 2), mention_delimiters) then
+    if not mention_delimiters:contains(body:sub(last + 2, last + 2)) then
         return false
     end
 
@@ -115,8 +104,8 @@
             local first, last = match.first, match.last
 
             -- Body only contains nickname or is between spaces, new lines or at the end/start of the body
-            if in_list(body:sub(first - 1, first - 1), mention_delimiters) and
-                in_list(body:sub(last + 1, last + 1), mention_delimiters)
+            if mention_delimiters:contains(body:sub(first - 1, first - 1)) and
+                mention_delimiters:contains(body:sub(last + 1, last + 1))
             then
                 table.insert(mentions, {bare_jid=bare_jid, first=first, last=last})
             else
@@ -130,13 +119,13 @@
 
                 -- @nickname ...
                 elseif has_preffix and not has_suffix then
-                    if in_list(body:sub(last + 1, last + 1), mention_delimiters) then
+                    if mention_delimiters:contains(body:sub(last + 1, last + 1)) then
                         table.insert(mentions, {bare_jid=bare_jid, first=first, last=last})
                     end
 
                 -- nickname: ...
                 elseif not has_preffix and has_suffix then
-                    if in_list(body:sub(first - 1, first - 1), mention_delimiters) then
+                    if mention_delimiters:contains(body:sub(first - 1, first - 1)) then
                         table.insert(mentions, {bare_jid=bare_jid, first=first, last=last})
                     end
                 end