examples/room_priv.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 109 2d2111cb5109
permissions -rw-r--r--
Fix module loading problem


-- ROOM NICK COMPLETION

-- global
room_cid = main.add_category ()
main.command ( 'priv',
	function ( args )
		main.run ( 'room privmsg ' .. args )
	end, false, room_cid )

commands_help['priv'] = "nick message\n\nSends private message to room participant. Nick completion available! ;)"

local registered_nicks = {}

-- global, used in binding
function room_priv_register_nicks ()
	for k, nick in pairs ( registered_nicks ) do
		main.del_completion ( room_cid, nick )
	end
	local buddy = main.current_buddy ()
	if buddy then
		local info = main.buddy_info ( buddy )
		if info then
			registered_nicks = { }
			if info.type == 'room' then
				for nick, k in pairs ( info.resources ) do
					main.add_completion ( room_cid, nick )
					table.insert ( registered_nicks, nick )
				end
			end
		end
	end
end

-- XXX
local room_priv_pattern = "roster%s+.+"
local room_priv_restore = {}
for key, binding in pairs ( main.binding () ) do
	if binding:match ( room_priv_pattern ) then
		room_priv_restore[key] = binding
		main.binding ( key, ('lua main.run ( %q ); room_priv_register_nicks ()'):format ( binding ) )
	end
end

main.hook ( 'hook-lua-quit',
	function ( args )
		for key, binding in pairs ( room_priv_restore ) do
			main.binding ( key, binding )
		end
	end )

-- vim: se ts=4: --