58 lines
1.3 KiB
Lua
58 lines
1.3 KiB
Lua
-- SPDX-License-Identifier: MIT
|
|
hexchat.register('MassHighlightIgnore', '3', 'Ignore mass highlight spam')
|
|
|
|
if unpack == nil then
|
|
unpack = table.unpack -- fix lua 5.2
|
|
end
|
|
|
|
local MAX_COUNT = 4
|
|
|
|
-- http://lua-users.org/wiki/SplitJoin
|
|
local function split(str)
|
|
local t = {}
|
|
for i in string.gmatch(str, "%S+") do
|
|
t[#t + 1] = i
|
|
end
|
|
return t
|
|
end
|
|
|
|
local function nick_in_list (nick, list)
|
|
for _, word in pairs(list) do
|
|
if hexchat.nickcmp(word, nick) == 0 then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function is_mass_highlight (message)
|
|
local count = 0
|
|
local words = split(message)
|
|
|
|
for user in hexchat.props.context:iterate('users') do
|
|
if nick_in_list(user.nick, words) then
|
|
count = count + 1
|
|
if count == MAX_COUNT then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
local function ignore_mass_hilight (args, attrs, event)
|
|
if is_mass_highlight(args[2]) then
|
|
hexchat.emit_print_attrs(attrs, event, unpack(args))
|
|
return hexchat.EAT_ALL
|
|
end
|
|
end
|
|
|
|
hexchat.hook_print_attrs('Channel Msg Hilight', function (args, attrs)
|
|
return ignore_mass_hilight(args, attrs, 'Channel Message')
|
|
end, hexchat.PRI_HIGHEST)
|
|
|
|
hexchat.hook_print('Channel Action Hilight', function (args, attrs)
|
|
return ignore_mass_hilight(args, attrs, 'Channel Action')
|
|
end, hexchat.PRI_HIGHEST)
|
|
|