本文python源码为实现,Python WebSocket服务端编程代码完成gtalk机器人的全部代码段。需要用到python sys、sleekxmpp、reactor等python模块及方法,在代码中导入部分可以查看到详细方法。
python websocket库,运作机制及客户端和服务端的 API 实现。Python WebSocket的具体操作方法和工作原理也可以查看相关文章来学习。
import sys
from twisted.internet import reactor
from twisted.python import log
from autobahn.websocket import WebSocketServerFactory, WebSocketServerProtocol
import sleekxmpp
reload(sys)
sys.setdefaultencoding('utf8')
class gtalkBot(sleekxmpp.ClientXMPP):
"""
A basic SleekXMPP bot that will log in, send a message,
and then log out.
"""
def __init__(self, jid, password):
sleekxmpp.ClientXMPP.__init__(self, jid, password)
self.recipient = 'wxg4net@gmail.com'
self.status_text = ''
self.add_event_handler("session_start", self.start)
self.add_event_handler("message", self.muc_message)
self.add_event_handler('presence_available',
self.handle_presence_available)
self.add_event_handler('presence_unavailable',
self.handle_presence_unavailable)
self.add_event_handler('presence_dnd',
self.handle_presence_dnd)
def start(self, event):
self.send_presence()
self.get_roster()
def handle_presence_unavailable(self, presence):
if cmp(presence['from'].bare, self.recipient) == 0:
self.status_text = presence['status']
def handle_presence_available(self, presence):
if cmp(presence['from'].bare, self.recipient) == 0:
self.status_text = presence['status']
def handle_presence_dnd(self, presence):
if cmp(presence['from'].bare, self.recipient) == 0:
self.status_text = presence['status']
def muc_message(self, msg):
fwho = msg['from'].bare
body = msg['body']
if cmp(body,'-qsbk') == 0:
self.send_message(mto=fwho,
mbody='当前服务已关闭',
mtype='chat')
elif cmp(body,'-help') == 0:
self.send_message(mto=fwho,
mbody='当前服务开发中...',
mtype='chat')
elif cmp(fwho, self.recipient) == 0:
factory.broadcast(str(body))
else:
self.send_message(mto=fwho,
mbody='当前服务开发中...',
mtype='chat')
def sendMessageTome(self, message):
self.send_message(mto="wxg4net@gmail.com",
mbody=message,
mtype='chat')
#python websocket
class BroadcastServerProtocol(WebSocketServerProtocol):
def __init__(self):
self.istip = True
self.Heartbeat()
def Heartbeat(self):
reactor.callLater(1, self.Heartbeat)
def onOpen(self):
self.factory.register(self)
def onMessage(self, msg, binary):
xmpp.sendMessageTome(msg)
if self.istip:
self.sendMessage('你好,websocket python的当前状态是:'+str(xmpp.status_text)+'。---祝你生活愉快!')
self.istip = False
def connectionLost(self, reason):
WebSocketServerProtocol.connectionLost(self, reason)
self.factory.unregister(self)
class BroadcastServerFactory(WebSocketServerFactory):
protocol = BroadcastServerProtocol
def __init__(self):
WebSocketServerFactory.__init__(self)
self.clients = []
def register(self, client):
if not client in self.clients:
self.clients.append(client)
def unregister(self, client):
if client in self.clients:
self.clients.remove(client)
def broadcast(self, message):
if self.clients:
for c in self.clients:
c.sendMessage(message)
#www.iplaypy.com
if __name__ == '__main__':
1a58
log.startLogging(sys.stdout)
xmpp = gtalkBot("phzggzs@gmail.com", "*******")
xmpp.register_plugin('xep_0030') # Service Discovery
xmpp.register_plugin('xep_0199') # XMPP Ping
if xmpp.connect():
xmpp.process(threaded=True)
factory = BroadcastServerFactory()
reactor.listenTCP(9090, factory)
reactor.run()
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/c2700.html
相关文章 Recommend