examples/evil.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 121 75a7d595817c
permissions -rw-r--r--
Fix module loading problem
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     2
local lm   = require 'lm'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     3
local evil = require 'lm.evil'
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     5
evil.handler (
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     6
	function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     7
		local evillevel = tonumber(main.option ( 'lua_evil_sensibility' ))
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     8
		local mtype, smtype = mess:type ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     9
		if evillevel > 1 then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    10
			main.print_info ( mess:attribute ( 'from' ), 'Evil stanza of type ' .. mtype .. '.' .. smtype .. ' detected!' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    11
		elseif evillevel > 0 then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    12
			print ( 'Tainted by evil stanza of type ' .. mtype .. '.' .. smtype .. ' from ' .. ( mess:attribute ( 'from' ) or '... unknown in black' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    13
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    14
		return main.yesno ( main.option ( 'lua_filter_evil' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    15
	end )
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    17
local stat2xmpp = {
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    18
	free     = 'chat',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    19
	online   = '',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    20
	away     = 'away',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    21
	dnd      = 'dnd',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    22
	notavail = 'xa',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    23
	offline  = 'unavailable',
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
}
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    26
-- TODO improve interface, check if we sending right thing for offline
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    27
main.command ( 'evil',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    28
	function ( args )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    29
		local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    30
		if not connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    31
			print "You are not online!"
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    32
			return
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    33
		end
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    34
		local conn = lm.connection.bless ( connection )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    35
		if args[1] == 'status' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    36
			local text = ''
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    37
			for i, mesg in ipairs ( args ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    38
				if i > 2 then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    39
					text = text .. ' ' .. mesg
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    40
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    41
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    42
			local st = stat2xmpp[args[2]]
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    43
			if not st then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    44
				st = ''
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    45
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    46
			evil.presence ( conn, args.t, st, text:sub ( 2 ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    47
		else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    48
			local text = ''
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    49
			if args[1] == 'message' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    50
				for i, mesg in ipairs ( args ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    51
					if i > 1 then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    52
						text = text .. ' ' .. mesg
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    53
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    54
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    55
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    56
				for i, mesg in ipairs ( args ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    57
					text = text .. ' ' .. mesg
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    58
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    59
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    60
			local mtype = 'chat'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    61
			if args.k then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    62
				mtype = args.k
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    63
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    64
			local who
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    65
			if args.t then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    66
				who = args.t
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    67
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    68
				who = main.current_buddy ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    69
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    70
			evil.message ( conn, who, mtype, text:sub ( 2 ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    71
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    72
	end, true )
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    73
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    74
commands_help['evil'] = "[-t jid] [status stat [message] | [-k message_type] [message] message]\n\nSends evil message or presence.\nmessage_type may be chat, normal, headline.\nNote, that for now it will not change mcabber's status."
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    75
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    76
local evil_handler = lm.message_handler.new ( evil.stanza_handler )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    77
local evil_handler_registered = false
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    79
local evil_pc_handler =
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    80
	function ( args )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    81
		local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    82
		if connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    83
			lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq',       'first' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    84
			lm.connection.bless( main.connection () ):handler ( evil_handler, 'message',  'first' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    85
			lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence', 'first' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    86
			evil_handler_registered = true
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    87
		end
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    88
	end
111
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 99
diff changeset
    89
local evil_pd_handler = 
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    90
	function ( args )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    91
		if evil_handler_registered then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    92
			local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    93
			if connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    94
				lm.connection.bless( main.connection () ):handler ( evil_handler, 'iq'       )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    95
				lm.connection.bless( main.connection () ):handler ( evil_handler, 'message'  )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    96
				lm.connection.bless( main.connection () ):handler ( evil_handler, 'presence' )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    97
			end
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    98
			evil_handler_registered = false
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    99
		end
111
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 99
diff changeset
   100
	end
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 99
diff changeset
   101
main.hook ( 'hook-post-connect',   evil_pc_handler )
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 99
diff changeset
   102
main.hook ( 'hook-pre-disconnect', evil_pd_handler )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   103
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   104
main.hook ( 'hook-lua-start',
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   105
	function ( args )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   106
		main.add_feature ( 'http://jabber.org/protocol/evil' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   107
		evil_pc_handler ()
121
75a7d595817c Put help into separate files
Myhailo Danylenko <isbear@ukrpost.net>
parents: 111
diff changeset
   108
	end )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   109
main.hook ( 'hook-lua-quit',
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   110
	function ( args )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   111
		main.del_feature ( 'http://jabber.org/protocol/evil' )
111
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 99
diff changeset
   112
		evil_pd_handler ()
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   113
	end )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   114
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   115
local char2xmpp = {
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   116
	f = 'chat',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   117
	o = '',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   118
	a = 'away',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   119
	d = 'dnd',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   120
	n = 'xa',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   121
	_ = 'unavailable',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   122
}
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   124
-- hack, but working ;)
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   125
main.hook ( 'hook-my-status-change',
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   126
	function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   127
		if main.yesno ( main.option ( 'lua_evil_mode' ) ) then
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   128
			local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   129
			if connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   130
				evil.presence ( lm.connection.bless ( connection ), nil, char2xmpp[args.new_status], args.message )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   131
			end
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
   132
		end
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   133
	end )
62
fb81aeb45e00 Vcard and Evil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   135
-- vim: se ts=4 sw=4: --