examples/attention.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sun, 22 Mar 2009 05:49:14 +0200
changeset 51 a95a3a73482c
parent 50 12d8dd774fcc
child 66 542f61e113cb
permissions -rw-r--r--
Pubsub uses new forms


-- ATTENTION (XEP-0224)

-- library

require 'lm'

-- public

attention = {
	handler =
		function ( mesg )
		end,
}

function attention.send ( conn, to, message )
	local body = nil
	if message then
		body = { message }
	end
	conn:send (
		lm.message.create { mtype = 'message-headline', to = to,
			attention = { xmlns = 'urn:xmpp:attention:0' },
			body = body,
		} )
end

-- private

local attention_incoming_message_handler = lm.message_handler.new (
	function ( conn, mess )
		local a = mess:child ( 'attention' )
		if a and a:attribute ( 'xmlns' ) == 'urn:xmpp:attention:0' then
			local body = mess:child ( 'body' )
			if body then
				body = body:value ()
			end
			attention.handler ( body )
		end
		return false
	end )

-- mcabber

attention.handler =
	function ( mesg )
		local times = 0
		main.timer ( 1,
			function ()
				if times < 6 then
					main.beep ()
					times = times + 1
					return true
				end
				return false
			end )
	end

main.command ( 'attention',
	function ( args )
		local who
		if args.t then
			who = args.t
		else
			who = main.full_jid ()
		end
		attention.send ( lm.connection.bless ( main.connection () ), who, args[1] )
	end, true, 'jid' )

commands_help['attention'] = "[-t to] [message]\n\nTries to get buddy's attention."

local attention_handler_registered = false

hooks_d['hook-post-connect'].attention =
	function ( args )
		lm.connection.bless( main.connection () ):handler ( attention_incoming_message_handler, 'message', 'normal' )
		attention_handler_registered = true
		hooks_d['hook-post-connect'].attention = nil
		hooks_d['hook-quit'].attention =
			function ( args )
				if attention_handler_registered then
					lm.connection.bless( main.connection () ):handler ( attention_incoming_message_handler, 'message' )
				end
			end
	end

main.add_feature ( 'urn:xmpp:attention:0' )

-- vim: se ts=4: --