import sys, xmpp from xmpp import cli from datetime import datetime import json import jsonAndRequest as jsreq #Основной класс бота class JabberBot: def __init__(self, jid, password, port): self.jidd = jid jid = xmpp.JID(jid) self.user, self.server, self.password, self.port = jid.getNode(), jid.getDomain(), password, port self.connect() self.auth() #Метод проверки подключения к серверу xmpp def connect(self): self.conn = xmpp.Client(self.server, self.port,debug = []) conn_result = self.conn.connect() if not conn_result: print("Can't connect to server!\n") sys.exit(1) #Метод аутентификации def auth(self): #по идее, тут может быть актуально также передать информацию относительно порта, например auth_result = self.conn.auth(self.user, self.password) if not auth_result: print (self.user, self.password) print("Can't to authorize!\n") sys.exit(1) #Метод для привязки функций к событиям def register_handler(self, name, handler): self.conn.RegisterHandler(name, handler) def step_on(self): try: self.conn.Process(5) #с какой частотой происходит подключение к серверу, в данном случае каждую секунду except KeyboardInterrupt: return 0 return 1 def bot_log(self, message): #надо строчку лога сделать более информативной logfile = open(datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a") logfile.write(message) logfile.close() print (message) def send_notification(self, recipient, message): self.conn.send(xmpp.Message(recipient, message)) self.bot_log("Message sent successfully"+" "+recipient+" "+message) # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой. def proceed_status(self, recipient, ticket): #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему jsonTicket = json.dumps(ticket.__dict__) self.conn.send(xmpp.Message(recipient, jsonTicket)) self.bot_log("Message sent successfully"+" "+recipient+" "+jsonTicket) #сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле def start(self, handler, *args): self.conn.sendInitPresence()#статус аккаунта бота (активен или нет) print("Bot started!") while self.step_on(): #это вызов конкретной функции для обработки статуса конкретным ботом #handler(args) handler() pass