zoukankan      html  css  js  c++  java
  • 在Openwrt上跑xmpppy

    首先,将python,libexpat,python-expat,libopenssl,python-openssl这几个包编译到固件中。 然后,将xmpp,dnspython这两个包复制到python的库文件目录: /usr/lib/python2.6/ 然后运行测试程序:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # $Id: bot.py,v 1.2 2006/10/06 12:30:42 normanr Exp $
    # edit by TLightSky 2012/06/08 16:05
    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)
  • 相关阅读:
    我为何需要使用空接口?
    Castle 整合.NET Remoting
    MVC结构简介
    在asp.net页面上得到Castle容器的实例
    Castle.MVC框架介绍
    08.vue-router动态路由匹配
    07. vue-router嵌套路由
    06.路由重定向
    04 Vue Router路由管理器
    ES6新特性之 let 、const
  • 原文地址:https://www.cnblogs.com/TLightSky/p/2941476.html
Copyright © 2011-2022 走看看