Update most useful scripts
authorMyhailo Danylenko <isbear@ukrpost.net>
Wed, 31 Mar 2010 01:25:19 +0300
changeset 99 ed4676536ed9
parent 98 59aeae623ac6
child 100 521c27baa387
Update most useful scripts * new hooks interface * connection state checking
examples/attention.lua
examples/evil.lua
examples/jobs.lua
examples/lm/attention.lua
examples/mcabberrc.lua
examples/muc.lua
examples/oob.lua
examples/privacy.lua
examples/register.lua
examples/remote.lua
examples/room_priv.lua
examples/transports.lua
examples/vcard.lua
--- a/examples/attention.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/attention.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -3,8 +3,11 @@
 local attention = require 'lm.attention'
 
 attention.handler (
-	function ( mesg )
+	function ( mesg, from )
 		local times = 0
+		if from then
+			main.print_info ( from, "Buddy wants your attention!" )
+		end
 		main.timer ( 1,
 			function ()
 				if times < 6 then
@@ -18,13 +21,18 @@
 
 main.command ( 'attention',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		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] )
+		attention.send ( lm.connection.bless ( connection ), who, args[1] )
 	end, true, 'jid' )
 
 commands_help['attention'] = "[-t to] [message]\n\nTries to get buddy's attention."
@@ -32,19 +40,35 @@
 local attention_handler = lm.message_handler.new ( attention.message_handler )
 local attention_handler_registered = false
 
-hooks_d['hook-post-connect'].attention =
+local attention_pc_handler =
+	function ( args )
+		local connection = main.connection ()
+		if connection then
+			lm.connection.bless(connection):handler ( attention_handler, 'message', 'normal' )
+			attention_handler_registered = true
+		end
+	end
+main.hook ( 'hook-post-connect', attention_pc_handler )
+main.hook ( 'hook-pre-disconnect',
 	function ( args )
-		lm.connection.bless( main.connection () ):handler ( attention_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_handler, 'message' )
-				end
+		if attention_handler_registered then
+			local connection = main.connection ()
+			if connection then
+				lm.connection.bless(connection):handler ( attention_handler, 'message' )
 			end
-	end
+			attention_handler_registered = false
+		end
+	end )
 
-main.add_feature ( 'urn:xmpp:attention:0' )
+-- register handler, if we are already connected
+main.hook ( 'hook-lua-start',
+	function ( args )
+		main.add_feature ( 'urn:xmpp:attention:0' )
+		attention_pc_handler ()
+	end )
+main.hook ('hook-lua-quit',
+	function ( args )
+		main.del_feature ( 'urn:xmpp:attention:0' )
+	end )
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/evil.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/evil.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -26,7 +26,12 @@
 -- TODO improve interface, check if we sending right thing for offline
 main.command ( 'evil',
 	function ( args )
-		local conn = lm.connection.bless ( main.connection () )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
+		local conn = lm.connection.bless ( connection )
 		if args[1] == 'status' then
 			local text = ''
 			for i, mesg in ipairs ( args ) do
@@ -71,22 +76,39 @@
 local evil_handler = lm.message_handler.new ( evil.stanza_handler )
 local evil_handler_registered = false
 
-hooks_d['hook-post-connect'].evil =
+local evil_pc_handler =
+	function ( args )
+		local connection = main.connection ()
+		if connection then
+			lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq',       'first' )
+			lm.connection.bless( main.connection () ):handler ( evil_handler, 'message',  'first' )
+			lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence', 'first' )
+			evil_handler_registered = true
+		end
+	end
+main.hook ( 'hook-post-connect', evil_pc_handler )
+main.hook ( 'hook-pre-disconnect',
 	function ( args )
-		lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq',       'first' )
-		lm.connection.bless( main.connection () ):handler ( evil_handler, 'message',  'first' )
-		lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence', 'first' )
-		evil_handler_registered = true
-		hooks_d['hook-post-connect'].evil = nil
-		hooks_d['hook-quit'].evil =
-			function ( args )
-				if evil_handler_registered then
-					lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq'       )
-					lm.connection.bless( main.connection () ):handler ( evil_handler, 'message'  )
-					lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence' )
-				end
+		if evil_handler_registered then
+			local connection = main.connection ()
+			if connection then
+				lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq'       )
+				lm.connection.bless( main.connection () ):handler ( evil_handler, 'message'  )
+				lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence' )
 			end
+			evil_handler_registered = false
+		end
+	end )
+
+main.hook ( 'hook-lua-start',
+	function ( args )
+		main.add_feature ( 'http://jabber.org/protocol/evil' )
+		evil_pc_handler ()
 	end
+main.hook ( 'hook-lua-quit',
+	function ( args )
+		main.del_feature ( 'http://jabber.org/protocol/evil' )
+	end )
 
 local char2xmpp = {
 	f = 'chat',
@@ -98,13 +120,14 @@
 }
 
 -- hack, but working ;)
-hooks_d['hook-my-status-change'].evil =
+main.hook ( 'hook-my-status-change',
 	function ( args )
 		if main.yesno ( main.option ( 'lua_evil_mode' ) ) then
-			evil.presence ( lm.connection.bless ( main.connection () ), nil, char2xmpp[args.new_status], args.message )
+			local connection = main.connection ()
+			if connection then
+				evil.presence ( lm.connection.bless ( connection ), nil, char2xmpp[args.new_status], args.message )
+			end
 		end
-	end
+	end )
 
-main.add_feature ( 'http://jabber.org/protocol/evil' )
-
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/jobs.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/jobs.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -63,15 +63,14 @@
 commands_help['delay'] = "[-t target_jid] status_letter message\n\nDelays sending a message to target jid (or current buddy) until it switches to specified status."
 commands_help['job'] = "[del jid status_letter]\n\nLists available jobs or deletes specified one."
 
-hooks_d['hook-status-change'].jobs =
+main.hook ( 'hook-status-change',
 	function ( args )
 		if delayed_jobs[args.jid] and delayed_jobs[args.jid][args.new_status] then
 			main.run ( delayed_jobs[args.jid][args.new_status] )
 			delayed_jobs[args.jid][args.new_status] = nil
 		end
-	end
+	end )
 
-hooks_d['hook-quit'].jobs = save_jobs
-	
+main.hook ( 'hook-lua-quit', save_jobs )
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/lm/attention.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/lm/attention.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -9,7 +9,7 @@
 
 local O = {
 	handler =
-		function ( mesg )
+		function ( mesg, from )
 		end,
 }
 
@@ -38,7 +38,7 @@
 		if body then
 			body = body:value ()
 		end
-		O.handler ( body )
+		O.handler ( body, mess:attribute ( "from" ) )
 	end
 	return false
 end
--- a/examples/mcabberrc.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/mcabberrc.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -56,6 +56,7 @@
 - del_completion - removes word from completions
 - command        - adds/removes mcabber command
 - option         - sets/gets mcabber option
+- hook           - creates hook handler object
 
 STRUCTURE
 
@@ -181,90 +182,36 @@
 		end
 	end )
 
--- commands to allow leading smileys
-for k, arg in ipairs ( { ')', '/', '(', 'D', '-/', 'S', '1', ']', '[' } ) do
-	main.command ( arg,
-		function ( args )
-			main.run ( 'say :' .. arg .. ' ' .. args )
-		end )
-end
-
--- HOOKS
-
-hooks_d = {
-	['hook-message-in']       = { },
-	['hook-message-out']      = { },
-	['hook-status-change']    = { },
-	['hook-my-status-change'] = { },
-	['hook-post-connect']     = { },
-	['hook-pre-disconnect']   = { },
-	['hook-start']            = { },
-	['hook-quit']             = { },
-}
+-- SAVING URLS TO FILE
+-- These are implemented in C in urlopen and openurl modules
 
--- hook:
--- - hook-message-in
---   jid
---   groupchat
---   message
--- - hook-message-out
---   jid
---   message
--- - hook-status-change
---   jid
---   resource
---   new_status
---   old_status
---   message
--- - hook-my-status-change
---   new_status
---   message
--- - hook-post-connect
--- - hook-pre-disconnect
--- - hook-start
--- - hook-quit
-function hook_handler ( args )
-	if [hooks_d[args.hook] then
-		for mod, cb in pairs ( hooks_d[args.hook] ) do
-			if cb then
-				cb ( args )
-			end
-		end
-	end
-end
-
--- FIXME
-
-hooks_d['hook-post-connect'].fifoperms =
-	function ( args )
-		-- TODO: posix
-		os.execute ( 'chmod 0666 ' .. main.option ( 'fifo_name' ) )
-		hooks_d['hook-post-connect'].fifoperms = nil
-	end
-
--- SAVING URLS TO FILE
-
-require 'urls'
+-- require 'urls'
 
 -- TRANSPORTED BUDDIES AVAILABILITY INDICATION
+-- After all, I do not use this anymore :/
+-- But you can try.
 
-require 'transports'
+-- require 'transports'
 
 -- BEEPING ON ALL MESSAGES
+-- Implemented in C by in-tree beep module
 
-require 'beep'
+-- require 'beep'
 
 -- MARKING
+-- Implemented in C in marking module
 
-require 'marking'
+-- require 'marking'
 
 -- JOBS
+-- Somewhat error-prone, requires jobs file existance, never seriously used by me :(
 
-require 'jobs'
+-- require 'jobs'
 
 -- ROOM NICK COMPLETION
+-- Well, it's sorta hacky, but I do use it
 
-require 'room_priv'
+-- require 'room_priv'
 
 -- FORMS
 
@@ -285,8 +232,9 @@
 require 'muc'
 
 -- IN-BAND BYTESTREAMS (XEP-0047)
+-- Implemented in C in streams module
 
-require 'ibb'
+-- require 'ibb'
 
 -- VCARD-TEMP (XEP-0054)
 
@@ -301,42 +249,50 @@
 require 'oob'
 
 -- MALICIOUS STANZAS (XEP-0076)
+-- Well, that's joke XEP and joke module
 
-require 'evil'
+-- require 'evil'
 
 -- IN-BAND REGISTRATION (XEP-0077)
 
 require 'register'
 
 -- USER LOCATION (XEP-0080)
+-- Implemented in C in geoloc module
 
-require 'geoloc'
+-- require 'geoloc'
 
 -- USER AVATAR (XEP-0084)
+-- Implemented in C in avatar module
 
-require 'avatar'
+-- require 'avatar'
 
 -- USER MOOD (XEP-0107)
+-- Implemented in C in mood module
 
-require 'mood'
+-- require 'mood'
 
 -- USER ACTIVITY (XEP-0108)
+-- Implemented in C in activity module
 
-require 'activity'
+-- require 'activity'
 
 -- USER TUNE (XEP-0118)
+-- Implemented in C in tune module
 
-require 'tune'
+-- require 'tune'
 
 -- REMOTE CONTROLLING CLIENTS (XEP-0146)
 
 require 'remote'
 
 -- PERSONAL EVENTING PROTOCOL (XEP-0163)
+-- Implemented in C in pep module
 
 -- XMPP PING (XEP-0199)
+-- Included into upstream as /request ping
 
-require 'ping'
+-- require 'ping'
 
 -- ATTENTION (XEP-0224)
 
--- a/examples/muc.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/muc.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -4,13 +4,18 @@
 
 main.command ( 'room-config',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		if args then
 			who = args
 		else
 			who = main.current_buddy ()
 		end
-		local conn = lm.connection.bless ( main.connection () )
+		local conn = lm.connection.bless ( connection )
 		muc.owner_config ( conn, who,
 			function ( form, submit, reject )
 				insert_form ( form,
@@ -40,4 +45,4 @@
 
 commands_help['room-config'] = "[room_jid]\n\nRequests room configuration form from server. You must be owner of this room."
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/oob.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/oob.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -14,6 +14,11 @@
 
 main.command ( 'oob',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		if args.t then
 			who = args.t
@@ -21,7 +26,7 @@
 			who = main.full_jid ()
 		end
 		-- here we can run something external to put file on server and obtain link to it
-		oob.send ( lm.connection.bless ( main.connection () ), who, args[1],
+		oob.send ( lm.connection.bless ( connection ), who, args[1],
 			function ()
 				main.print_info ( who, 'OOB link accepted' )
 			end,
@@ -30,30 +35,47 @@
 			end, args[2] )
 	end, true )
 
-local oob_iq_handler = lm.message_handler.new ( oob.iq_handler )
+local oob_iq_handler      = lm.message_handler.new ( oob.iq_handler )
 local oob_message_handler = lm.message_handler.new ( oob.message_handler )
 local oob_handler_registered = false
 
-hooks_d['hook-post-connect'].oob =
+local oob_pc_handler =
 	function ( args )
-		local conn = lm.connection.bless ( main.connection () )
-		conn:handler ( oob_iq_handler, 'iq', 'normal' )
-		conn:handler ( oob_message_handler, 'message', 'normal' )
-		conn:handler ( oob_message_handler, 'presence', 'normal' )
-		oob_handler_registered = true
-		hooks_d['hook-post-connect'].oob = nil
-		hooks_d['hook-quit'].oob =
-			function ( args )
-				if oob_handler_registered then
-					local conn = lm.connection.bless ( main.connection () )
-					conn:handler ( oob_iq_handler, 'iq' )
-					conn:handler ( oob_message_handler, 'message' )
-					conn:handler ( oob_message_handler, 'presence' )
-				end
+		local connection = main.connection ()
+		if connection then
+			local conn = lm.connection.bless ( connection )
+			conn:handler ( oob_iq_handler, 'iq', 'normal' )
+			conn:handler ( oob_message_handler, 'message', 'normal' )
+			conn:handler ( oob_message_handler, 'presence', 'normal' )
+			oob_handler_registered = true
+		end
+	end
+main.hook ( 'hook-post-connect', oob_pc_handler )
+main.hook ( 'hook-pre-disconnect',
+	function ( args )
+		if oob_handler_registered then
+			local connection = main.connection ()
+			if connection then
+				local conn = lm.connection.bless ( connection )
+				conn:handler ( oob_iq_handler, 'iq' )
+				conn:handler ( oob_message_handler, 'message' )
+				conn:handler ( oob_message_handler, 'presence' )
 			end
+			oob_handler_registered = false
+		end
 	end
 
-main.add_feature ( 'jabber:iq:oob' )
-main.add_feature ( 'jabber:x:oob' )
 
--- vim: se ts=4: --
+main.hook ( 'hook-lua-start',
+	function ( args )
+		main.add_feature ( 'jabber:iq:oob' )
+		main.add_feature ( 'jabber:x:oob' )
+		oob_pc_handler ()
+	end )
+main.hook ( 'hook-lua-quit',
+	function ( args )
+		main.del_feature ( 'jabber:iq:oob' )
+		main.del_feature ( 'jabber:x:oob' )
+	end )
+
+-- vim: se ts=4 sw=4: --
--- a/examples/privacy.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/privacy.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -9,8 +9,13 @@
 
 main.command ( 'blocklist',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local action = args[1]
-		local conn   = lm.connection.bless ( main.connection () )
+		local conn   = lm.connection.bless ( connection )
 		local who    = main.current_buddy ()
 		privacy.list ( conn, 'mcabber',
 			function ( list )
@@ -66,33 +71,31 @@
 local privacy_handler            = lm.message_handler.new ( privacy.iq_handler )
 local privacy_handler_registered = false
 
-hooks_d['hook-post-connect'].privacy =
+privacy_pc_handler =
 	function ( args )
-		privacy.active ( lm.connection.bless ( main.connection () ), 'mcabber',
-			function ()
-				print ( 'Server blocklist activated' )
-			end,
-			function ()
-				-- list may be absent, so, we will not pollute log with errors
-			end )
-		lm.connection.bless( main.connection () ):handler ( privacy_handler, 'iq', 'normal' )
-		privacy_handler_registered = true
-		hooks_d['hook-post-connect'].privacy =
-			function ( args )
-				privacy.active ( lm.connection.bless ( main.connection () ), 'mcabber',
-					function ()
-						print ( 'Server blocklist activated' )
-					end,
-					function ()
-						-- list may be absent, so, we will not pollute log with errors
-					end )
+		local connection = main.connection ()
+		if connection then
+			privacy.active ( lm.connection.bless ( connection ), 'mcabber',
+				function ()
+					print ( 'Server blocklist activated' )
+				end,
+				function ()
+					-- list may be absent, so, we will not pollute log with errors
+				end )
+			lm.connection.bless( connection ):handler ( privacy_handler, 'iq', 'normal' )
+			privacy_handler_registered = true
+		end
+	end
+main.hook ( 'hook-post-connect', privacy_pc_handler )
+main.hook ( 'hook-pre-disconnect',
+	function ( args )
+		if privacy_handler_registered then
+			local connection = main.connection ()
+			if connection then
+				lm.connection.bless( connection ):handler ( privacy_handler, 'iq' )
 			end
-		hooks_d['hook-quit'].privacy =
-			function ( args )
-				if privacy_handler_registered then
-					lm.connection.bless( main.connection () ):handler ( privacy_handler, 'iq' )
-				end
-			end
+			privacy_handler_registered = false
+		end
 	end
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/register.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/register.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -4,13 +4,18 @@
 
 main.command ( 'register',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		if args and args ~= '' then
 			who = args
 		else
 			who = main.full_jid ()
 		end
-		iq_register.register ( lm.connection.bless ( main.connection () ), who,
+		iq_register.register ( lm.connection.bless ( connection ), who,
 			function ( form, submit, reject )
 				insert_form ( form,
 					function ( form )
@@ -38,13 +43,18 @@
 	end, false, 'jid' )
 main.command ( 'cancel',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		if args and args ~= '' then
 			who = args
 		else
 			who = main.full_jid ()
 		end
-		iq_register.unregister ( lm.connection.bless ( main.connection () ), who,
+		iq_register.unregister ( lm.connection.bless ( connection ), who,
 			function ( form, submit, reject )
 				if not form then
 					main.print_info ( who, 'Successfully unregistered' )
@@ -78,4 +88,4 @@
 commands_help['register'] = "[jid]\n\nSends registration request to jid (or current buddy). You, probably, then will need to fill and send some form."
 commands_help['cancel'] = "[jid]\n\nSends registration cancellation request to jid (or current buddy). May require a form filling."
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/remote.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/remote.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -4,6 +4,11 @@
 
 main.command ( 'remote',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		if args.t then
 			who = args.t
@@ -11,7 +16,7 @@
 			who = main.full_jid ()
 		end
 		local action = args[1]
-		local conn   = lm.connection.bless ( main.connection () )
+		local conn   = lm.connection.bless ( connection )
 		if action then
 			remote.command ( conn, who, action,
 				function ( form, submit, reject )
@@ -63,4 +68,4 @@
 
 commands_help['remote'] = "[-t target_jid] [remote_command]\n\nPrints list of available remote command or requests execution of specified command."
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/room_priv.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/room_priv.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -41,11 +41,11 @@
 	end
 end
 
-hooks_d['hook-quit'].room_priv =
+main.hook ( 'hook-lua-quit',
 	function ( args )
 		for key, binding in pairs ( room_priv_restore ) do
 			main.binding ( key, binding )
 		end
-	end
+	end )
 
 -- vim: se ts=4: --
--- a/examples/transports.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/transports.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -17,7 +17,7 @@
 	return false
 end
 
-hooks_d['hook-status-change'].transports =
+local transports_pc_handler =
 	function ( args )
 		for k, jid in pairs ( transport_jids ) do
 			if args.jid == jid then
@@ -32,7 +32,7 @@
 		end
 	end
 
-hooks_d['hook-start'].transports =
+main.hook ( 'hook-lua-start',
 	function ( args )
 		for k, jid in pairs ( transport_jids ) do
 			if not online ( jid ) then
@@ -43,17 +43,17 @@
 				main.run ( ("color roster dn_? *@%s brightblack"):format ( jid ) )
 			end
 		end
-	end
+	end )
+main.hook ( 'hook-status-change', transports_pc_handler )
+main.hook ( 'hook-post-connect',  transports_pc_handler )
 
-hooks_d['hook-post-connect'].transports = hooks_d['hook-start'].transports
-
-hooks_d['hook-pre-disconnect'].transports =
+main.hook ( 'hook-pre-disconnect',
 	function ( args )
 		for k, jid in pairs ( transport_jids ) do
 			-- when disconnected, all buddies are inaccessible, so, make them the same
 			main.run ( ("color roster * *@%s white"):format ( jid ) )
 			main.run ( ("color roster dn_? *@%s brightblack"):format ( jid ) )
 		end
-	end
+	end )
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --
--- a/examples/vcard.lua	Wed Mar 31 00:28:04 2010 +0300
+++ b/examples/vcard.lua	Wed Mar 31 01:25:19 2010 +0300
@@ -6,9 +6,14 @@
 
 main.command ( 'vcard-temp',
 	function ( args )
+		local connection = main.connection ()
+		if not connection then
+			print "You are not online!"
+			return
+		end
 		local who
 		local action = args[1]
-		local conn   = lm.connection.bless ( main.connection () )
+		local conn   = lm.connection.bless ( connection )
 		if not action then
 			who = conn:jid():gsub ( '/.*', '' )
 		elseif action == 'photo' then
@@ -93,4 +98,4 @@
 
 commands_help['vcard-temp'] = '[photo filename | . | jid]\n\nObtains vcard (as a form, but you may not submit it). Without arguments obtains your own vcard. "." means current buddy.\nYou can also publish your photo from file, that will automatically get your vcard, put a data into it and submit to server.'
 
--- vim: se ts=4: --
+-- vim: se ts=4 sw=4: --