Mercurial > prosody-modules
changeset 4155:308b92b07da6
mod_muc_inject_mentions: Refactor code using in_list utility function to improve readability
author | Seve Ferrer <seve@delape.net> |
---|---|
date | Mon, 28 Sep 2020 15:30:22 +0200 (2020-09-28) |
parents | fa79d19d0fdd |
children | b79904446d9e |
files | mod_muc_inject_mentions/mod_muc_inject_mentions.lua |
diffstat | 1 files changed, 20 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_muc_inject_mentions/mod_muc_inject_mentions.lua Wed Sep 23 19:55:46 2020 +0200 +++ b/mod_muc_inject_mentions/mod_muc_inject_mentions.lua Mon Sep 28 15:30:22 2020 +0200 @@ -9,6 +9,19 @@ local reference_xmlns = "urn:xmpp:reference:0" + +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 function is_room_eligible(jid) if not enabled_rooms and not disabled_rooms then return true; @@ -36,20 +49,13 @@ end local function has_nick_prefix(body, first) - -- There is no prefix - -- but mention could still be valid - if first == 1 then return true end - -- There are no configured prefixes if not prefixes or #prefixes < 1 then return false end -- Preffix must have a space before it, -- be the first character of the body -- or be the first character after a new line - if body:sub(first - 2, first - 2) ~= "" and - body:sub(first - 2, first - 2) ~= " " and - body:sub(first - 2, first - 2) ~= "\n" - then + if not in_list(body:sub(first - 2, first - 2), mention_delimiters) then return false end @@ -64,20 +70,13 @@ end local function has_nick_suffix(body, last) - -- There is no suffix - -- but mention could still be valid - if last == #body then return true end - -- There are no configured suffixes if not suffixes or #suffixes < 1 then return false end -- Suffix must have a space after it, -- be the last character of the body -- or be the last character before a new line - if body:sub(last + 2, last + 2) ~= "" and - body:sub(last + 2, last + 2) ~= " " and - body:sub(last + 2, last + 2) ~= "\n" - then + if not in_list(body:sub(last + 2, last + 2), mention_delimiters) then return false end @@ -115,13 +114,9 @@ local bare_jid = occupant.bare_jid local first, last = match.first, match.last - -- Body only contains nickname - if first == 1 and last == #body then - table.insert(mentions, {bare_jid=bare_jid, first=first, last=last}) - - -- Nickname between spaces or new lines - elseif body:sub(first - 1, first - 1) == " " or body:sub(first - 1, first - 1) == "\n" and - body:sub(last + 1, last + 1) == " " or body:sub(last + 1, last + 1) == "\n" + -- 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) then table.insert(mentions, {bare_jid=bare_jid, first=first, last=last}) else @@ -135,17 +130,13 @@ -- @nickname ... elseif has_preffix and not has_suffix then - if body:sub(last + 1, last + 1) == " " or - body:sub(last + 1, last + 1) == "\n" - then + if in_list(body:sub(last + 1, last + 1), mention_delimiters) then table.insert(mentions, {bare_jid=bare_jid, first=first, last=last}) end -- nickname: ... elseif not has_preffix and has_suffix then - if body:sub(first - 1, first - 1) == " " or - body:sub(first - 1, first - 1) == "\n" - then + if in_list(body:sub(first - 1, first - 1), mention_delimiters) then table.insert(mentions, {bare_jid=bare_jid, first=first, last=last}) end end