From aa48d7ee907d8c866be4639eac538240036a1c9e Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 4 Apr 2021 19:18:41 +0200 Subject: [PATCH] Precise name detection, avoid wrong matches --- init.lua | 11 ++++++----- unittest.lua | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index aa129f4..3af1a82 100644 --- a/init.lua +++ b/init.lua @@ -5,6 +5,7 @@ end local color_reset = "\x1b(c@#FFF)" local c_pattern = "\x1b%(c@#?[0-9a-fA-F]+%)" +local c_namepat = "[A-z0-9-_]+" core.register_on_receiving_chat_message(function(line) local myname_l = "~[CAPSĀ£" @@ -19,9 +20,9 @@ core.register_on_receiving_chat_message(function(line) local prefix local chat_line = false - local name, color_end, message = line:match("^%<(%S+)%>%s*(" .. c_pattern .. ")%s*(.*)") + local name, color_end, message = line:match("^%<(" .. c_namepat .. ")%>%s*(" .. c_pattern .. ")%s*(.*)") if not message then - name, message = line:match("^%<(%S+)%> (.*)") + name, message = line:match("^%<(" .. c_namepat .. ")%> (.*)") if name then name = name:gsub(c_pattern, "") end @@ -32,15 +33,15 @@ core.register_on_receiving_chat_message(function(line) chat_line = true else -- Translated server messages, actions - prefix, name, message = line:match("^(.*\x1bF)([^\x1b]+)(.*)") + prefix, name, message = line:match("^(.*\x1bF)(".. c_namepat .. ")(\x1bE.*)") end if not message then -- Server messages, actions - prefix, name, message = line:match("^(%*+ )(%S+) (.*)") + prefix, name, message = line:match("^(%*+ )(" .. c_namepat .. ") (.*)") end if not message then -- Colored prefix - prefix, name, message = line:match("^(.* )%<(%S+)%> (.*)") + prefix, name, message = line:match("^(.* )%<(" .. c_namepat .. ")%> (.*)") if color and message and prefix:len() > 0 then prefix = color .. prefix .. color_reset color = nil diff --git a/unittest.lua b/unittest.lua index 933d190..73339a7 100644 --- a/unittest.lua +++ b/unittest.lua @@ -32,6 +32,7 @@ local test_table = { "*** singleplayer joined the game", "*** \x1b(T@__builtin)\x1bFsingleplayer\x1bE joined the game.\x1bE", "* singleplayer needs action like a true survivor", + "\x1b(T@__builtin)Privileges of \x1bFsingleplayer\x1bE: \x1bFyou, spin, me, right, round, babe\x1bE\x1bE", " buzz baz", "\x1b(c@#abcdef)[Admin] foo bar\x1b(c@#ffffff)", "\x1b(c@#FF0000)\x1b(c@#ffffff) not modified",