my-yadm/.config/hexchat/addons/buffextras.lua

50 lines
1.4 KiB
Lua

-- SPDX-License-Identifier: MIT
hexchat.register('Buffextras', '1', "Format messages from ZNC's buffextras module")
local function strip_brackets (str)
return str:sub(2, #str - 1)
end
hexchat.hook_server_attrs('PRIVMSG', function (word, word_eol, attrs)
if not word[1]:match('^:%*buffextras!') then
return
end
local channel = word[3]
local nick, host = word[4]:match('^:([^!]+)!(.*)$')
local function is_event (event)
return word_eol[5]:sub(1, #event) == event
end
local function emit (event, ...)
hexchat.emit_print_attrs(attrs, event, ...)
end
if is_event('joined') then
emit('Join', nick, channel, host)
elseif is_event('quit with message') then
emit('Quit', nick, strip_brackets(word_eol[8]), host)
elseif is_event('parted with message') then
local reason = strip_brackets(word_eol[8])
if reason ~= '' then
emit('Part with Reason', nick, host, channel, reason)
else
emit('Part', nick, host, channel)
end
elseif is_event('is now known as') then
emit('Change Nick', nick, word[9])
elseif is_event('changed the topic to') then
emit('Topic Change', nick, word_eol[9], channel)
elseif is_event('kicked') then
emit('Kick', nick, word[6], channel, strip_brackets(word_eol[8]))
elseif is_event('set mode') then
emit('Raw Modes', nick, string.format('%s %s', channel, word_eol[7]))
else
return -- Unknown event
end
return hexchat.EAT_ALL
end, hexchat.PRI_HIGH)