#!/usr/bin/env python
print "Content-Type: text/html"
print
import sys,string
import xmpp,httplib2
commands={}
i18n={'ru':{},'en':{}}
########################### user handlers start ##################################
i18n['en']['HELP']="This is example jabber bot.\nAvailable commands: %s"
def helpHandler(user,command,args,mess):
lst=commands.keys()
lst.sort()
return "HELP",', '.join(lst)
i18n['en']['EMPTY']="%s"
i18n['en']['HOOK1']='Responce 1: %s'
def hook1Handler(user,command,args,mess):
return "HOOK1",'You requested: %s'%args
def hook4Handler(user,command,args,mess):
h = httplib2.Http(".cache")
if len(args)>2:
resp, content = h.request(args)
#print content
return "HOOK4",content
i18n['en']['HOOK2']='Responce 2: %s'
def hook2Handler(user,command,args,mess):
return "HOOK2","hook2 called with %s"%(`(user,command,args,mess)`)
i18n['en']['HOOK3']='Responce 3: static string'
def hook3Handler(user,command,args,mess):
return "HOOK3"
########################### user handlers stop ###################################
############################ bot logic start #####################################
i18n['en']["UNKNOWN COMMAND"]='Unknown command "%s". Try "help"'
i18n['en']["UNKNOWN USER"]="I do not know you. Register first."
def messageCB(conn,mess):
text=mess.getBody()
user=mess.getFrom()
user.lang='en' # dup
if text.find(' ')+1: command,args=text.split(' ',1)
else: command,args=text,''
cmd=command.lower()
if commands.has_key(cmd): reply=commands[cmd](user,command,args,mess)
else: reply=("UNKNOWN COMMAND",cmd)
if type(reply)==type(()):
key,args=reply
if i18n[user.lang].has_key(key): pat=i18n[user.lang][key]
elif i18n['en'].has_key(key): pat=i18n['en'][key]
else: pat="%s"
if type(pat)==type(''): reply=pat%args
else: reply=pat(**args)
else:
try: reply=i18n[user.lang][reply]
except KeyError:
try: reply=i18n['en'][reply]
except KeyError: pass
if reply: conn.send(xmpp.Message(mess.getFrom(),reply))
for i in globals().keys():
if i[-7:]=='Handler' and i[:-7].lower()==i[:-7]: commands[i[:-7]]=globals()[i]
############################# bot logic stop #####################################
def StepOn(conn):
try:
conn.Process(1)
except KeyboardInterrupt: return 0
return 1
def GoOn(conn):
while StepOn(conn): pass
if len(sys.argv)>3:
print "Usage: bot.py username@server.net password"
else:
jid=xmpp.JID(name_of_bot@jabber.org')
user,server,password=jid.getNode(),jid.getDomain(),'password_here'
conn=xmpp.Client(server)#,debug=[])
conres=conn.connect()
if not conres:
print "Unable to connect to server %s!"%server
sys.exit(1)
if conres<>'tls':
print "Warning: unable to estabilish secure connection - TLS failed!"
authres=conn.auth(user,password)
if not authres:
print "Unable to authorize on %s - check login/password."%server
sys.exit(1)
if authres<>'sasl':
print "Warning: unable to perform SASL auth os %s. Old authentication method used!"%server
conn.RegisterHandler('message',messageCB)
conn.sendInitPresence()
print "Bot started."
GoOn(conn)
Last edited Feb. 25, 2008, 11:14 p.m.