-- SPDX-License-Identifier: MIT hexchat.register('ZNC Buffers', '1', 'Add menu options to manage ZNC buffers') -- Add menus hexchat.command('menu -p4 add "$TAB/ZNC"') hexchat.command('menu add "$TAB/ZNC/Clear Buffer" ".zncclearbuffer %s"') hexchat.command('menu add "$TAB/ZNC/Play Buffer" "znc playbuffer %s"') hexchat.hook_unload(function () hexchat.command('menu del "$TAB/ZNC') end) -- Ignore our own actions local recently_cleared = {} hexchat.hook_command('.zncclearbuffer', function(word, word_eol) local name = word[2] -- Ignore znc queries if name:sub(1, 1) ~= '*' then recently_cleared[name] = true hexchat.command('znc clearbuffer ' .. name) end return hexchat.EAT_ALL end) hexchat.hook_server('PRIVMSG', function(word, word_eol) local cleared_channel = word_eol[1]:match('^:%*status!znc@znc.in [^:]+:%[%d+] buffers matching %[([^%]]+)] have been cleared$') if cleared_channel and recently_cleared[cleared_channel] then recently_cleared[cleared_channel] = nil return hexchat.EAT_ALL end end) hexchat.hook_command('zncclosepm', function (word, word_eol) local id = hexchat.props.id for chan in hexchat.iterate('channels') do if chan.id == id and chan.type == 3 then hexchat.command('.zncclearbuffer ' .. chan.channel) chan.context:command('close') end end return hexchat.EAT_ALL end)