diff options
Diffstat (limited to 'src/xmpppy-0.5.0rc1/doc/examples/bot.py')
-rwxr-xr-x | src/xmpppy-0.5.0rc1/doc/examples/bot.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/xmpppy-0.5.0rc1/doc/examples/bot.py b/src/xmpppy-0.5.0rc1/doc/examples/bot.py new file mode 100755 index 00000000..42636300 --- /dev/null +++ b/src/xmpppy-0.5.0rc1/doc/examples/bot.py @@ -0,0 +1,94 @@ +#!/usr/bin/python +# -*- coding: koi8-r -*- +# $Id: bot.py,v 1.2 2006/10/06 12:30:42 normanr Exp $ +import sys +import xmpp + +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 + +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"*int(args) +########################### 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(sys.argv[1]) + user,server,password=jid.getNode(),jid.getDomain(),sys.argv[2] + + 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) |