summaryrefslogtreecommitdiffstats
path: root/bots/eng-mal-bot.py
blob: cc1120948b07fa71f390d8130a4980bc00ea6948 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# eng-mal-bot.py A Jabbe buddy bot which provide eng-mal dictionary lookup service
#       
# Copyright (c) 2009 Santhosh Thottingal <santhosh.thottingal@gmail.com>
# http://smc.org.in/
#       
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#       
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

import xmpp
from xmpp.protocol import *
from xmpp.roster import *
import os

options = {
	'JID': 'eng.mal.dict@gmail.com',
	'Password': 'രഹസ്യം(പറയൂല!) !',
}

def presenceHandler(conn,presence_node):
    """ Handler for playing a sound when particular contact became online """
    targetJID='node@domain.org'
    print presence_node.getFrom()
    if presence_node.getFrom().bareMatch(targetJID):
        # play a sound
        pass
def iqHandler(conn,iq_node):
    """ Handler for processing some "get" query from custom namespace"""
    reply=iq_node.buildReply('result')
    # ... put some content into reply node
    conn.send(reply)
    raise NodeProcessed  # This stanza is fully processed

        
def messageHandler(conn,message):
	user = message.getFrom()
	text = message.getBody()
	if(text):
		if " " in text:
			command, args = text.split(" ", 1)
		else:
			command, text = text, ""
		command = command.upper()
		#ഇതു വര്‍ക്കു ചെയ്യുന്നില്ല! :(
		if command == "SUBSCRIBE":
			rost=Roster().PlugIn(conn)
			rost=Roster.getRoster() 
			ros.Authorize(user)
			reply = "Authorized."
			conn.send(reply)
			raise NodeProcessed  # This stanza is fully processed
		else:
			command = "dict --database dict-en-ml '" + message.getBody() +"'"
			stdin, stdout = os.popen2(command)
			# ... put some content into reply node
			conn.send( xmpp.Message( user,stdout.read()))
			stdout.close()
			raise NodeProcessed  # This stanza is fully processed

class ConnectionError: pass
class AuthorizationError: pass
class NotImplemented: pass

class Bot:
	""" The main bot class. """

	def __init__(self, JID, Password):
		""" Create a new bot. Connect to the server and log in. """

		# connect...
		jid = xmpp.JID(JID)
		self.connection = xmpp.Client(jid.getDomain(), debug=['always', 'browser', 'testcommand'])
		result = self.connection.connect()
		
		if result is None:
			raise ConnectionError

		# authorize
		result = self.connection.auth(jid.getNode(), Password)

		if result is None:
			raise AuthorizationError

		self.connection.RegisterHandler('presence',presenceHandler)
		self.connection.RegisterHandler('iq',iqHandler)
		self.connection.RegisterHandler('message',messageHandler)
		# ...become available
		self.connection.sendInitPresence()
		# presence
		self.connection.sendInitPresence(requestRoster=0)

	def loop(self):
		""" Do nothing except handling new xmpp stanzas. """
		try:
			while self.connection.Process(1):
				pass
		except KeyboardInterrupt:
			pass

bot = Bot(**options)
bot.loop()